diff options
author | Quentin Carbonneaux <quentin@c9x.me> | 2019-02-21 14:42:01 +0100 |
---|---|---|
committer | Quentin Carbonneaux <quentin@c9x.me> | 2019-02-21 14:46:18 +0100 |
commit | a877ba986b4c5b24ee07d59b3001d45fd5b3f834 (patch) | |
tree | 64ea16f84451b2e7dd1ce16de68a25acf1b5f61e /test | |
parent | cf9f2e8ef7e775bcedf74b70a3dd35962484f1f1 (diff) | |
download | roux-a877ba986b4c5b24ee07d59b3001d45fd5b3f834.tar.gz |
fix amd64 addressing mode matcher
The numberer made some arranging choices when numbering arguments of an instruction, but these decisions were ignored when matching. The fix is to reconcile numbering and matching.
Diffstat (limited to 'test')
-rw-r--r-- | test/isel1.ssa | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/test/isel1.ssa b/test/isel1.ssa new file mode 100644 index 0000000..879a871 --- /dev/null +++ b/test/isel1.ssa @@ -0,0 +1,24 @@ +# tests that the address matcher is not +# confused by the two multiplications + +# note: the code handling apple asm fixes +# ruins the good work of the matcher here, +# I should revisit these fixes + +export function w $f(l %i, l %j) { +@start + %off1 =l mul %i, 8 + %a_i =l add $a, %off1 + %off2 =l mul %j, 4 + %a_ij =l add %a_i, %off2 + %x =w loadsw %a_ij + ret %x +} + +# >>> driver +# int a[] = {1, 2, 3, 4}; +# extern int f(long long, long long); +# int main() { +# return !(f(0, 0) == 1 && f(0, 1) == 2 && f(1, 0) == 3 && f(1, 1) == 4); +# } +# <<< |