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