xref: /aosp_15_r20/external/llvm/test/CodeGen/PowerPC/rotl.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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