isel4.ssa 1016 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. # amd64 address-folding stress
  2. export function w $f0(l %a, l %b) {
  3. @start
  4. %c =l add %b, 2
  5. %d =l mul %c, 4
  6. %e =l add %a, %d
  7. %q =l loadw %e
  8. ret %q
  9. }
  10. export function w $f1(l %a, l %b) {
  11. @start
  12. %c =l add 1, %b
  13. %f =l add %c, 1
  14. %d =l mul %f, 4
  15. %e =l add %d, %a
  16. %q =l loadw %e
  17. ret %q
  18. }
  19. export function w $f2(l %a, l %b) {
  20. @start
  21. %l =l mul %b, 4
  22. %d =l add 8, %l
  23. %e =l add %a, %d
  24. %q =l loadw %e
  25. ret %q
  26. }
  27. # fixme: folding is not good here
  28. export function w $f3(l %a, l %b) {
  29. @start
  30. %l =l mul %b, 4
  31. %d =l add 4, %l
  32. %f =l add 4, %d
  33. %e =l add %a, %f
  34. %q =l loadw %e
  35. ret %q
  36. }
  37. export function w $f4(l %a, l %b) {
  38. @start
  39. %c =l add 1, %b
  40. %d =l mul %c, 4
  41. %e =l add 4, %d
  42. %f =l add %e, %a
  43. %q =l loadw %f
  44. ret %q
  45. }
  46. # >>> driver
  47. # int a[] = {1, 2, 3, 4};
  48. # typedef int loadf(int *, long long);
  49. # extern loadf f0, f1, f2, f3, f4;
  50. # loadf *fns[] = {&f0, &f1, &f2, &f3, &f4, 0};
  51. # int main() {
  52. # loadf **f;
  53. # int n;
  54. # for (n=1,f=fns; *f; f++,n++)
  55. # if ((*f)(a, 1) != 4) return n;
  56. # return 0;
  57. # }
  58. # <<<