@@ -174,12 +174,14 @@ void use(double*);
174
174
// CHECK-NEXT: [[VLA:%.*]] = alloca double, i64 [[TMP0]], align 16
175
175
// CHECK-NEXT: call void @use(ptr noundef nonnull [[VLA]]) #[[ATTR7:[0-9]+]]
176
176
// CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[I]] to i64
177
- // CHECK-NEXT: [[DOTNOT:%.*]] = icmp ugt i64 [[TMP0]], [[IDXPROM]]
178
- // CHECK-NEXT: br i1 [[DOTNOT]], label %[[BB1:.*]], label %[[TRAP:.*]]
179
- // CHECK: [[BB1]]:
177
+ // CHECK-NEXT: [[TMP1:%.*]] = icmp ule i64 [[TMP0]], [[IDXPROM]]
178
+ // CHECK-NEXT: [[TMP2:%.*]] = call i1 @llvm.allow.ubsan.check(i8 71), !nosanitize [[META2]]
179
+ // CHECK-NEXT: [[TMP3:%.*]] = and i1 [[TMP1]], [[TMP2]], !nosanitize [[META2]]
180
+ // CHECK-NEXT: br i1 [[TMP3]], label %[[TRAP:.*]], label %[[BB4:.*]]
181
+ // CHECK: [[BB4]]:
180
182
// CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[VLA]], i64 [[IDXPROM]]
181
- // CHECK-NEXT: [[TMP2 :%.*]] = load double, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA8:![0-9]+]]
182
- // CHECK-NEXT: ret double [[TMP2 ]]
183
+ // CHECK-NEXT: [[TMP5 :%.*]] = load double, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA8:![0-9]+]]
184
+ // CHECK-NEXT: ret double [[TMP5 ]]
183
185
// CHECK: [[TRAP]]:
184
186
// CHECK-NEXT: call void @__ubsan_handle_local_out_of_bounds_abort() #[[ATTR6]], !nosanitize [[META2]]
185
187
// CHECK-NEXT: unreachable, !nosanitize [[META2]]
@@ -191,12 +193,14 @@ void use(double*);
191
193
// TR-NEXT: [[VLA:%.*]] = alloca double, i64 [[TMP0]], align 16
192
194
// TR-NEXT: call void @use(ptr noundef nonnull [[VLA]]) #[[ATTR6:[0-9]+]]
193
195
// TR-NEXT: [[IDXPROM:%.*]] = sext i32 [[I]] to i64
194
- // TR-NEXT: [[DOTNOT:%.*]] = icmp ugt i64 [[TMP0]], [[IDXPROM]]
195
- // TR-NEXT: br i1 [[DOTNOT]], label %[[BB1:.*]], label %[[TRAP:.*]]
196
- // TR: [[BB1]]:
196
+ // TR-NEXT: [[TMP1:%.*]] = icmp ule i64 [[TMP0]], [[IDXPROM]]
197
+ // TR-NEXT: [[TMP2:%.*]] = call i1 @llvm.allow.ubsan.check(i8 71), !nosanitize [[META2]]
198
+ // TR-NEXT: [[TMP3:%.*]] = and i1 [[TMP1]], [[TMP2]], !nosanitize [[META2]]
199
+ // TR-NEXT: br i1 [[TMP3]], label %[[TRAP:.*]], label %[[BB4:.*]]
200
+ // TR: [[BB4]]:
197
201
// TR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[VLA]], i64 [[IDXPROM]]
198
- // TR-NEXT: [[TMP2 :%.*]] = load double, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA7:![0-9]+]]
199
- // TR-NEXT: ret double [[TMP2 ]]
202
+ // TR-NEXT: [[TMP5 :%.*]] = load double, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA7:![0-9]+]]
203
+ // TR-NEXT: ret double [[TMP5 ]]
200
204
// TR: [[TRAP]]:
201
205
// TR-NEXT: call void @llvm.ubsantrap(i8 3) #[[ATTR5]], !nosanitize [[META2]]
202
206
// TR-NEXT: unreachable, !nosanitize [[META2]]
@@ -208,15 +212,17 @@ void use(double*);
208
212
// REC-NEXT: [[VLA:%.*]] = alloca double, i64 [[TMP0]], align 16
209
213
// REC-NEXT: call void @use(ptr noundef nonnull [[VLA]]) #[[ATTR5:[0-9]+]]
210
214
// REC-NEXT: [[IDXPROM:%.*]] = sext i32 [[I]] to i64
211
- // REC-NEXT: [[DOTNOT:%.*]] = icmp ugt i64 [[TMP0]], [[IDXPROM]]
212
- // REC-NEXT: br i1 [[DOTNOT]], label %[[BB1:.*]], label %[[TRAP:.*]]
213
- // REC: [[BB1]]:
215
+ // REC-NEXT: [[TMP1:%.*]] = icmp ule i64 [[TMP0]], [[IDXPROM]]
216
+ // REC-NEXT: [[TMP2:%.*]] = call i1 @llvm.allow.ubsan.check(i8 71), !nosanitize [[META2]]
217
+ // REC-NEXT: [[TMP3:%.*]] = and i1 [[TMP1]], [[TMP2]], !nosanitize [[META2]]
218
+ // REC-NEXT: br i1 [[TMP3]], label %[[TRAP:.*]], label %[[BB4:.*]]
219
+ // REC: [[BB4]]:
214
220
// REC-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[VLA]], i64 [[IDXPROM]]
215
- // REC-NEXT: [[TMP2 :%.*]] = load double, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA8:![0-9]+]]
216
- // REC-NEXT: ret double [[TMP2 ]]
221
+ // REC-NEXT: [[TMP5 :%.*]] = load double, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA8:![0-9]+]]
222
+ // REC-NEXT: ret double [[TMP5 ]]
217
223
// REC: [[TRAP]]:
218
224
// REC-NEXT: call void @__ubsan_handle_local_out_of_bounds() #[[ATTR6]], !nosanitize [[META2]]
219
- // REC-NEXT: br label %[[BB1 ]], !nosanitize [[META2]]
225
+ // REC-NEXT: br label %[[BB4 ]], !nosanitize [[META2]]
220
226
//
221
227
double lbounds (int b , int i ) {
222
228
double a [b ];
0 commit comments