Home | History | Annotate | Download | only in PowerPC
      1 ; All of these ands and shifts should be folded into rlwimi's
      2 ; RUN: llc < %s -march=ppc32 | not grep and
      3 ; RUN: llc < %s -march=ppc32 | grep rlwimi | count 8
      4 
      5 define i32 @test1(i32 %x, i32 %y) {
      6 entry:
      7 	%tmp.3 = shl i32 %x, 16		; <i32> [#uses=1]
      8 	%tmp.7 = and i32 %y, 65535		; <i32> [#uses=1]
      9 	%tmp.9 = or i32 %tmp.7, %tmp.3		; <i32> [#uses=1]
     10 	ret i32 %tmp.9
     11 }
     12 
     13 define i32 @test2(i32 %x, i32 %y) {
     14 entry:
     15 	%tmp.7 = and i32 %x, 65535		; <i32> [#uses=1]
     16 	%tmp.3 = shl i32 %y, 16		; <i32> [#uses=1]
     17 	%tmp.9 = or i32 %tmp.7, %tmp.3		; <i32> [#uses=1]
     18 	ret i32 %tmp.9
     19 }
     20 
     21 define i32 @test3(i32 %x, i32 %y) {
     22 entry:
     23 	%tmp.3 = lshr i32 %x, 16		; <i32> [#uses=1]
     24 	%tmp.6 = and i32 %y, -65536		; <i32> [#uses=1]
     25 	%tmp.7 = or i32 %tmp.6, %tmp.3		; <i32> [#uses=1]
     26 	ret i32 %tmp.7
     27 }
     28 
     29 define i32 @test4(i32 %x, i32 %y) {
     30 entry:
     31 	%tmp.6 = and i32 %x, -65536		; <i32> [#uses=1]
     32 	%tmp.3 = lshr i32 %y, 16		; <i32> [#uses=1]
     33 	%tmp.7 = or i32 %tmp.6, %tmp.3		; <i32> [#uses=1]
     34 	ret i32 %tmp.7
     35 }
     36 
     37 define i32 @test5(i32 %x, i32 %y) {
     38 entry:
     39 	%tmp.3 = shl i32 %x, 1		; <i32> [#uses=1]
     40 	%tmp.4 = and i32 %tmp.3, -65536		; <i32> [#uses=1]
     41 	%tmp.7 = and i32 %y, 65535		; <i32> [#uses=1]
     42 	%tmp.9 = or i32 %tmp.4, %tmp.7		; <i32> [#uses=1]
     43 	ret i32 %tmp.9
     44 }
     45 
     46 define i32 @test6(i32 %x, i32 %y) {
     47 entry:
     48 	%tmp.7 = and i32 %x, 65535		; <i32> [#uses=1]
     49 	%tmp.3 = shl i32 %y, 1		; <i32> [#uses=1]
     50 	%tmp.4 = and i32 %tmp.3, -65536		; <i32> [#uses=1]
     51 	%tmp.9 = or i32 %tmp.4, %tmp.7		; <i32> [#uses=1]
     52 	ret i32 %tmp.9
     53 }
     54 
     55 define i32 @test7(i32 %x, i32 %y) {
     56 entry:
     57 	%tmp.2 = and i32 %x, -65536		; <i32> [#uses=1]
     58 	%tmp.5 = and i32 %y, 65535		; <i32> [#uses=1]
     59 	%tmp.7 = or i32 %tmp.5, %tmp.2		; <i32> [#uses=1]
     60 	ret i32 %tmp.7
     61 }
     62 
     63 define i32 @test8(i32 %bar) {
     64 entry:
     65 	%tmp.3 = shl i32 %bar, 1		; <i32> [#uses=1]
     66 	%tmp.4 = and i32 %tmp.3, 2		; <i32> [#uses=1]
     67 	%tmp.6 = and i32 %bar, -3		; <i32> [#uses=1]
     68 	%tmp.7 = or i32 %tmp.4, %tmp.6		; <i32> [#uses=1]
     69 	ret i32 %tmp.7
     70 }
     71