Home | History | Annotate | Download | only in Reassociate
      1 ; RUN: opt < %s -reassociate -S | FileCheck %s
      2 
      3 ; These tests make sure that before processing insts
      4 ; any previous instructions are already canonicalized.
      5 define i32 @foo(i32 %in) {
      6 ; CHECK-LABEL: @foo
      7 ; CHECK-NEXT: %factor = mul i32 %in, -4
      8 ; CHECK-NEXT: %factor1 = mul i32 %in, 2
      9 ; CHECK-NEXT: %_3 = add i32 %factor, 1
     10 ; CHECK-NEXT: %_5 = add i32 %_3, %factor1
     11 ; CHECK-NEXT: ret i32 %_5
     12   %_0 = add i32 %in, 1
     13   %_1 = mul i32 %in, -2
     14   %_2 = add i32 %_0, %_1
     15   %_3 = add i32 %_1, %_2
     16   %_4 = add i32 %_3, 1
     17   %_5 = add i32 %in, %_3
     18   ret i32 %_5
     19 }
     20 
     21 ; CHECK-LABEL: @foo1
     22 define void @foo1(float %in, i1 %cmp) {
     23 wrapper_entry:
     24   br label %foo1
     25 
     26 for.body:
     27   %0 = fadd float %in1, %in1
     28   br label %foo1
     29 
     30 foo1:
     31   %_0 = fmul fast float %in, -3.000000e+00
     32   %_1 = fmul fast float %_0, 3.000000e+00
     33   %in1 = fadd fast float -3.000000e+00, %_1
     34   %in1use = fadd fast float %in1, %in1
     35   br label %for.body
     36 
     37 
     38 }
     39 
     40 ; CHECK-LABEL: @foo2
     41 define void @foo2(float %in, i1 %cmp) {
     42 wrapper_entry:
     43   br label %for.body
     44 
     45 for.body:
     46 ; If the operands of the phi are sheduled for processing before
     47 ; foo1 is processed, the invariant of reassociate are not preserved
     48   %unused = phi float [%in1, %foo1], [undef, %wrapper_entry]
     49   br label %foo1
     50 
     51 foo1:
     52   %_0 = fmul fast float %in, -3.000000e+00
     53   %_1 = fmul fast float %_0, 3.000000e+00
     54   %in1 = fadd fast float -3.000000e+00, %_1
     55   %in1use = fadd fast float %in1, %in1
     56   br label %for.body
     57 }
     58