Skip to content

Commit fa53d3e

Browse files
committed
[InstCombine] Add additional load folding tests (NFC)
These show that we currently fail to call load simplification from InstCombine.
1 parent 8299c76 commit fa53d3e

File tree

1 file changed

+36
-10
lines changed
  • llvm/test/Transforms/InstCombine

1 file changed

+36
-10
lines changed

llvm/test/Transforms/InstCombine/load.ll

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,8 @@ define void @test16(ptr %x, ptr %a, ptr %b, ptr %c) {
213213
; CHECK-NEXT: [[X1:%.*]] = load float, ptr [[X:%.*]], align 4
214214
; CHECK-NEXT: store float [[X1]], ptr [[A:%.*]], align 4
215215
; CHECK-NEXT: store float [[X1]], ptr [[B:%.*]], align 4
216-
; CHECK-NEXT: [[X2:%.*]] = load float, ptr [[X:%.*]], align 4
217-
; CHECK-NEXT: store float [[X2]], ptr [[B:%.*]], align 4
216+
; CHECK-NEXT: [[X2:%.*]] = load float, ptr [[X]], align 4
217+
; CHECK-NEXT: store float [[X2]], ptr [[B]], align 4
218218
; CHECK-NEXT: store float [[X2]], ptr [[C:%.*]], align 4
219219
; CHECK-NEXT: ret void
220220
;
@@ -238,8 +238,8 @@ define void @test16-vect(ptr %x, ptr %a, ptr %b, ptr %c) {
238238
; CHECK-NEXT: [[X1:%.*]] = load <4 x i8>, ptr [[X:%.*]], align 4
239239
; CHECK-NEXT: store <4 x i8> [[X1]], ptr [[A:%.*]], align 4
240240
; CHECK-NEXT: store <4 x i8> [[X1]], ptr [[B:%.*]], align 4
241-
; CHECK-NEXT: [[X2:%.*]] = load <4 x i8>, ptr [[X:%.*]], align 4
242-
; CHECK-NEXT: store <4 x i8> [[X2]], ptr [[B:%.*]], align 4
241+
; CHECK-NEXT: [[X2:%.*]] = load <4 x i8>, ptr [[X]], align 4
242+
; CHECK-NEXT: store <4 x i8> [[X2]], ptr [[B]], align 4
243243
; CHECK-NEXT: store <4 x i8> [[X2]], ptr [[C:%.*]], align 4
244244
; CHECK-NEXT: ret void
245245
;
@@ -353,8 +353,8 @@ define i64 @test21(ptr %P) {
353353

354354
define i64 @test22(ptr %P) {
355355
; CHECK-LABEL: @test22(
356-
; CHECK-NEXT: [[X:%.*]] = load i64, ptr [[P]], align 8
357-
; CHECK-NEXT: [[Y:%.*]] = load ptr addrspace(1), ptr [[P:%.*]], align 8
356+
; CHECK-NEXT: [[X:%.*]] = load i64, ptr [[P:%.*]], align 8
357+
; CHECK-NEXT: [[Y:%.*]] = load ptr addrspace(1), ptr [[P]], align 8
358358
; CHECK-NEXT: call void @use.p1(ptr addrspace(1) [[Y]])
359359
; CHECK-NEXT: ret i64 [[X]]
360360
;
@@ -369,8 +369,8 @@ declare void @use.v2.p1(<2 x ptr addrspace(1)>)
369369

370370
define <2 x i64> @test23(ptr %P) {
371371
; CHECK-LABEL: @test23(
372-
; CHECK-NEXT: [[X:%.*]] = load <2 x i64>, ptr [[P]], align 16
373-
; CHECK-NEXT: [[Y:%.*]] = load <2 x ptr>, ptr [[P:%.*]], align 16
372+
; CHECK-NEXT: [[X:%.*]] = load <2 x i64>, ptr [[P:%.*]], align 16
373+
; CHECK-NEXT: [[Y:%.*]] = load <2 x ptr>, ptr [[P]], align 16
374374
; CHECK-NEXT: call void @use.v2.p0(<2 x ptr> [[Y]])
375375
; CHECK-NEXT: ret <2 x i64> [[X]]
376376
;
@@ -382,8 +382,8 @@ define <2 x i64> @test23(ptr %P) {
382382

383383
define <2 x i64> @test24(ptr %P) {
384384
; CHECK-LABEL: @test24(
385-
; CHECK-NEXT: [[X:%.*]] = load <2 x i64>, ptr [[P]], align 16
386-
; CHECK-NEXT: [[Y:%.*]] = load <2 x ptr addrspace(1)>, ptr [[P:%.*]], align 16
385+
; CHECK-NEXT: [[X:%.*]] = load <2 x i64>, ptr [[P:%.*]], align 16
386+
; CHECK-NEXT: [[Y:%.*]] = load <2 x ptr addrspace(1)>, ptr [[P]], align 16
387387
; CHECK-NEXT: call void @use.v2.p1(<2 x ptr addrspace(1)> [[Y]])
388388
; CHECK-NEXT: ret <2 x i64> [[X]]
389389
;
@@ -392,3 +392,29 @@ define <2 x i64> @test24(ptr %P) {
392392
call void @use.v2.p1(<2 x ptr addrspace(1)> %Y)
393393
ret <2 x i64> %X
394394
}
395+
396+
define i16 @load_from_zero_with_dynamic_offset(i64 %idx) {
397+
; CHECK-LABEL: @load_from_zero_with_dynamic_offset(
398+
; CHECK-NEXT: [[GEP:%.*]] = getelementptr i16, ptr @GLOBAL, i64 [[IDX:%.*]]
399+
; CHECK-NEXT: [[V:%.*]] = load i16, ptr [[GEP]], align 2
400+
; CHECK-NEXT: ret i16 [[V]]
401+
;
402+
%gep = getelementptr i16, ptr @GLOBAL, i64 %idx
403+
%v = load i16, ptr %gep
404+
ret i16 %v
405+
}
406+
407+
declare ptr @llvm.strip.invariant.group.p0(ptr %p)
408+
409+
define i32 @load_via_strip_invariant_group() {
410+
; CHECK-LABEL: @load_via_strip_invariant_group(
411+
; CHECK-NEXT: [[A:%.*]] = call ptr @llvm.strip.invariant.group.p0(ptr nonnull @Y)
412+
; CHECK-NEXT: [[B:%.*]] = getelementptr i8, ptr [[A]], i64 8
413+
; CHECK-NEXT: [[D:%.*]] = load i32, ptr [[B]], align 4
414+
; CHECK-NEXT: ret i32 [[D]]
415+
;
416+
%a = call ptr @llvm.strip.invariant.group.p0(ptr @Y)
417+
%b = getelementptr i8, ptr %a, i64 8
418+
%d = load i32, ptr %b
419+
ret i32 %d
420+
}

0 commit comments

Comments
 (0)