Skip to content

Commit 8b732b0

Browse files
committed
[AggressiveCombine] Add pre-commit tests. NFC.
1 parent 134cd79 commit 8b732b0

File tree

1 file changed

+121
-0
lines changed
  • llvm/test/Transforms/AggressiveInstCombine/X86

1 file changed

+121
-0
lines changed

llvm/test/Transforms/AggressiveInstCombine/X86/or-load.ll

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,127 @@ define i32 @loadCombine_4consecutive(ptr %p) {
101101
ret i32 %o3
102102
}
103103

104+
define i32 @loadCombine_4consecutive_commuted(ptr %p) {
105+
; LE-LABEL: @loadCombine_4consecutive_commuted(
106+
; LE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
107+
; LE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
108+
; LE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1
109+
; LE-NEXT: [[L2:%.*]] = load i16, ptr [[P1]], align 1
110+
; LE-NEXT: [[TMP1:%.*]] = zext i16 [[L2]] to i32
111+
; LE-NEXT: [[TMP2:%.*]] = shl i32 [[TMP1]], 8
112+
; LE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1
113+
; LE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32
114+
; LE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32
115+
; LE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24
116+
; LE-NEXT: [[O2:%.*]] = or i32 [[S4]], [[TMP2]]
117+
; LE-NEXT: [[O3:%.*]] = or i32 [[E1]], [[O2]]
118+
; LE-NEXT: ret i32 [[O3]]
119+
;
120+
; BE-LABEL: @loadCombine_4consecutive_commuted(
121+
; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
122+
; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
123+
; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
124+
; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1
125+
; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1
126+
; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1
127+
; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1
128+
; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32
129+
; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32
130+
; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32
131+
; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32
132+
; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8
133+
; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16
134+
; BE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24
135+
; BE-NEXT: [[O1:%.*]] = or i32 [[S2]], [[S3]]
136+
; BE-NEXT: [[O2:%.*]] = or i32 [[S4]], [[O1]]
137+
; BE-NEXT: [[O3:%.*]] = or i32 [[E1]], [[O2]]
138+
; BE-NEXT: ret i32 [[O3]]
139+
;
140+
%p1 = getelementptr i8, ptr %p, i32 1
141+
%p2 = getelementptr i8, ptr %p, i32 2
142+
%p3 = getelementptr i8, ptr %p, i32 3
143+
%l1 = load i8, ptr %p
144+
%l2 = load i8, ptr %p1
145+
%l3 = load i8, ptr %p2
146+
%l4 = load i8, ptr %p3
147+
148+
%e1 = zext i8 %l1 to i32
149+
%e2 = zext i8 %l2 to i32
150+
%e3 = zext i8 %l3 to i32
151+
%e4 = zext i8 %l4 to i32
152+
153+
%s2 = shl i32 %e2, 8
154+
%s3 = shl i32 %e3, 16
155+
%s4 = shl i32 %e4, 24
156+
157+
%o1 = or i32 %s2, %s3
158+
%o2 = or i32 %s4, %o1
159+
%o3 = or i32 %e1, %o2
160+
ret i32 %o3
161+
}
162+
163+
define i32 @loadCombine_4consecutive_multiuse(ptr %p) {
164+
; LE-LABEL: @loadCombine_4consecutive_multiuse(
165+
; LE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2
166+
; LE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
167+
; LE-NEXT: [[L1:%.*]] = load i16, ptr [[P]], align 1
168+
; LE-NEXT: [[TMP1:%.*]] = zext i16 [[L1]] to i32
169+
; LE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1
170+
; LE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1
171+
; LE-NEXT: call void @use(i8 [[L4]])
172+
; LE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32
173+
; LE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32
174+
; LE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16
175+
; LE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24
176+
; LE-NEXT: [[O2:%.*]] = or i32 [[TMP1]], [[S3]]
177+
; LE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]]
178+
; LE-NEXT: ret i32 [[O3]]
179+
;
180+
; BE-LABEL: @loadCombine_4consecutive_multiuse(
181+
; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
182+
; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
183+
; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
184+
; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1
185+
; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1
186+
; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1
187+
; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1
188+
; BE-NEXT: call void @use(i8 [[L4]])
189+
; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32
190+
; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32
191+
; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32
192+
; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32
193+
; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8
194+
; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16
195+
; BE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24
196+
; BE-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]]
197+
; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]]
198+
; BE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]]
199+
; BE-NEXT: ret i32 [[O3]]
200+
;
201+
%p1 = getelementptr i8, ptr %p, i32 1
202+
%p2 = getelementptr i8, ptr %p, i32 2
203+
%p3 = getelementptr i8, ptr %p, i32 3
204+
%l1 = load i8, ptr %p
205+
%l2 = load i8, ptr %p1
206+
%l3 = load i8, ptr %p2
207+
%l4 = load i8, ptr %p3
208+
call void @use(i8 %l4)
209+
210+
%e1 = zext i8 %l1 to i32
211+
%e2 = zext i8 %l2 to i32
212+
%e3 = zext i8 %l3 to i32
213+
%e4 = zext i8 %l4 to i32
214+
215+
%s2 = shl i32 %e2, 8
216+
%s3 = shl i32 %e3, 16
217+
%s4 = shl i32 %e4, 24
218+
219+
%o1 = or i32 %e1, %s2
220+
%o2 = or i32 %o1, %s3
221+
%o3 = or i32 %o2, %s4
222+
ret i32 %o3
223+
}
224+
104225
define i32 @loadCombine_4consecutive_BE(ptr %p) {
105226
; LE-LABEL: @loadCombine_4consecutive_BE(
106227
; LE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1

0 commit comments

Comments
 (0)