multistep.ll 843 B

123456789101112131415161718192021222324252627282930
  1. ; RUN: opt < %s -reassociate -S | FileCheck %s
  2. define i64 @multistep1(i64 %a, i64 %b, i64 %c) {
  3. ; Check that a*a*b+a*a*c is turned into a*(a*(b+c)).
  4. ; CHECK-LABEL: @multistep1(
  5. %t0 = mul i64 %a, %b
  6. %t1 = mul i64 %a, %t0 ; a*(a*b)
  7. %t2 = mul i64 %a, %c
  8. %t3 = mul i64 %a, %t2 ; a*(a*c)
  9. %t4 = add i64 %t1, %t3
  10. ; CHECK-NEXT: add i64 %c, %b
  11. ; CHECK-NEXT: mul i64 %a, %tmp{{.*}}
  12. ; CHECK-NEXT: mul i64 %tmp{{.*}}, %a
  13. ; CHECK-NEXT: ret
  14. ret i64 %t4
  15. }
  16. define i64 @multistep2(i64 %a, i64 %b, i64 %c, i64 %d) {
  17. ; Check that a*b+a*c+d is turned into a*(b+c)+d.
  18. ; CHECK-LABEL: @multistep2(
  19. %t0 = mul i64 %a, %b
  20. %t1 = mul i64 %a, %c
  21. %t2 = add i64 %t1, %d ; a*c+d
  22. %t3 = add i64 %t0, %t2 ; a*b+(a*c+d)
  23. ; CHECK-NEXT: add i64 %c, %b
  24. ; CHECK-NEXT: mul i64 %tmp{{.*}}, %a
  25. ; CHECK-NEXT: add i64 %tmp{{.*}}, %d
  26. ; CHECK-NEXT: ret
  27. ret i64 %t3
  28. }