1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=ppc32 | grep rotrw: | count 1 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=ppc32 | grep rotlw: | count 1 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=ppc32 | grep rotlwi: | count 1 4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=ppc32 | grep rotrwi: | count 1 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine i32 @rotlw(i32 %x, i32 %sh) { 7*9880d681SAndroid Build Coastguard Workerentry: 8*9880d681SAndroid Build Coastguard Worker %tmp.7 = sub i32 32, %sh ; <i32> [#uses=1] 9*9880d681SAndroid Build Coastguard Worker %tmp.10 = lshr i32 %x, %tmp.7 ; <i32> [#uses=2] 10*9880d681SAndroid Build Coastguard Worker %tmp.4 = shl i32 %x, %sh ; <i32> [#uses=1] 11*9880d681SAndroid Build Coastguard Worker %tmp.12 = or i32 %tmp.10, %tmp.4 ; <i32> [#uses=1] 12*9880d681SAndroid Build Coastguard Worker ret i32 %tmp.12 13*9880d681SAndroid Build Coastguard Worker} 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerdefine i32 @rotrw(i32 %x, i32 %sh) { 16*9880d681SAndroid Build Coastguard Workerentry: 17*9880d681SAndroid Build Coastguard Worker %tmp.3 = trunc i32 %sh to i8 ; <i8> [#uses=1] 18*9880d681SAndroid Build Coastguard Worker %tmp.4 = lshr i32 %x, %sh ; <i32> [#uses=2] 19*9880d681SAndroid Build Coastguard Worker %tmp.7 = sub i32 32, %sh ; <i32> [#uses=1] 20*9880d681SAndroid Build Coastguard Worker %tmp.10 = shl i32 %x, %tmp.7 ; <i32> [#uses=1] 21*9880d681SAndroid Build Coastguard Worker %tmp.12 = or i32 %tmp.4, %tmp.10 ; <i32> [#uses=1] 22*9880d681SAndroid Build Coastguard Worker ret i32 %tmp.12 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine i32 @rotlwi(i32 %x) { 26*9880d681SAndroid Build Coastguard Workerentry: 27*9880d681SAndroid Build Coastguard Worker %tmp.7 = lshr i32 %x, 27 ; <i32> [#uses=2] 28*9880d681SAndroid Build Coastguard Worker %tmp.3 = shl i32 %x, 5 ; <i32> [#uses=1] 29*9880d681SAndroid Build Coastguard Worker %tmp.9 = or i32 %tmp.3, %tmp.7 ; <i32> [#uses=1] 30*9880d681SAndroid Build Coastguard Worker ret i32 %tmp.9 31*9880d681SAndroid Build Coastguard Worker} 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Workerdefine i32 @rotrwi(i32 %x) { 34*9880d681SAndroid Build Coastguard Workerentry: 35*9880d681SAndroid Build Coastguard Worker %tmp.3 = lshr i32 %x, 5 ; <i32> [#uses=2] 36*9880d681SAndroid Build Coastguard Worker %tmp.7 = shl i32 %x, 27 ; <i32> [#uses=1] 37*9880d681SAndroid Build Coastguard Worker %tmp.9 = or i32 %tmp.3, %tmp.7 ; <i32> [#uses=1] 38*9880d681SAndroid Build Coastguard Worker ret i32 %tmp.9 39*9880d681SAndroid Build Coastguard Worker} 40