Skip to content

Commit 269cfd3

Browse files
committed
[SROA] Add additional metadata preservation tests (NFC)
1 parent 65cf77d commit 269cfd3

File tree

1 file changed

+52
-2
lines changed

1 file changed

+52
-2
lines changed

llvm/test/Transforms/SROA/preserve-nonnull.ll renamed to llvm/test/Transforms/SROA/preserve-metadata.ll

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,58 @@ entry:
2525
ret ptr %load
2626
}
2727

28-
define ptr @turn_nonnull_into_assume(ptr %arg) {
29-
; CHECK-LABEL: @turn_nonnull_into_assume(
28+
define i32 @propagate_range(i32 %v) {
29+
; CHECK-LABEL: @propagate_range(
30+
; CHECK-NEXT: entry:
31+
; CHECK-NEXT: [[A_SROA_1:%.*]] = alloca i32, align 4
32+
; CHECK-NEXT: store i32 [[V:%.*]], ptr [[A_SROA_1]], align 4
33+
; CHECK-NEXT: [[A_SROA_1_0_A_SROA_1_4_LOAD:%.*]] = load volatile i32, ptr [[A_SROA_1]], align 4
34+
; CHECK-NEXT: ret i32 [[A_SROA_1_0_A_SROA_1_4_LOAD]]
35+
;
36+
entry:
37+
%a = alloca [2 x i32]
38+
%a.gep1 = getelementptr [2 x i32], ptr %a, i32 0, i32 1
39+
store i32 %v, ptr %a.gep1
40+
store i32 0, ptr %a
41+
%load = load volatile i32, ptr %a.gep1, !range !{i32 0, i32 10}
42+
ret i32 %load
43+
}
44+
45+
define ptr @propagate_noundef(ptr %v) {
46+
; CHECK-LABEL: @propagate_noundef(
47+
; CHECK-NEXT: entry:
48+
; CHECK-NEXT: [[A_SROA_1:%.*]] = alloca ptr, align 8
49+
; CHECK-NEXT: store ptr [[V:%.*]], ptr [[A_SROA_1]], align 8
50+
; CHECK-NEXT: [[A_SROA_1_0_A_SROA_1_8_LOAD:%.*]] = load volatile ptr, ptr [[A_SROA_1]], align 8
51+
; CHECK-NEXT: ret ptr [[A_SROA_1_0_A_SROA_1_8_LOAD]]
52+
;
53+
entry:
54+
%a = alloca [2 x ptr]
55+
%a.gep1 = getelementptr [2 x ptr], ptr %a, i32 0, i32 1
56+
store ptr %v, ptr %a.gep1
57+
store ptr null, ptr %a
58+
%load = load volatile ptr, ptr %a.gep1, !noundef !0
59+
ret ptr %load
60+
}
61+
62+
define ptr @turn_nonnull_noundef_into_assume(ptr %arg) {
63+
; CHECK-LABEL: @turn_nonnull_noundef_into_assume(
64+
; CHECK-NEXT: entry:
65+
; CHECK-NEXT: [[BUF_0_COPYLOAD:%.*]] = load ptr, ptr [[ARG:%.*]], align 8
66+
; CHECK-NEXT: [[TMP0:%.*]] = icmp ne ptr [[BUF_0_COPYLOAD]], null
67+
; CHECK-NEXT: call void @llvm.assume(i1 [[TMP0]])
68+
; CHECK-NEXT: ret ptr [[BUF_0_COPYLOAD]]
69+
;
70+
entry:
71+
%buf = alloca ptr
72+
call void @llvm.memcpy.p0.p0.i64(ptr align 8 %buf, ptr align 8 %arg, i64 8, i1 false)
73+
%ret = load ptr, ptr %buf, align 8, !nonnull !0, !noundef !0
74+
ret ptr %ret
75+
}
76+
77+
; FIXME: Should not produce assume.
78+
define ptr @dont_turn_nonnull_without_noundef_into_assume(ptr %arg) {
79+
; CHECK-LABEL: @dont_turn_nonnull_without_noundef_into_assume(
3080
; CHECK-NEXT: entry:
3181
; CHECK-NEXT: [[BUF_0_COPYLOAD:%.*]] = load ptr, ptr [[ARG:%.*]], align 8
3282
; CHECK-NEXT: [[TMP0:%.*]] = icmp ne ptr [[BUF_0_COPYLOAD]], null

0 commit comments

Comments
 (0)