diff options
| author | Quentin Carbonneaux <[email protected]> | 2024-04-11 10:28:41 +0200 |
|---|---|---|
| committer | Quentin Carbonneaux <[email protected]> | 2024-04-11 14:14:53 +0200 |
| commit | 4a809d69b5647aabc8f6a9e22e0bc889f9c779ed (patch) | |
| tree | 31168efce4b56685c1564ea49b93a56bc27c9569 /test | |
| parent | 8e8f7064366996a7fcc8d84267958cfaf5ee8194 (diff) | |
fold scaled offsets in addresses
Diffstat (limited to 'test')
| -rw-r--r-- | test/isel4.ssa | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/test/isel4.ssa b/test/isel4.ssa new file mode 100644 index 0000000..874807e --- /dev/null +++ b/test/isel4.ssa @@ -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; +# } +# <<< |
