[llvm] a71b408 - [InstCombine] Add tests for memset -> load forward with offset (NFC)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 3 02:21:17 PDT 2022


Author: Nikita Popov
Date: 2022-11-03T10:20:38+01:00
New Revision: a71b408aefdbfd903acc88a38f887780e96f9336

URL: https://github.com/llvm/llvm-project/commit/a71b408aefdbfd903acc88a38f887780e96f9336
DIFF: https://github.com/llvm/llvm-project/commit/a71b408aefdbfd903acc88a38f887780e96f9336.diff

LOG: [InstCombine] Add tests for memset -> load forward with offset (NFC)

Added: 
    

Modified: 
    llvm/test/Transforms/InstCombine/load-store-forward.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/load-store-forward.ll b/llvm/test/Transforms/InstCombine/load-store-forward.ll
index bfdbbf6bdb0e..1d51e1c3c18a 100644
--- a/llvm/test/Transforms/InstCombine/load-store-forward.ll
+++ b/llvm/test/Transforms/InstCombine/load-store-forward.ll
@@ -287,6 +287,45 @@ define i32 @load_after_memset_unknown(ptr %a, i8 %byte) {
   ret i32 %v
 }
 
+define i32 @load_after_memset_0_offset(ptr %a) {
+; CHECK-LABEL: @load_after_memset_0_offset(
+; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(16) [[A:%.*]], i8 0, i64 16, i1 false)
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i8, ptr [[A]], i64 4
+; CHECK-NEXT:    [[V:%.*]] = load i32, ptr [[GEP]], align 4
+; CHECK-NEXT:    ret i32 [[V]]
+;
+  call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 16, i1 false)
+  %gep = getelementptr i8, ptr %a, i64 4
+  %v = load i32, ptr %gep
+  ret i32 %v
+}
+
+define i32 @load_after_memset_0_offset_too_large(ptr %a) {
+; CHECK-LABEL: @load_after_memset_0_offset_too_large(
+; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(16) [[A:%.*]], i8 0, i64 16, i1 false)
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i8, ptr [[A]], i64 13
+; CHECK-NEXT:    [[V:%.*]] = load i32, ptr [[GEP]], align 4
+; CHECK-NEXT:    ret i32 [[V]]
+;
+  call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 16, i1 false)
+  %gep = getelementptr i8, ptr %a, i64 13
+  %v = load i32, ptr %gep
+  ret i32 %v
+}
+
+define i32 @load_after_memset_0_offset_negative(ptr %a) {
+; CHECK-LABEL: @load_after_memset_0_offset_negative(
+; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(16) [[A:%.*]], i8 0, i64 16, i1 false)
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i8, ptr [[A]], i64 -1
+; CHECK-NEXT:    [[V:%.*]] = load i32, ptr [[GEP]], align 4
+; CHECK-NEXT:    ret i32 [[V]]
+;
+  call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 16, i1 false)
+  %gep = getelementptr i8, ptr %a, i64 -1
+  %v = load i32, ptr %gep
+  ret i32 %v
+}
+
 define i32 @load_after_memset_0_clobber(ptr %a) {
 ; CHECK-LABEL: @load_after_memset_0_clobber(
 ; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(16) [[A:%.*]], i8 0, i64 16, i1 false)


        


More information about the llvm-commits mailing list