[llvm] 6e6dbae - [GVN] Add additional metadata adjustment tests (NFC)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 12 06:46:34 PDT 2023


Author: Nikita Popov
Date: 2023-04-12T15:46:25+02:00
New Revision: 6e6dbae3ed492b49d2272e90fcc7b6239a16fecf

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

LOG: [GVN] Add additional metadata adjustment tests (NFC)

Added: 
    llvm/test/Transforms/GVN/metadata.ll

Modified: 
    

Removed: 
    llvm/test/Transforms/GVN/range.ll


################################################################################
diff  --git a/llvm/test/Transforms/GVN/range.ll b/llvm/test/Transforms/GVN/metadata.ll
similarity index 57%
rename from llvm/test/Transforms/GVN/range.ll
rename to llvm/test/Transforms/GVN/metadata.ll
index 48605aef0fe7d..d089a8e3e4c8c 100644
--- a/llvm/test/Transforms/GVN/range.ll
+++ b/llvm/test/Transforms/GVN/metadata.ll
@@ -131,6 +131,94 @@ define i32 @load_load_noundef(ptr %p) {
   ret i32 %c
 }
 
+declare void @use.i64(i64)
+declare void @use.i32(i32)
+
+define void @load_ptr_nonnull_to_i64(ptr %p) {
+; CHECK-LABEL: define void @load_ptr_nonnull_to_i64
+; CHECK-SAME: (ptr [[P:%.*]]) {
+; CHECK-NEXT:    [[VAL:%.*]] = load ptr, ptr [[P]], align 8, !nonnull !6
+; CHECK-NEXT:    [[VAL_INT:%.*]] = ptrtoint ptr [[VAL]] to i64
+; CHECK-NEXT:    call void @use.i64(i64 [[VAL_INT]])
+; CHECK-NEXT:    call void @use.i64(i64 [[VAL_INT]])
+; CHECK-NEXT:    ret void
+;
+  %val = load ptr, ptr %p, align 8, !nonnull !{}
+  %val.int = ptrtoint ptr %val to i64
+  %val2 = load i64, ptr %p, align 8
+  call void @use.i64(i64 %val.int)
+  call void @use.i64(i64 %val2)
+  ret void
+}
+
+define void @load_ptr_nonnull_noundef_to_i64(ptr %p) {
+; CHECK-LABEL: define void @load_ptr_nonnull_noundef_to_i64
+; CHECK-SAME: (ptr [[P:%.*]]) {
+; CHECK-NEXT:    [[VAL:%.*]] = load ptr, ptr [[P]], align 8, !nonnull !6, !noundef !6
+; CHECK-NEXT:    [[VAL_INT:%.*]] = ptrtoint ptr [[VAL]] to i64
+; CHECK-NEXT:    call void @use.i64(i64 [[VAL_INT]])
+; CHECK-NEXT:    call void @use.i64(i64 [[VAL_INT]])
+; CHECK-NEXT:    ret void
+;
+  %val = load ptr, ptr %p, align 8, !nonnull !{}, !noundef !{}
+  %val.int = ptrtoint ptr %val to i64
+  %val2 = load i64, ptr %p, align 8
+  call void @use.i64(i64 %val.int)
+  call void @use.i64(i64 %val2)
+  ret void
+}
+
+define void @load_ptr_invariant_load_to_i64(ptr %p) {
+; CHECK-LABEL: define void @load_ptr_invariant_load_to_i64
+; CHECK-SAME: (ptr [[P:%.*]]) {
+; CHECK-NEXT:    [[VAL:%.*]] = load ptr, ptr [[P]], align 8, !invariant.load !6
+; CHECK-NEXT:    [[VAL_INT:%.*]] = ptrtoint ptr [[VAL]] to i64
+; CHECK-NEXT:    call void @use.i64(i64 [[VAL_INT]])
+; CHECK-NEXT:    call void @use.i64(i64 [[VAL_INT]])
+; CHECK-NEXT:    ret void
+;
+  %val = load ptr, ptr %p, align 8, !invariant.load !{}
+  %val.int = ptrtoint ptr %val to i64
+  %val2 = load i64, ptr %p, align 8
+  call void @use.i64(i64 %val.int)
+  call void @use.i64(i64 %val2)
+  ret void
+}
+
+define void @load_ptr_nonnull_to_i32(ptr %p) {
+; CHECK-LABEL: define void @load_ptr_nonnull_to_i32
+; CHECK-SAME: (ptr [[P:%.*]]) {
+; CHECK-NEXT:    [[VAL:%.*]] = load ptr, ptr [[P]], align 8, !nonnull !6
+; CHECK-NEXT:    [[VAL_INT:%.*]] = ptrtoint ptr [[VAL]] to i64
+; CHECK-NEXT:    [[TMP1:%.*]] = trunc i64 [[VAL_INT]] to i32
+; CHECK-NEXT:    call void @use.i64(i64 [[VAL_INT]])
+; CHECK-NEXT:    call void @use.i32(i32 [[TMP1]])
+; CHECK-NEXT:    ret void
+;
+  %val = load ptr, ptr %p, align 8, !nonnull !{}
+  %val.int = ptrtoint ptr %val to i64
+  %val2 = load i32, ptr %p, align 8
+  call void @use.i64(i64 %val.int)
+  call void @use.i32(i32 %val2)
+  ret void
+}
+
+define void @load_i64_range_to_i32_range(ptr %p) {
+; CHECK-LABEL: define void @load_i64_range_to_i32_range
+; CHECK-SAME: (ptr [[P:%.*]]) {
+; CHECK-NEXT:    [[VAL:%.*]] = load i64, ptr [[P]], align 8, !range [[RNG7:![0-9]+]]
+; CHECK-NEXT:    [[TMP1:%.*]] = trunc i64 [[VAL]] to i32
+; CHECK-NEXT:    call void @use.i64(i64 [[VAL]])
+; CHECK-NEXT:    call void @use.i32(i32 [[TMP1]])
+; CHECK-NEXT:    ret void
+;
+  %val = load i64, ptr %p, align 8, !range !{i64 0, i64 10}
+  %val2 = load i32, ptr %p, align 8, !range !{i32 0, i32 10}
+  call void @use.i64(i64 %val)
+  call void @use.i32(i32 %val2)
+  ret void
+}
+
 !0 = !{i32 0, i32 2}
 !1 = !{i32 3, i32 5}
 !2 = !{i32 2, i32 5}
@@ -151,4 +239,5 @@ define i32 @load_load_noundef(ptr %p) {
 ; CHECK: [[RNG4]] = !{i32 10, i32 1}
 ; CHECK: [[RNG5]] = !{i32 3, i32 4, i32 5, i32 2}
 ; CHECK: [[META6:![0-9]+]] = !{}
+; CHECK: [[RNG7]] = !{i64 0, i64 10}
 ;.


        


More information about the llvm-commits mailing list