@@ -23,8 +23,19 @@ define void @test2(i32* %P) {
23
23
ret void
24
24
}
25
25
26
- define void @store_at_gep_off_null (i64 %offset ) {
27
- ; CHECK-LABEL: @store_at_gep_off_null(
26
+ define void @store_at_gep_off_null_inbounds (i64 %offset ) {
27
+ ; CHECK-LABEL: @store_at_gep_off_null_inbounds(
28
+ ; CHECK-NEXT: [[PTR:%.*]] = getelementptr inbounds i32, i32* null, i64 [[OFFSET:%.*]]
29
+ ; CHECK-NEXT: store i32 undef, i32* [[PTR]], align 4
30
+ ; CHECK-NEXT: ret void
31
+ ;
32
+ %ptr = getelementptr inbounds i32 , i32 *null , i64 %offset
33
+ store i32 24 , i32* %ptr
34
+ ret void
35
+ }
36
+
37
+ define void @store_at_gep_off_null_not_inbounds (i64 %offset ) {
38
+ ; CHECK-LABEL: @store_at_gep_off_null_not_inbounds(
28
39
; CHECK-NEXT: [[PTR:%.*]] = getelementptr i32, i32* null, i64 [[OFFSET:%.*]]
29
40
; CHECK-NEXT: store i32 undef, i32* [[PTR]], align 4
30
41
; CHECK-NEXT: ret void
@@ -36,11 +47,11 @@ define void @store_at_gep_off_null(i64 %offset) {
36
47
37
48
define void @store_at_gep_off_no_null_opt (i64 %offset ) #0 {
38
49
; CHECK-LABEL: @store_at_gep_off_no_null_opt(
39
- ; CHECK-NEXT: [[PTR:%.*]] = getelementptr i32, i32* null, i64 [[OFFSET:%.*]]
50
+ ; CHECK-NEXT: [[PTR:%.*]] = getelementptr inbounds i32, i32* null, i64 [[OFFSET:%.*]]
40
51
; CHECK-NEXT: store i32 24, i32* [[PTR]], align 4
41
52
; CHECK-NEXT: ret void
42
53
;
43
- %ptr = getelementptr i32 , i32 *null , i64 %offset
54
+ %ptr = getelementptr inbounds i32 , i32 *null , i64 %offset
44
55
store i32 24 , i32* %ptr
45
56
ret void
46
57
}
@@ -130,14 +141,14 @@ define void @test6(i32 %n, float* %a, i32* %gi) nounwind uwtable ssp {
130
141
; CHECK-NEXT: br label [[FOR_COND:%.*]]
131
142
; CHECK: for.cond:
132
143
; CHECK-NEXT: [[STOREMERGE:%.*]] = phi i32 [ 42, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY:%.*]] ]
133
- ; CHECK-NEXT: store i32 [[STOREMERGE]], i32* [[GI:%.*]], align 4, !tbaa !0
144
+ ; CHECK-NEXT: store i32 [[STOREMERGE]], i32* [[GI:%.*]], align 4, [[TBAA0: !tbaa !.*]]
134
145
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[STOREMERGE]], [[N:%.*]]
135
146
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END:%.*]]
136
147
; CHECK: for.body:
137
148
; CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[STOREMERGE]] to i64
138
149
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds float, float* [[A:%.*]], i64 [[IDXPROM]]
139
- ; CHECK-NEXT: store float 0.000000e+00, float* [[ARRAYIDX]], align 4, !tbaa !4
140
- ; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[GI]], align 4, !tbaa !0
150
+ ; CHECK-NEXT: store float 0.000000e+00, float* [[ARRAYIDX]], align 4, [[TBAA4: !tbaa !.*]]
151
+ ; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[GI]], align 4, [[TBAA0]]
141
152
; CHECK-NEXT: [[INC]] = add nsw i32 [[TMP0]], 1
142
153
; CHECK-NEXT: br label [[FOR_COND]]
143
154
; CHECK: for.end:
0 commit comments