@@ -3176,7 +3176,7 @@ define internal i32 @recSimplify2() {
3176
3176
ret i32 %r
3177
3177
}
3178
3178
3179
- ; TODO: Verify we do not return 10.
3179
+ ; Verify we do not return 10.
3180
3180
define i32 @may_access_after_return (i32 noundef %N , i32 noundef %M ) {
3181
3181
; TUNIT: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
3182
3182
; TUNIT-LABEL: define {{[^@]+}}@may_access_after_return
@@ -3185,7 +3185,10 @@ define i32 @may_access_after_return(i32 noundef %N, i32 noundef %M) {
3185
3185
; TUNIT-NEXT: [[A:%.*]] = alloca i32, align 4
3186
3186
; TUNIT-NEXT: [[B:%.*]] = alloca i32, align 4
3187
3187
; TUNIT-NEXT: call void @write_both(ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[A]], ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[B]]) #[[ATTR18]]
3188
- ; TUNIT-NEXT: ret i32 10
3188
+ ; TUNIT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A]], align 4
3189
+ ; TUNIT-NEXT: [[TMP1:%.*]] = load i32, ptr [[B]], align 4
3190
+ ; TUNIT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP0]], [[TMP1]]
3191
+ ; TUNIT-NEXT: ret i32 [[ADD]]
3189
3192
;
3190
3193
; CGSCC: Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
3191
3194
; CGSCC-LABEL: define {{[^@]+}}@may_access_after_return
@@ -3237,7 +3240,7 @@ entry:
3237
3240
ret ptr %P
3238
3241
}
3239
3242
3240
- ; TODO: Verify we do not return 10.
3243
+ ; Verify we do not return 10.
3241
3244
define i32 @may_access_after_return_choice (i32 noundef %N , i32 noundef %M , i1 %c ) {
3242
3245
; TUNIT: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
3243
3246
; TUNIT-LABEL: define {{[^@]+}}@may_access_after_return_choice
@@ -3248,7 +3251,10 @@ define i32 @may_access_after_return_choice(i32 noundef %N, i32 noundef %M, i1 %c
3248
3251
; TUNIT-NEXT: [[CALL:%.*]] = call nonnull align 4 dereferenceable(4) ptr @passthrough_choice(i1 [[C]], ptr noalias nofree noundef nonnull readnone align 4 dereferenceable(4) "no-capture-maybe-returned" [[A]], ptr noalias nofree noundef nonnull readnone align 4 dereferenceable(4) "no-capture-maybe-returned" [[B]]) #[[ATTR23:[0-9]+]]
3249
3252
; TUNIT-NEXT: [[CALL1:%.*]] = call nonnull align 4 dereferenceable(4) ptr @passthrough_choice(i1 [[C]], ptr noalias nofree noundef nonnull readnone align 4 dereferenceable(4) "no-capture-maybe-returned" [[B]], ptr noalias nofree noundef nonnull readnone align 4 dereferenceable(4) "no-capture-maybe-returned" [[A]]) #[[ATTR23]]
3250
3253
; TUNIT-NEXT: call void @write_both(ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[CALL]], ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[CALL1]]) #[[ATTR18]]
3251
- ; TUNIT-NEXT: ret i32 10
3254
+ ; TUNIT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A]], align 4
3255
+ ; TUNIT-NEXT: [[TMP1:%.*]] = load i32, ptr [[B]], align 4
3256
+ ; TUNIT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP0]], [[TMP1]]
3257
+ ; TUNIT-NEXT: ret i32 [[ADD]]
3252
3258
;
3253
3259
; CGSCC: Function Attrs: mustprogress nofree nosync nounwind willreturn
3254
3260
; CGSCC-LABEL: define {{[^@]+}}@may_access_after_return_choice
@@ -3289,7 +3295,7 @@ entry:
3289
3295
ret ptr %R
3290
3296
}
3291
3297
3292
- ; TODO: Verify we do not return 10.
3298
+ ; Verify we do not return 10.
3293
3299
define i32 @may_access_after_return_no_choice1 (i32 noundef %N , i32 noundef %M ) {
3294
3300
; TUNIT: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
3295
3301
; TUNIT-LABEL: define {{[^@]+}}@may_access_after_return_no_choice1
@@ -3298,7 +3304,10 @@ define i32 @may_access_after_return_no_choice1(i32 noundef %N, i32 noundef %M) {
3298
3304
; TUNIT-NEXT: [[A:%.*]] = alloca i32, align 4
3299
3305
; TUNIT-NEXT: [[B:%.*]] = alloca i32, align 4
3300
3306
; TUNIT-NEXT: call void @write_both(ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[A]], ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[B]]) #[[ATTR18]]
3301
- ; TUNIT-NEXT: ret i32 10
3307
+ ; TUNIT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A]], align 4
3308
+ ; TUNIT-NEXT: [[TMP1:%.*]] = load i32, ptr [[B]], align 4
3309
+ ; TUNIT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP0]], [[TMP1]]
3310
+ ; TUNIT-NEXT: ret i32 [[ADD]]
3302
3311
;
3303
3312
; CGSCC: Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
3304
3313
; CGSCC-LABEL: define {{[^@]+}}@may_access_after_return_no_choice1
@@ -3324,7 +3333,7 @@ entry:
3324
3333
ret i32 %add
3325
3334
}
3326
3335
3327
- ; TODO: Verify we do not return 10.
3336
+ ; Verify we do not return 10.
3328
3337
define i32 @may_access_after_return_no_choice2 (i32 noundef %N , i32 noundef %M ) {
3329
3338
; TUNIT: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
3330
3339
; TUNIT-LABEL: define {{[^@]+}}@may_access_after_return_no_choice2
@@ -3333,7 +3342,10 @@ define i32 @may_access_after_return_no_choice2(i32 noundef %N, i32 noundef %M) {
3333
3342
; TUNIT-NEXT: [[A:%.*]] = alloca i32, align 4
3334
3343
; TUNIT-NEXT: [[B:%.*]] = alloca i32, align 4
3335
3344
; TUNIT-NEXT: call void @write_both(ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[B]], ptr nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[A]]) #[[ATTR18]]
3336
- ; TUNIT-NEXT: ret i32 10
3345
+ ; TUNIT-NEXT: [[TMP0:%.*]] = load i32, ptr [[A]], align 4
3346
+ ; TUNIT-NEXT: [[TMP1:%.*]] = load i32, ptr [[B]], align 4
3347
+ ; TUNIT-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP0]], [[TMP1]]
3348
+ ; TUNIT-NEXT: ret i32 [[ADD]]
3337
3349
;
3338
3350
; CGSCC: Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
3339
3351
; CGSCC-LABEL: define {{[^@]+}}@may_access_after_return_no_choice2
0 commit comments