mulfactor.ll 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. ; RUN: opt < %s -reassociate -S | FileCheck %s
  2. define i32 @test1(i32 %a, i32 %b) {
  3. ; CHECK-LABEL: @test1(
  4. ; CHECK: mul i32 %a, %a
  5. ; CHECK-NEXT: mul i32 %a, 2
  6. ; CHECK-NEXT: add
  7. ; CHECK-NEXT: mul
  8. ; CHECK-NEXT: add
  9. ; CHECK-NEXT: ret
  10. entry:
  11. %tmp.2 = mul i32 %a, %a
  12. %tmp.5 = shl i32 %a, 1
  13. %tmp.6 = mul i32 %tmp.5, %b
  14. %tmp.10 = mul i32 %b, %b
  15. %tmp.7 = add i32 %tmp.6, %tmp.2
  16. %tmp.11 = add i32 %tmp.7, %tmp.10
  17. ret i32 %tmp.11
  18. }
  19. define i32 @test2(i32 %t) {
  20. ; CHECK-LABEL: @test2(
  21. ; CHECK: mul
  22. ; CHECK-NEXT: add
  23. ; CHECK-NEXT: ret
  24. entry:
  25. %a = mul i32 %t, 6
  26. %b = mul i32 %t, 36
  27. %c = add i32 %b, 15
  28. %d = add i32 %c, %a
  29. ret i32 %d
  30. }
  31. define i32 @test3(i32 %x) {
  32. ; (x^8)
  33. ; CHECK-LABEL: @test3(
  34. ; CHECK: mul
  35. ; CHECK-NEXT: mul
  36. ; CHECK-NEXT: mul
  37. ; CHECK-NEXT: ret
  38. entry:
  39. %a = mul i32 %x, %x
  40. %b = mul i32 %a, %x
  41. %c = mul i32 %b, %x
  42. %d = mul i32 %c, %x
  43. %e = mul i32 %d, %x
  44. %f = mul i32 %e, %x
  45. %g = mul i32 %f, %x
  46. ret i32 %g
  47. }
  48. define i32 @test4(i32 %x) {
  49. ; (x^7)
  50. ; CHECK-LABEL: @test4(
  51. ; CHECK: mul
  52. ; CHECK-NEXT: mul
  53. ; CHECK-NEXT: mul
  54. ; CHECK-NEXT: mul
  55. ; CHECK-NEXT: ret
  56. entry:
  57. %a = mul i32 %x, %x
  58. %b = mul i32 %a, %x
  59. %c = mul i32 %b, %x
  60. %d = mul i32 %c, %x
  61. %e = mul i32 %d, %x
  62. %f = mul i32 %e, %x
  63. ret i32 %f
  64. }
  65. define i32 @test5(i32 %x, i32 %y) {
  66. ; (x^4) * (y^2)
  67. ; CHECK-LABEL: @test5(
  68. ; CHECK: mul
  69. ; CHECK-NEXT: mul
  70. ; CHECK-NEXT: mul
  71. ; CHECK-NEXT: ret
  72. entry:
  73. %a = mul i32 %x, %y
  74. %b = mul i32 %a, %y
  75. %c = mul i32 %b, %x
  76. %d = mul i32 %c, %x
  77. %e = mul i32 %d, %x
  78. ret i32 %e
  79. }
  80. define i32 @test6(i32 %x, i32 %y, i32 %z) {
  81. ; (x^5) * (y^3) * z
  82. ; CHECK-LABEL: @test6(
  83. ; CHECK: mul
  84. ; CHECK-NEXT: mul
  85. ; CHECK-NEXT: mul
  86. ; CHECK-NEXT: mul
  87. ; CHECK-NEXT: mul
  88. ; CHECK-NEXT: mul
  89. ; CHECK-NEXT: ret
  90. entry:
  91. %a = mul i32 %x, %y
  92. %b = mul i32 %a, %x
  93. %c = mul i32 %b, %y
  94. %d = mul i32 %c, %x
  95. %e = mul i32 %d, %y
  96. %f = mul i32 %e, %x
  97. %g = mul i32 %f, %z
  98. %h = mul i32 %g, %x
  99. ret i32 %h
  100. }
  101. define i32 @test7(i32 %x, i32 %y, i32 %z) {
  102. ; (x^4) * (y^3) * (z^2)
  103. ; CHECK-LABEL: @test7(
  104. ; CHECK: mul
  105. ; CHECK-NEXT: mul
  106. ; CHECK-NEXT: mul
  107. ; CHECK-NEXT: mul
  108. ; CHECK-NEXT: mul
  109. ; CHECK-NEXT: ret
  110. entry:
  111. %a = mul i32 %y, %x
  112. %b = mul i32 %a, %z
  113. %c = mul i32 %b, %z
  114. %d = mul i32 %c, %x
  115. %e = mul i32 %d, %y
  116. %f = mul i32 %e, %y
  117. %g = mul i32 %f, %x
  118. %h = mul i32 %g, %x
  119. ret i32 %h
  120. }