Skip to content

Commit ed1c1da

Browse files
committed
[SCCP] Add tests for more non-null roots (NFC)
1 parent 9b4a8f4 commit ed1c1da

File tree

1 file changed

+73
-1
lines changed

1 file changed

+73
-1
lines changed

llvm/test/Transforms/SCCP/pointer-nonnull.ll

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
22
; RUN: opt -S -passes=sccp < %s | FileCheck %s
33

4+
declare ptr @get()
5+
46
define i1 @test_no_attr(ptr %p) {
57
; CHECK-LABEL: define i1 @test_no_attr(
68
; CHECK-SAME: ptr [[P:%.*]]) {
@@ -38,6 +40,73 @@ define i1 @test_dereferenceable(ptr dereferenceable(4) %p) {
3840
ret i1 %cmp
3941
}
4042

43+
define i1 @test_alloca() {
44+
; CHECK-LABEL: define i1 @test_alloca() {
45+
; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4
46+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne ptr [[A]], null
47+
; CHECK-NEXT: ret i1 [[CMP]]
48+
;
49+
%a = alloca i32
50+
%cmp = icmp ne ptr %a, null
51+
ret i1 %cmp
52+
}
53+
54+
define i1 @test_alloca_addrspace() {
55+
; CHECK-LABEL: define i1 @test_alloca_addrspace() {
56+
; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4, addrspace(1)
57+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne ptr addrspace(1) [[A]], null
58+
; CHECK-NEXT: ret i1 [[CMP]]
59+
;
60+
%a = alloca i32, addrspace(1)
61+
%cmp = icmp ne ptr addrspace(1) %a, null
62+
ret i1 %cmp
63+
}
64+
65+
define i1 @test_alloca_null_pointer_valid() null_pointer_is_valid {
66+
; CHECK-LABEL: define i1 @test_alloca_null_pointer_valid(
67+
; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
68+
; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4
69+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne ptr [[A]], null
70+
; CHECK-NEXT: ret i1 [[CMP]]
71+
;
72+
%a = alloca i32
73+
%cmp = icmp ne ptr %a, null
74+
ret i1 %cmp
75+
}
76+
77+
define i1 @test_load_nonnull(ptr %p) {
78+
; CHECK-LABEL: define i1 @test_load_nonnull(
79+
; CHECK-SAME: ptr [[P:%.*]]) {
80+
; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P]], align 8, !nonnull [[META0:![0-9]+]]
81+
; CHECK-NEXT: ret i1 true
82+
;
83+
%p2 = load ptr, ptr %p, !nonnull !{}
84+
%cmp = icmp ne ptr %p2, null
85+
ret i1 %cmp
86+
}
87+
88+
define i1 @test_call_nonnull() {
89+
; CHECK-LABEL: define i1 @test_call_nonnull() {
90+
; CHECK-NEXT: [[P:%.*]] = call nonnull ptr @get()
91+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne ptr [[P]], null
92+
; CHECK-NEXT: ret i1 [[CMP]]
93+
;
94+
%p = call nonnull ptr @get()
95+
%cmp = icmp ne ptr %p, null
96+
ret i1 %cmp
97+
}
98+
99+
define i1 @test_call_dereferenceable() {
100+
; CHECK-LABEL: define i1 @test_call_dereferenceable() {
101+
; CHECK-NEXT: [[P:%.*]] = call dereferenceable(4) ptr @get()
102+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne ptr [[P]], null
103+
; CHECK-NEXT: ret i1 [[CMP]]
104+
;
105+
%p = call dereferenceable(4) ptr @get()
106+
%cmp = icmp ne ptr %p, null
107+
ret i1 %cmp
108+
}
109+
41110
define i1 @test_gep_no_flags(ptr nonnull %p, i64 %x) {
42111
; CHECK-LABEL: define i1 @test_gep_no_flags(
43112
; CHECK-SAME: ptr nonnull [[P:%.*]], i64 [[X:%.*]]) {
@@ -74,7 +143,7 @@ define i1 @test_gep_inbounds(ptr nonnull %p, i64 %x) {
74143

75144
define i1 @test_gep_inbounds_null_pointer_valid(ptr nonnull %p, i64 %x) null_pointer_is_valid {
76145
; CHECK-LABEL: define i1 @test_gep_inbounds_null_pointer_valid(
77-
; CHECK-SAME: ptr nonnull [[P:%.*]], i64 [[X:%.*]]) #[[ATTR0:[0-9]+]] {
146+
; CHECK-SAME: ptr nonnull [[P:%.*]], i64 [[X:%.*]]) #[[ATTR0]] {
78147
; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i8, ptr [[P]], i64 [[X]]
79148
; CHECK-NEXT: [[CMP:%.*]] = icmp ne ptr [[GEP]], null
80149
; CHECK-NEXT: ret i1 [[CMP]]
@@ -135,3 +204,6 @@ join:
135204
%cmp = icmp ne ptr %phi, null
136205
ret i1 %cmp
137206
}
207+
;.
208+
; CHECK: [[META0]] = !{}
209+
;.

0 commit comments

Comments
 (0)