fast-multistep.ll 980 B

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