Home | History | Annotate | Download | only in Reassociate
      1 ; RUN: opt -reassociate %s -S | FileCheck %s
      2 
      3 define float @foo(float %a,float %b, float %c) {
      4 ; CHECK-LABEL: @foo(
      5 ; CHECK-NEXT:    [[MUL3:%.*]] = fmul float %a, %b
      6 ; CHECK-NEXT:    [[FACTOR:%.*]] = fmul fast float %c, 2.000000e+00
      7 ; CHECK-NEXT:    [[REASS_ADD1:%.*]] = fadd fast float [[FACTOR]], %b
      8 ; CHECK-NEXT:    [[REASS_MUL:%.*]] = fmul fast float [[REASS_ADD1]], %a
      9 ; CHECK-NEXT:    [[ADD3:%.*]] = fadd fast float [[REASS_MUL]], [[MUL3]]
     10 ; CHECK-NEXT:    ret float [[ADD3]]
     11 ;
     12   %mul1 = fmul fast float %a, %c
     13   %mul2 = fmul fast float %a, %b
     14   %mul3 = fmul float %a, %b   ; STRICT
     15   %mul4 = fmul fast float %a, %c
     16   %add1 = fadd fast  float %mul1, %mul3
     17   %add2 = fadd fast float %mul4, %mul2
     18   %add3 = fadd fast float %add1, %add2
     19   ret float %add3
     20 }
     21 
     22 define float @foo_reassoc(float %a,float %b, float %c) {
     23 ; CHECK-LABEL: @foo_reassoc(
     24 ; CHECK-NEXT:    [[MUL1:%.*]] = fmul reassoc float %a, %c
     25 ; CHECK-NEXT:    [[MUL2:%.*]] = fmul fast float %b, %a
     26 ; CHECK-NEXT:    [[MUL3:%.*]] = fmul float %a, %b
     27 ; CHECK-NEXT:    [[MUL4:%.*]] = fmul reassoc float %a, %c
     28 ; CHECK-NEXT:    [[ADD1:%.*]] = fadd fast float [[MUL1]], [[MUL3]]
     29 ; CHECK-NEXT:    [[ADD2:%.*]] = fadd reassoc float [[MUL2]], [[MUL4]]
     30 ; CHECK-NEXT:    [[ADD3:%.*]] = fadd fast float [[ADD1]], [[ADD2]]
     31 ; CHECK-NEXT:    ret float [[ADD3]]
     32 ;
     33   %mul1 = fmul reassoc float %a, %c
     34   %mul2 = fmul fast float %a, %b
     35   %mul3 = fmul float %a, %b   ; STRICT
     36   %mul4 = fmul reassoc float %a, %c
     37   %add1 = fadd fast  float %mul1, %mul3
     38   %add2 = fadd reassoc float %mul4, %mul2
     39   %add3 = fadd fast float %add1, %add2
     40   ret float %add3
     41 }
     42 
     43