[llvm] fa53d3e - [InstCombine] Add additional load folding tests (NFC)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 20 01:39:03 PST 2023
Author: Nikita Popov
Date: 2023-02-20T10:38:54+01:00
New Revision: fa53d3e567adecb619b6ffe2ab0a1d395a4786d0
URL: https://github.com/llvm/llvm-project/commit/fa53d3e567adecb619b6ffe2ab0a1d395a4786d0
DIFF: https://github.com/llvm/llvm-project/commit/fa53d3e567adecb619b6ffe2ab0a1d395a4786d0.diff
LOG: [InstCombine] Add additional load folding tests (NFC)
These show that we currently fail to call load simplification from
InstCombine.
Added:
Modified:
llvm/test/Transforms/InstCombine/load.ll
Removed:
################################################################################
diff --git a/llvm/test/Transforms/InstCombine/load.ll b/llvm/test/Transforms/InstCombine/load.ll
index 7f7424dd42b9..acfac71007bd 100644
--- a/llvm/test/Transforms/InstCombine/load.ll
+++ b/llvm/test/Transforms/InstCombine/load.ll
@@ -213,8 +213,8 @@ define void @test16(ptr %x, ptr %a, ptr %b, ptr %c) {
; CHECK-NEXT: [[X1:%.*]] = load float, ptr [[X:%.*]], align 4
; CHECK-NEXT: store float [[X1]], ptr [[A:%.*]], align 4
; CHECK-NEXT: store float [[X1]], ptr [[B:%.*]], align 4
-; CHECK-NEXT: [[X2:%.*]] = load float, ptr [[X:%.*]], align 4
-; CHECK-NEXT: store float [[X2]], ptr [[B:%.*]], align 4
+; CHECK-NEXT: [[X2:%.*]] = load float, ptr [[X]], align 4
+; CHECK-NEXT: store float [[X2]], ptr [[B]], align 4
; CHECK-NEXT: store float [[X2]], ptr [[C:%.*]], align 4
; CHECK-NEXT: ret void
;
@@ -238,8 +238,8 @@ define void @test16-vect(ptr %x, ptr %a, ptr %b, ptr %c) {
; CHECK-NEXT: [[X1:%.*]] = load <4 x i8>, ptr [[X:%.*]], align 4
; CHECK-NEXT: store <4 x i8> [[X1]], ptr [[A:%.*]], align 4
; CHECK-NEXT: store <4 x i8> [[X1]], ptr [[B:%.*]], align 4
-; CHECK-NEXT: [[X2:%.*]] = load <4 x i8>, ptr [[X:%.*]], align 4
-; CHECK-NEXT: store <4 x i8> [[X2]], ptr [[B:%.*]], align 4
+; CHECK-NEXT: [[X2:%.*]] = load <4 x i8>, ptr [[X]], align 4
+; CHECK-NEXT: store <4 x i8> [[X2]], ptr [[B]], align 4
; CHECK-NEXT: store <4 x i8> [[X2]], ptr [[C:%.*]], align 4
; CHECK-NEXT: ret void
;
@@ -353,8 +353,8 @@ define i64 @test21(ptr %P) {
define i64 @test22(ptr %P) {
; CHECK-LABEL: @test22(
-; CHECK-NEXT: [[X:%.*]] = load i64, ptr [[P]], align 8
-; CHECK-NEXT: [[Y:%.*]] = load ptr addrspace(1), ptr [[P:%.*]], align 8
+; CHECK-NEXT: [[X:%.*]] = load i64, ptr [[P:%.*]], align 8
+; CHECK-NEXT: [[Y:%.*]] = load ptr addrspace(1), ptr [[P]], align 8
; CHECK-NEXT: call void @use.p1(ptr addrspace(1) [[Y]])
; CHECK-NEXT: ret i64 [[X]]
;
@@ -369,8 +369,8 @@ declare void @use.v2.p1(<2 x ptr addrspace(1)>)
define <2 x i64> @test23(ptr %P) {
; CHECK-LABEL: @test23(
-; CHECK-NEXT: [[X:%.*]] = load <2 x i64>, ptr [[P]], align 16
-; CHECK-NEXT: [[Y:%.*]] = load <2 x ptr>, ptr [[P:%.*]], align 16
+; CHECK-NEXT: [[X:%.*]] = load <2 x i64>, ptr [[P:%.*]], align 16
+; CHECK-NEXT: [[Y:%.*]] = load <2 x ptr>, ptr [[P]], align 16
; CHECK-NEXT: call void @use.v2.p0(<2 x ptr> [[Y]])
; CHECK-NEXT: ret <2 x i64> [[X]]
;
@@ -382,8 +382,8 @@ define <2 x i64> @test23(ptr %P) {
define <2 x i64> @test24(ptr %P) {
; CHECK-LABEL: @test24(
-; CHECK-NEXT: [[X:%.*]] = load <2 x i64>, ptr [[P]], align 16
-; CHECK-NEXT: [[Y:%.*]] = load <2 x ptr addrspace(1)>, ptr [[P:%.*]], align 16
+; CHECK-NEXT: [[X:%.*]] = load <2 x i64>, ptr [[P:%.*]], align 16
+; CHECK-NEXT: [[Y:%.*]] = load <2 x ptr addrspace(1)>, ptr [[P]], align 16
; CHECK-NEXT: call void @use.v2.p1(<2 x ptr addrspace(1)> [[Y]])
; CHECK-NEXT: ret <2 x i64> [[X]]
;
@@ -392,3 +392,29 @@ define <2 x i64> @test24(ptr %P) {
call void @use.v2.p1(<2 x ptr addrspace(1)> %Y)
ret <2 x i64> %X
}
+
+define i16 @load_from_zero_with_dynamic_offset(i64 %idx) {
+; CHECK-LABEL: @load_from_zero_with_dynamic_offset(
+; CHECK-NEXT: [[GEP:%.*]] = getelementptr i16, ptr @GLOBAL, i64 [[IDX:%.*]]
+; CHECK-NEXT: [[V:%.*]] = load i16, ptr [[GEP]], align 2
+; CHECK-NEXT: ret i16 [[V]]
+;
+ %gep = getelementptr i16, ptr @GLOBAL, i64 %idx
+ %v = load i16, ptr %gep
+ ret i16 %v
+}
+
+declare ptr @llvm.strip.invariant.group.p0(ptr %p)
+
+define i32 @load_via_strip_invariant_group() {
+; CHECK-LABEL: @load_via_strip_invariant_group(
+; CHECK-NEXT: [[A:%.*]] = call ptr @llvm.strip.invariant.group.p0(ptr nonnull @Y)
+; CHECK-NEXT: [[B:%.*]] = getelementptr i8, ptr [[A]], i64 8
+; CHECK-NEXT: [[D:%.*]] = load i32, ptr [[B]], align 4
+; CHECK-NEXT: ret i32 [[D]]
+;
+ %a = call ptr @llvm.strip.invariant.group.p0(ptr @Y)
+ %b = getelementptr i8, ptr %a, i64 8
+ %d = load i32, ptr %b
+ ret i32 %d
+}
More information about the llvm-commits
mailing list