fold scaled offsets in addresses
This commit is contained in:
parent
8e8f706436
commit
4a809d69b5
5 changed files with 79 additions and 11 deletions
64
test/isel4.ssa
Normal file
64
test/isel4.ssa
Normal file
|
@ -0,0 +1,64 @@
|
|||
# amd64 address-folding stress
|
||||
|
||||
export function w $f0(l %a, l %b) {
|
||||
@start
|
||||
%c =l add %b, 2
|
||||
%d =l mul %c, 4
|
||||
%e =l add %a, %d
|
||||
%q =l loadw %e
|
||||
ret %q
|
||||
}
|
||||
|
||||
export function w $f1(l %a, l %b) {
|
||||
@start
|
||||
%c =l add 1, %b
|
||||
%f =l add %c, 1
|
||||
%d =l mul %f, 4
|
||||
%e =l add %d, %a
|
||||
%q =l loadw %e
|
||||
ret %q
|
||||
}
|
||||
|
||||
export function w $f2(l %a, l %b) {
|
||||
@start
|
||||
%l =l mul %b, 4
|
||||
%d =l add 8, %l
|
||||
%e =l add %a, %d
|
||||
%q =l loadw %e
|
||||
ret %q
|
||||
}
|
||||
|
||||
# fixme: folding is not good here
|
||||
export function w $f3(l %a, l %b) {
|
||||
@start
|
||||
%l =l mul %b, 4
|
||||
%d =l add 4, %l
|
||||
%f =l add 4, %d
|
||||
%e =l add %a, %f
|
||||
%q =l loadw %e
|
||||
ret %q
|
||||
}
|
||||
|
||||
export function w $f4(l %a, l %b) {
|
||||
@start
|
||||
%c =l add 1, %b
|
||||
%d =l mul %c, 4
|
||||
%e =l add 4, %d
|
||||
%f =l add %e, %a
|
||||
%q =l loadw %f
|
||||
ret %q
|
||||
}
|
||||
|
||||
# >>> driver
|
||||
# int a[] = {1, 2, 3, 4};
|
||||
# typedef int loadf(int *, long long);
|
||||
# extern loadf f0, f1, f2, f3, f4;
|
||||
# loadf *fns[] = {&f0, &f1, &f2, &f3, &f4, 0};
|
||||
# int main() {
|
||||
# loadf **f;
|
||||
# int n;
|
||||
# for (n=1,f=fns; *f; f++,n++)
|
||||
# if ((*f)(a, 1) != 4) return n;
|
||||
# return 0;
|
||||
# }
|
||||
# <<<
|
Loading…
Add table
Add a link
Reference in a new issue