Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s -march=x86 -x86-asm-syntax=intel | \
      2 ; RUN:   grep {ro\[rl\]} | count 12
      3 
      4 define i32 @rotl32(i32 %A, i8 %Amt) {
      5 	%shift.upgrd.1 = zext i8 %Amt to i32		; <i32> [#uses=1]
      6 	%B = shl i32 %A, %shift.upgrd.1		; <i32> [#uses=1]
      7 	%Amt2 = sub i8 32, %Amt		; <i8> [#uses=1]
      8 	%shift.upgrd.2 = zext i8 %Amt2 to i32		; <i32> [#uses=1]
      9 	%C = lshr i32 %A, %shift.upgrd.2		; <i32> [#uses=1]
     10 	%D = or i32 %B, %C		; <i32> [#uses=1]
     11 	ret i32 %D
     12 }
     13 
     14 define i32 @rotr32(i32 %A, i8 %Amt) {
     15 	%shift.upgrd.3 = zext i8 %Amt to i32		; <i32> [#uses=1]
     16 	%B = lshr i32 %A, %shift.upgrd.3		; <i32> [#uses=1]
     17 	%Amt2 = sub i8 32, %Amt		; <i8> [#uses=1]
     18 	%shift.upgrd.4 = zext i8 %Amt2 to i32		; <i32> [#uses=1]
     19 	%C = shl i32 %A, %shift.upgrd.4		; <i32> [#uses=1]
     20 	%D = or i32 %B, %C		; <i32> [#uses=1]
     21 	ret i32 %D
     22 }
     23 
     24 define i32 @rotli32(i32 %A) {
     25 	%B = shl i32 %A, 5		; <i32> [#uses=1]
     26 	%C = lshr i32 %A, 27		; <i32> [#uses=1]
     27 	%D = or i32 %B, %C		; <i32> [#uses=1]
     28 	ret i32 %D
     29 }
     30 
     31 define i32 @rotri32(i32 %A) {
     32 	%B = lshr i32 %A, 5		; <i32> [#uses=1]
     33 	%C = shl i32 %A, 27		; <i32> [#uses=1]
     34 	%D = or i32 %B, %C		; <i32> [#uses=1]
     35 	ret i32 %D
     36 }
     37 
     38 define i16 @rotl16(i16 %A, i8 %Amt) {
     39 	%shift.upgrd.5 = zext i8 %Amt to i16		; <i16> [#uses=1]
     40 	%B = shl i16 %A, %shift.upgrd.5		; <i16> [#uses=1]
     41 	%Amt2 = sub i8 16, %Amt		; <i8> [#uses=1]
     42 	%shift.upgrd.6 = zext i8 %Amt2 to i16		; <i16> [#uses=1]
     43 	%C = lshr i16 %A, %shift.upgrd.6		; <i16> [#uses=1]
     44 	%D = or i16 %B, %C		; <i16> [#uses=1]
     45 	ret i16 %D
     46 }
     47 
     48 define i16 @rotr16(i16 %A, i8 %Amt) {
     49 	%shift.upgrd.7 = zext i8 %Amt to i16		; <i16> [#uses=1]
     50 	%B = lshr i16 %A, %shift.upgrd.7		; <i16> [#uses=1]
     51 	%Amt2 = sub i8 16, %Amt		; <i8> [#uses=1]
     52 	%shift.upgrd.8 = zext i8 %Amt2 to i16		; <i16> [#uses=1]
     53 	%C = shl i16 %A, %shift.upgrd.8		; <i16> [#uses=1]
     54 	%D = or i16 %B, %C		; <i16> [#uses=1]
     55 	ret i16 %D
     56 }
     57 
     58 define i16 @rotli16(i16 %A) {
     59 	%B = shl i16 %A, 5		; <i16> [#uses=1]
     60 	%C = lshr i16 %A, 11		; <i16> [#uses=1]
     61 	%D = or i16 %B, %C		; <i16> [#uses=1]
     62 	ret i16 %D
     63 }
     64 
     65 define i16 @rotri16(i16 %A) {
     66 	%B = lshr i16 %A, 5		; <i16> [#uses=1]
     67 	%C = shl i16 %A, 11		; <i16> [#uses=1]
     68 	%D = or i16 %B, %C		; <i16> [#uses=1]
     69 	ret i16 %D
     70 }
     71 
     72 define i8 @rotl8(i8 %A, i8 %Amt) {
     73 	%B = shl i8 %A, %Amt		; <i8> [#uses=1]
     74 	%Amt2 = sub i8 8, %Amt		; <i8> [#uses=1]
     75 	%C = lshr i8 %A, %Amt2		; <i8> [#uses=1]
     76 	%D = or i8 %B, %C		; <i8> [#uses=1]
     77 	ret i8 %D
     78 }
     79 
     80 define i8 @rotr8(i8 %A, i8 %Amt) {
     81 	%B = lshr i8 %A, %Amt		; <i8> [#uses=1]
     82 	%Amt2 = sub i8 8, %Amt		; <i8> [#uses=1]
     83 	%C = shl i8 %A, %Amt2		; <i8> [#uses=1]
     84 	%D = or i8 %B, %C		; <i8> [#uses=1]
     85 	ret i8 %D
     86 }
     87 
     88 define i8 @rotli8(i8 %A) {
     89 	%B = shl i8 %A, 5		; <i8> [#uses=1]
     90 	%C = lshr i8 %A, 3		; <i8> [#uses=1]
     91 	%D = or i8 %B, %C		; <i8> [#uses=1]
     92 	ret i8 %D
     93 }
     94 
     95 define i8 @rotri8(i8 %A) {
     96 	%B = lshr i8 %A, 5		; <i8> [#uses=1]
     97 	%C = shl i8 %A, 3		; <i8> [#uses=1]
     98 	%D = or i8 %B, %C		; <i8> [#uses=1]
     99 	ret i8 %D
    100 }
    101