xref: /llvm-project/llvm/test/Transforms/InstCombine/bitwiselogic-bitmanip.ll (revision 29f98d6c25e237d311038ce225f0b3109925d400)
1*29f98d6cSYingwei Zheng; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
2*29f98d6cSYingwei Zheng; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3*29f98d6cSYingwei Zheng
4*29f98d6cSYingwei Zhengdefine i32 @test_or_fshl(i32 %a, i32 %b, i32 %c, i32 %d, i32 %sh) {
5*29f98d6cSYingwei Zheng; CHECK-LABEL: define i32 @test_or_fshl(
6*29f98d6cSYingwei Zheng; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]], i32 [[D:%.*]], i32 [[SH:%.*]]) {
7*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[A]], [[C]]
8*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[B]], [[D]]
9*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[RET:%.*]] = call i32 @llvm.fshl.i32(i32 [[TMP1]], i32 [[TMP2]], i32 [[SH]])
10*29f98d6cSYingwei Zheng; CHECK-NEXT:    ret i32 [[RET]]
11*29f98d6cSYingwei Zheng;
12*29f98d6cSYingwei Zheng  %val1 = call i32 @llvm.fshl.i32(i32 %a, i32 %b, i32 %sh)
13*29f98d6cSYingwei Zheng  %val2 = call i32 @llvm.fshl.i32(i32 %c, i32 %d, i32 %sh)
14*29f98d6cSYingwei Zheng  %ret = or i32 %val1, %val2
15*29f98d6cSYingwei Zheng  ret i32 %ret
16*29f98d6cSYingwei Zheng}
17*29f98d6cSYingwei Zhengdefine i32 @test_and_fshl(i32 %a, i32 %b, i32 %c, i32 %d, i32 %sh) {
18*29f98d6cSYingwei Zheng; CHECK-LABEL: define i32 @test_and_fshl(
19*29f98d6cSYingwei Zheng; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]], i32 [[D:%.*]], i32 [[SH:%.*]]) {
20*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[A]], [[C]]
21*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[B]], [[D]]
22*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[RET:%.*]] = call i32 @llvm.fshl.i32(i32 [[TMP1]], i32 [[TMP2]], i32 [[SH]])
23*29f98d6cSYingwei Zheng; CHECK-NEXT:    ret i32 [[RET]]
24*29f98d6cSYingwei Zheng;
25*29f98d6cSYingwei Zheng  %val1 = call i32 @llvm.fshl.i32(i32 %a, i32 %b, i32 %sh)
26*29f98d6cSYingwei Zheng  %val2 = call i32 @llvm.fshl.i32(i32 %c, i32 %d, i32 %sh)
27*29f98d6cSYingwei Zheng  %ret = and i32 %val1, %val2
28*29f98d6cSYingwei Zheng  ret i32 %ret
29*29f98d6cSYingwei Zheng}
30*29f98d6cSYingwei Zhengdefine i32 @test_xor_fshl(i32 %a, i32 %b, i32 %c, i32 %d, i32 %sh) {
31*29f98d6cSYingwei Zheng; CHECK-LABEL: define i32 @test_xor_fshl(
32*29f98d6cSYingwei Zheng; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]], i32 [[D:%.*]], i32 [[SH:%.*]]) {
33*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[A]], [[C]]
34*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[B]], [[D]]
35*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[RET:%.*]] = call i32 @llvm.fshl.i32(i32 [[TMP1]], i32 [[TMP2]], i32 [[SH]])
36*29f98d6cSYingwei Zheng; CHECK-NEXT:    ret i32 [[RET]]
37*29f98d6cSYingwei Zheng;
38*29f98d6cSYingwei Zheng  %val1 = call i32 @llvm.fshl.i32(i32 %a, i32 %b, i32 %sh)
39*29f98d6cSYingwei Zheng  %val2 = call i32 @llvm.fshl.i32(i32 %c, i32 %d, i32 %sh)
40*29f98d6cSYingwei Zheng  %ret = xor i32 %val1, %val2
41*29f98d6cSYingwei Zheng  ret i32 %ret
42*29f98d6cSYingwei Zheng}
43*29f98d6cSYingwei Zhengdefine i32 @test_or_fshr(i32 %a, i32 %b, i32 %c, i32 %d, i32 %sh) {
44*29f98d6cSYingwei Zheng; CHECK-LABEL: define i32 @test_or_fshr(
45*29f98d6cSYingwei Zheng; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]], i32 [[D:%.*]], i32 [[SH:%.*]]) {
46*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[A]], [[C]]
47*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[B]], [[D]]
48*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[RET:%.*]] = call i32 @llvm.fshr.i32(i32 [[TMP1]], i32 [[TMP2]], i32 [[SH]])
49*29f98d6cSYingwei Zheng; CHECK-NEXT:    ret i32 [[RET]]
50*29f98d6cSYingwei Zheng;
51*29f98d6cSYingwei Zheng  %val1 = call i32 @llvm.fshr.i32(i32 %a, i32 %b, i32 %sh)
52*29f98d6cSYingwei Zheng  %val2 = call i32 @llvm.fshr.i32(i32 %c, i32 %d, i32 %sh)
53*29f98d6cSYingwei Zheng  %ret = or i32 %val1, %val2
54*29f98d6cSYingwei Zheng  ret i32 %ret
55*29f98d6cSYingwei Zheng}
56*29f98d6cSYingwei Zhengdefine i32 @test_or_fshl_cascade(i32 %a, i32 %b, i32 %c) {
57*29f98d6cSYingwei Zheng; CHECK-LABEL: define i32 @test_or_fshl_cascade(
58*29f98d6cSYingwei Zheng; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
59*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[A]], [[B]]
60*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[A]], [[B]]
61*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[TMP3:%.*]] = or i32 [[TMP1]], [[C]]
62*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[TMP4:%.*]] = or i32 [[TMP2]], [[C]]
63*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[OR2:%.*]] = call i32 @llvm.fshl.i32(i32 [[TMP3]], i32 [[TMP4]], i32 24)
64*29f98d6cSYingwei Zheng; CHECK-NEXT:    ret i32 [[OR2]]
65*29f98d6cSYingwei Zheng;
66*29f98d6cSYingwei Zheng  %fshl1 = call i32 @llvm.fshl.i32(i32 %a, i32 %a, i32 24)
67*29f98d6cSYingwei Zheng  %fshl2 = call i32 @llvm.fshl.i32(i32 %b, i32 %b, i32 24)
68*29f98d6cSYingwei Zheng  %fshl3 = call i32 @llvm.fshl.i32(i32 %c, i32 %c, i32 24)
69*29f98d6cSYingwei Zheng  %or1 = or i32 %fshl1, %fshl2
70*29f98d6cSYingwei Zheng  %or2 = or i32 %or1, %fshl3
71*29f98d6cSYingwei Zheng  ret i32 %or2
72*29f98d6cSYingwei Zheng}
73*29f98d6cSYingwei Zhengdefine i32 @test_or_bitreverse(i32 %a, i32 %b) {
74*29f98d6cSYingwei Zheng; CHECK-LABEL: define i32 @test_or_bitreverse(
75*29f98d6cSYingwei Zheng; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) {
76*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[A]], [[B]]
77*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[RET:%.*]] = call i32 @llvm.bitreverse.i32(i32 [[TMP1]])
78*29f98d6cSYingwei Zheng; CHECK-NEXT:    ret i32 [[RET]]
79*29f98d6cSYingwei Zheng;
80*29f98d6cSYingwei Zheng  %val1 = call i32 @llvm.bitreverse.i32(i32 %a)
81*29f98d6cSYingwei Zheng  %val2 = call i32 @llvm.bitreverse.i32(i32 %b)
82*29f98d6cSYingwei Zheng  %ret = or i32 %val1, %val2
83*29f98d6cSYingwei Zheng  ret i32 %ret
84*29f98d6cSYingwei Zheng}
85*29f98d6cSYingwei Zhengdefine i32 @test_or_bitreverse_constant(i32 %a, i32 %b) {
86*29f98d6cSYingwei Zheng; CHECK-LABEL: define i32 @test_or_bitreverse_constant(
87*29f98d6cSYingwei Zheng; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) {
88*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[A]], 255
89*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[RET:%.*]] = call i32 @llvm.bitreverse.i32(i32 [[TMP1]])
90*29f98d6cSYingwei Zheng; CHECK-NEXT:    ret i32 [[RET]]
91*29f98d6cSYingwei Zheng;
92*29f98d6cSYingwei Zheng  %val1 = call i32 @llvm.bitreverse.i32(i32 %a)
93*29f98d6cSYingwei Zheng  %ret = or i32 %val1, 4278190080
94*29f98d6cSYingwei Zheng  ret i32 %ret
95*29f98d6cSYingwei Zheng}
96*29f98d6cSYingwei Zhengdefine i32 @test_or_bswap(i32 %a, i32 %b) {
97*29f98d6cSYingwei Zheng; CHECK-LABEL: define i32 @test_or_bswap(
98*29f98d6cSYingwei Zheng; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) {
99*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[A]], [[B]]
100*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[RET:%.*]] = call i32 @llvm.bswap.i32(i32 [[TMP1]])
101*29f98d6cSYingwei Zheng; CHECK-NEXT:    ret i32 [[RET]]
102*29f98d6cSYingwei Zheng;
103*29f98d6cSYingwei Zheng  %val1 = call i32 @llvm.bswap.i32(i32 %a)
104*29f98d6cSYingwei Zheng  %val2 = call i32 @llvm.bswap.i32(i32 %b)
105*29f98d6cSYingwei Zheng  %ret = or i32 %val1, %val2
106*29f98d6cSYingwei Zheng  ret i32 %ret
107*29f98d6cSYingwei Zheng}
108*29f98d6cSYingwei Zhengdefine i32 @test_or_bswap_constant(i32 %a, i32 %b) {
109*29f98d6cSYingwei Zheng; CHECK-LABEL: define i32 @test_or_bswap_constant(
110*29f98d6cSYingwei Zheng; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) {
111*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[A]], 255
112*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[RET:%.*]] = call i32 @llvm.bswap.i32(i32 [[TMP1]])
113*29f98d6cSYingwei Zheng; CHECK-NEXT:    ret i32 [[RET]]
114*29f98d6cSYingwei Zheng;
115*29f98d6cSYingwei Zheng  %val1 = call i32 @llvm.bswap.i32(i32 %a)
116*29f98d6cSYingwei Zheng  %ret = or i32 %val1, 4278190080
117*29f98d6cSYingwei Zheng  ret i32 %ret
118*29f98d6cSYingwei Zheng}
119*29f98d6cSYingwei Zheng
120*29f98d6cSYingwei Zheng; Negative tests
121*29f98d6cSYingwei Zheng
122*29f98d6cSYingwei Zhengdefine i32 @test_or_fshl_fshr(i32 %a, i32 %b, i32 %c, i32 %d, i32 %sh) {
123*29f98d6cSYingwei Zheng; CHECK-LABEL: define i32 @test_or_fshl_fshr(
124*29f98d6cSYingwei Zheng; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]], i32 [[D:%.*]], i32 [[SH:%.*]]) {
125*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[VAL1:%.*]] = call i32 @llvm.fshl.i32(i32 [[A]], i32 [[B]], i32 [[SH]])
126*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[VAL2:%.*]] = call i32 @llvm.fshr.i32(i32 [[C]], i32 [[D]], i32 [[SH]])
127*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[RET:%.*]] = or i32 [[VAL1]], [[VAL2]]
128*29f98d6cSYingwei Zheng; CHECK-NEXT:    ret i32 [[RET]]
129*29f98d6cSYingwei Zheng;
130*29f98d6cSYingwei Zheng  %val1 = call i32 @llvm.fshl.i32(i32 %a, i32 %b, i32 %sh)
131*29f98d6cSYingwei Zheng  %val2 = call i32 @llvm.fshr.i32(i32 %c, i32 %d, i32 %sh)
132*29f98d6cSYingwei Zheng  %ret = or i32 %val1, %val2
133*29f98d6cSYingwei Zheng  ret i32 %ret
134*29f98d6cSYingwei Zheng}
135*29f98d6cSYingwei Zhengdefine i32 @test_or_bitreverse_bswap(i32 %a, i32 %b) {
136*29f98d6cSYingwei Zheng; CHECK-LABEL: define i32 @test_or_bitreverse_bswap(
137*29f98d6cSYingwei Zheng; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) {
138*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[VAL1:%.*]] = call i32 @llvm.bitreverse.i32(i32 [[A]])
139*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[VAL2:%.*]] = call i32 @llvm.bswap.i32(i32 [[B]])
140*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[RET:%.*]] = or i32 [[VAL1]], [[VAL2]]
141*29f98d6cSYingwei Zheng; CHECK-NEXT:    ret i32 [[RET]]
142*29f98d6cSYingwei Zheng;
143*29f98d6cSYingwei Zheng  %val1 = call i32 @llvm.bitreverse.i32(i32 %a)
144*29f98d6cSYingwei Zheng  %val2 = call i32 @llvm.bswap.i32(i32 %b)
145*29f98d6cSYingwei Zheng  %ret = or i32 %val1, %val2
146*29f98d6cSYingwei Zheng  ret i32 %ret
147*29f98d6cSYingwei Zheng}
148*29f98d6cSYingwei Zhengdefine i32 @test_or_fshl_mismatched_shamt(i32 %a, i32 %b, i32 %c, i32 %d, i32 %sh1, i32 %sh2) {
149*29f98d6cSYingwei Zheng; CHECK-LABEL: define i32 @test_or_fshl_mismatched_shamt(
150*29f98d6cSYingwei Zheng; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]], i32 [[D:%.*]], i32 [[SH1:%.*]], i32 [[SH2:%.*]]) {
151*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[VAL1:%.*]] = call i32 @llvm.fshl.i32(i32 [[A]], i32 [[B]], i32 [[SH1]])
152*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[VAL2:%.*]] = call i32 @llvm.fshl.i32(i32 [[C]], i32 [[D]], i32 [[SH2]])
153*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[RET:%.*]] = or i32 [[VAL1]], [[VAL2]]
154*29f98d6cSYingwei Zheng; CHECK-NEXT:    ret i32 [[RET]]
155*29f98d6cSYingwei Zheng;
156*29f98d6cSYingwei Zheng  %val1 = call i32 @llvm.fshl.i32(i32 %a, i32 %b, i32 %sh1)
157*29f98d6cSYingwei Zheng  %val2 = call i32 @llvm.fshl.i32(i32 %c, i32 %d, i32 %sh2)
158*29f98d6cSYingwei Zheng  %ret = or i32 %val1, %val2
159*29f98d6cSYingwei Zheng  ret i32 %ret
160*29f98d6cSYingwei Zheng}
161*29f98d6cSYingwei Zhengdefine i32 @test_add_fshl(i32 %a, i32 %b, i32 %c, i32 %d, i32 %sh) {
162*29f98d6cSYingwei Zheng; CHECK-LABEL: define i32 @test_add_fshl(
163*29f98d6cSYingwei Zheng; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]], i32 [[D:%.*]], i32 [[SH:%.*]]) {
164*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[VAL1:%.*]] = call i32 @llvm.fshl.i32(i32 [[A]], i32 [[B]], i32 [[SH]])
165*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[VAL2:%.*]] = call i32 @llvm.fshl.i32(i32 [[C]], i32 [[D]], i32 [[SH]])
166*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[RET:%.*]] = add i32 [[VAL1]], [[VAL2]]
167*29f98d6cSYingwei Zheng; CHECK-NEXT:    ret i32 [[RET]]
168*29f98d6cSYingwei Zheng;
169*29f98d6cSYingwei Zheng  %val1 = call i32 @llvm.fshl.i32(i32 %a, i32 %b, i32 %sh)
170*29f98d6cSYingwei Zheng  %val2 = call i32 @llvm.fshl.i32(i32 %c, i32 %d, i32 %sh)
171*29f98d6cSYingwei Zheng  %ret = add i32 %val1, %val2
172*29f98d6cSYingwei Zheng  ret i32 %ret
173*29f98d6cSYingwei Zheng}
174*29f98d6cSYingwei Zhengdefine i32 @test_or_fshl_multiuse(i32 %a, i32 %b, i32 %c, i32 %d, i32 %sh) {
175*29f98d6cSYingwei Zheng; CHECK-LABEL: define i32 @test_or_fshl_multiuse(
176*29f98d6cSYingwei Zheng; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]], i32 [[D:%.*]], i32 [[SH:%.*]]) {
177*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[VAL1:%.*]] = call i32 @llvm.fshl.i32(i32 [[A]], i32 [[B]], i32 [[SH]])
178*29f98d6cSYingwei Zheng; CHECK-NEXT:    call void @use(i32 [[VAL1]])
179*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[VAL2:%.*]] = call i32 @llvm.fshl.i32(i32 [[C]], i32 [[D]], i32 [[SH]])
180*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[RET:%.*]] = or i32 [[VAL1]], [[VAL2]]
181*29f98d6cSYingwei Zheng; CHECK-NEXT:    ret i32 [[RET]]
182*29f98d6cSYingwei Zheng;
183*29f98d6cSYingwei Zheng  %val1 = call i32 @llvm.fshl.i32(i32 %a, i32 %b, i32 %sh)
184*29f98d6cSYingwei Zheng  call void @use(i32 %val1)
185*29f98d6cSYingwei Zheng  %val2 = call i32 @llvm.fshl.i32(i32 %c, i32 %d, i32 %sh)
186*29f98d6cSYingwei Zheng  %ret = or i32 %val1, %val2
187*29f98d6cSYingwei Zheng  ret i32 %ret
188*29f98d6cSYingwei Zheng}
189*29f98d6cSYingwei Zhengdefine i32 @test_or_bitreverse_multiuse(i32 %a, i32 %b) {
190*29f98d6cSYingwei Zheng; CHECK-LABEL: define i32 @test_or_bitreverse_multiuse(
191*29f98d6cSYingwei Zheng; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) {
192*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[VAL1:%.*]] = call i32 @llvm.bitreverse.i32(i32 [[A]])
193*29f98d6cSYingwei Zheng; CHECK-NEXT:    call void @use(i32 [[VAL1]])
194*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[VAL2:%.*]] = call i32 @llvm.bitreverse.i32(i32 [[B]])
195*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[RET:%.*]] = or i32 [[VAL1]], [[VAL2]]
196*29f98d6cSYingwei Zheng; CHECK-NEXT:    ret i32 [[RET]]
197*29f98d6cSYingwei Zheng;
198*29f98d6cSYingwei Zheng  %val1 = call i32 @llvm.bitreverse.i32(i32 %a)
199*29f98d6cSYingwei Zheng  call void @use(i32 %val1)
200*29f98d6cSYingwei Zheng  %val2 = call i32 @llvm.bitreverse.i32(i32 %b)
201*29f98d6cSYingwei Zheng  %ret = or i32 %val1, %val2
202*29f98d6cSYingwei Zheng  ret i32 %ret
203*29f98d6cSYingwei Zheng}
204*29f98d6cSYingwei Zhengdefine i32 @test_or_fshl_constant(i32 %a, i32 %b, i32 %sh) {
205*29f98d6cSYingwei Zheng; CHECK-LABEL: define i32 @test_or_fshl_constant(
206*29f98d6cSYingwei Zheng; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], i32 [[SH:%.*]]) {
207*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[VAL1:%.*]] = call i32 @llvm.fshl.i32(i32 [[A]], i32 [[B]], i32 [[SH]])
208*29f98d6cSYingwei Zheng; CHECK-NEXT:    [[RET:%.*]] = or i32 [[VAL1]], -16777216
209*29f98d6cSYingwei Zheng; CHECK-NEXT:    ret i32 [[RET]]
210*29f98d6cSYingwei Zheng;
211*29f98d6cSYingwei Zheng  %val1 = call i32 @llvm.fshl.i32(i32 %a, i32 %b, i32 %sh)
212*29f98d6cSYingwei Zheng  %ret = or i32 %val1, 4278190080
213*29f98d6cSYingwei Zheng  ret i32 %ret
214*29f98d6cSYingwei Zheng}
215*29f98d6cSYingwei Zheng
216*29f98d6cSYingwei Zhengdeclare void @use(i32)
217*29f98d6cSYingwei Zhengdeclare i32 @llvm.fshl.i32(i32, i32, i32)
218*29f98d6cSYingwei Zhengdeclare i32 @llvm.fshr.i32(i32, i32, i32)
219*29f98d6cSYingwei Zhengdeclare i32 @llvm.bitreverse.i32(i32)
220*29f98d6cSYingwei Zhengdeclare i32 @llvm.bswap.i32(i32)
221