Skip to content

Commit be22b90

Browse files
committed
[Attributor][NFC] Precommit tests
1 parent 88b5d23 commit be22b90

File tree

1 file changed

+169
-82
lines changed

1 file changed

+169
-82
lines changed

llvm/test/Transforms/Attributor/nonnull.ll

Lines changed: 169 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -397,20 +397,20 @@ define internal ptr @f1(ptr %arg) {
397397
; TUNIT-NEXT: [[TMP:%.*]] = icmp eq ptr [[ARG]], null
398398
; TUNIT-NEXT: br i1 [[TMP]], label [[BB9:%.*]], label [[BB1:%.*]]
399399
; TUNIT: bb1:
400-
; TUNIT-NEXT: [[TRUETMP2:%.*]] = load i32, ptr [[ARG]], align 4
401-
; TUNIT-NEXT: [[TRUETMP3:%.*]] = icmp eq i32 [[TRUETMP2]], 0
402-
; TUNIT-NEXT: br i1 [[TRUETMP3]], label [[BB6:%.*]], label [[BB4:%.*]]
400+
; TUNIT-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARG]], align 4
401+
; TUNIT-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP2]], 0
402+
; TUNIT-NEXT: br i1 [[TMP3]], label [[BB6:%.*]], label [[BB4:%.*]]
403403
; TUNIT: bb4:
404-
; TUNIT-NEXT: [[TRUETMP5:%.*]] = getelementptr inbounds i32, ptr [[ARG]], i64 1
405-
; TUNIT-NEXT: [[TMP5B:%.*]] = tail call ptr @f3(ptr nofree nonnull readonly [[TRUETMP5]]) #[[ATTR16:[0-9]+]]
404+
; TUNIT-NEXT: [[TMP5:%.*]] = getelementptr inbounds i32, ptr [[ARG]], i64 1
405+
; TUNIT-NEXT: [[TMP5B:%.*]] = tail call ptr @f3(ptr nofree nonnull readonly [[TMP5]]) #[[ATTR16:[0-9]+]]
406406
; TUNIT-NEXT: [[TMP5C:%.*]] = getelementptr inbounds i32, ptr [[TMP5B]], i64 -1
407407
; TUNIT-NEXT: br label [[BB9]]
408408
; TUNIT: bb6:
409-
; TUNIT-NEXT: [[TRUETMP7:%.*]] = tail call ptr @f2(ptr nofree nonnull readonly align 4 dereferenceable(4) [[ARG]]) #[[ATTR16]]
410-
; TUNIT-NEXT: ret ptr [[TRUETMP7]]
409+
; TUNIT-NEXT: [[TMP7:%.*]] = tail call ptr @f2(ptr nofree nonnull readonly align 4 dereferenceable(4) [[ARG]]) #[[ATTR16]]
410+
; TUNIT-NEXT: ret ptr [[TMP7]]
411411
; TUNIT: bb9:
412-
; TUNIT-NEXT: [[TRUETMP10:%.*]] = phi ptr [ [[TMP5C]], [[BB4]] ], [ inttoptr (i64 4 to ptr), [[BB:%.*]] ]
413-
; TUNIT-NEXT: ret ptr [[TRUETMP10]]
412+
; TUNIT-NEXT: [[TMP10:%.*]] = phi ptr [ [[TMP5C]], [[BB4]] ], [ inttoptr (i64 4 to ptr), [[BB:%.*]] ]
413+
; TUNIT-NEXT: ret ptr [[TMP10]]
414414
;
415415
; CGSCC: Function Attrs: nofree nosync nounwind memory(argmem: read)
416416
; CGSCC-LABEL: define {{[^@]+}}@f1
@@ -419,20 +419,20 @@ define internal ptr @f1(ptr %arg) {
419419
; CGSCC-NEXT: [[TMP:%.*]] = icmp eq ptr [[ARG]], null
420420
; CGSCC-NEXT: br i1 [[TMP]], label [[BB9:%.*]], label [[BB1:%.*]]
421421
; CGSCC: bb1:
422-
; CGSCC-NEXT: [[TRUETMP2:%.*]] = load i32, ptr [[ARG]], align 4
423-
; CGSCC-NEXT: [[TRUETMP3:%.*]] = icmp eq i32 [[TRUETMP2]], 0
424-
; CGSCC-NEXT: br i1 [[TRUETMP3]], label [[BB6:%.*]], label [[BB4:%.*]]
422+
; CGSCC-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARG]], align 4
423+
; CGSCC-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP2]], 0
424+
; CGSCC-NEXT: br i1 [[TMP3]], label [[BB6:%.*]], label [[BB4:%.*]]
425425
; CGSCC: bb4:
426-
; CGSCC-NEXT: [[TRUETMP5:%.*]] = getelementptr inbounds i32, ptr [[ARG]], i64 1
427-
; CGSCC-NEXT: [[TMP5B:%.*]] = tail call ptr @f3(ptr nofree nonnull readonly [[TRUETMP5]]) #[[ATTR16:[0-9]+]]
426+
; CGSCC-NEXT: [[TMP5:%.*]] = getelementptr inbounds i32, ptr [[ARG]], i64 1
427+
; CGSCC-NEXT: [[TMP5B:%.*]] = tail call ptr @f3(ptr nofree nonnull readonly [[TMP5]]) #[[ATTR16:[0-9]+]]
428428
; CGSCC-NEXT: [[TMP5C:%.*]] = getelementptr inbounds i32, ptr [[TMP5B]], i64 -1
429429
; CGSCC-NEXT: br label [[BB9]]
430430
; CGSCC: bb6:
431-
; CGSCC-NEXT: [[TRUETMP7:%.*]] = tail call ptr @f2(ptr nofree nonnull readonly align 4 dereferenceable(4) [[ARG]]) #[[ATTR16]]
432-
; CGSCC-NEXT: ret ptr [[TRUETMP7]]
431+
; CGSCC-NEXT: [[TMP7:%.*]] = tail call ptr @f2(ptr nofree nonnull readonly align 4 dereferenceable(4) [[ARG]]) #[[ATTR16]]
432+
; CGSCC-NEXT: ret ptr [[TMP7]]
433433
; CGSCC: bb9:
434-
; CGSCC-NEXT: [[TRUETMP10:%.*]] = phi ptr [ [[TMP5C]], [[BB4]] ], [ inttoptr (i64 4 to ptr), [[BB:%.*]] ]
435-
; CGSCC-NEXT: ret ptr [[TRUETMP10]]
434+
; CGSCC-NEXT: [[TMP10:%.*]] = phi ptr [ [[TMP5C]], [[BB4]] ], [ inttoptr (i64 4 to ptr), [[BB:%.*]] ]
435+
; CGSCC-NEXT: ret ptr [[TMP10]]
436436
;
437437

438438
bb:
@@ -1100,33 +1100,33 @@ define i32 @nonnull_exec_ctx_1(ptr %a, i32 %b) {
11001100
; TUNIT-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1
11011101
; TUNIT-SAME: (ptr [[A:%.*]], i32 [[B:%.*]]) #[[ATTR8]] {
11021102
; TUNIT-NEXT: en:
1103-
; TUNIT-NEXT: [[TRUETMP3:%.*]] = icmp eq i32 [[B]], 0
1104-
; TUNIT-NEXT: br i1 [[TRUETMP3]], label [[EX:%.*]], label [[HD:%.*]]
1103+
; TUNIT-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
1104+
; TUNIT-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
11051105
; TUNIT: ex:
1106-
; TUNIT-NEXT: [[TRUETMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR7]]
1107-
; TUNIT-NEXT: ret i32 [[TRUETMP5]]
1106+
; TUNIT-NEXT: [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR7]]
1107+
; TUNIT-NEXT: ret i32 [[TMP5]]
11081108
; TUNIT: hd:
1109-
; TUNIT-NEXT: [[TRUETMP7:%.*]] = phi i32 [ [[TRUETMP8:%.*]], [[HD]] ], [ 0, [[EN:%.*]] ]
1109+
; TUNIT-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD]] ], [ 0, [[EN:%.*]] ]
11101110
; TUNIT-NEXT: tail call void @h(ptr [[A]]) #[[ATTR7]]
1111-
; TUNIT-NEXT: [[TRUETMP8]] = add nuw i32 [[TRUETMP7]], 1
1112-
; TUNIT-NEXT: [[TRUETMP9:%.*]] = icmp eq i32 [[TRUETMP8]], [[B]]
1113-
; TUNIT-NEXT: br i1 [[TRUETMP9]], label [[EX]], label [[HD]]
1111+
; TUNIT-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
1112+
; TUNIT-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
1113+
; TUNIT-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
11141114
;
11151115
; CGSCC: Function Attrs: mustprogress nounwind willreturn
11161116
; CGSCC-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1
11171117
; CGSCC-SAME: (ptr [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7]] {
11181118
; CGSCC-NEXT: en:
1119-
; CGSCC-NEXT: [[TRUETMP3:%.*]] = icmp eq i32 [[B]], 0
1120-
; CGSCC-NEXT: br i1 [[TRUETMP3]], label [[EX:%.*]], label [[HD:%.*]]
1119+
; CGSCC-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
1120+
; CGSCC-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
11211121
; CGSCC: ex:
1122-
; CGSCC-NEXT: [[TRUETMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR6]]
1123-
; CGSCC-NEXT: ret i32 [[TRUETMP5]]
1122+
; CGSCC-NEXT: [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR6]]
1123+
; CGSCC-NEXT: ret i32 [[TMP5]]
11241124
; CGSCC: hd:
1125-
; CGSCC-NEXT: [[TRUETMP7:%.*]] = phi i32 [ [[TRUETMP8:%.*]], [[HD]] ], [ 0, [[EN:%.*]] ]
1125+
; CGSCC-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD]] ], [ 0, [[EN:%.*]] ]
11261126
; CGSCC-NEXT: tail call void @h(ptr [[A]]) #[[ATTR6]]
1127-
; CGSCC-NEXT: [[TRUETMP8]] = add nuw i32 [[TRUETMP7]], 1
1128-
; CGSCC-NEXT: [[TRUETMP9:%.*]] = icmp eq i32 [[TRUETMP8]], [[B]]
1129-
; CGSCC-NEXT: br i1 [[TRUETMP9]], label [[EX]], label [[HD]]
1127+
; CGSCC-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
1128+
; CGSCC-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
1129+
; CGSCC-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
11301130
;
11311131
en:
11321132
%tmp3 = icmp eq i32 %b, 0
@@ -1150,37 +1150,37 @@ define i32 @nonnull_exec_ctx_1b(ptr %a, i32 %b) {
11501150
; TUNIT-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1b
11511151
; TUNIT-SAME: (ptr [[A:%.*]], i32 [[B:%.*]]) #[[ATTR8]] {
11521152
; TUNIT-NEXT: en:
1153-
; TUNIT-NEXT: [[TRUETMP3:%.*]] = icmp eq i32 [[B]], 0
1154-
; TUNIT-NEXT: br i1 [[TRUETMP3]], label [[EX:%.*]], label [[HD:%.*]]
1153+
; TUNIT-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
1154+
; TUNIT-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
11551155
; TUNIT: ex:
1156-
; TUNIT-NEXT: [[TRUETMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR7]]
1157-
; TUNIT-NEXT: ret i32 [[TRUETMP5]]
1156+
; TUNIT-NEXT: [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR7]]
1157+
; TUNIT-NEXT: ret i32 [[TMP5]]
11581158
; TUNIT: hd:
1159-
; TUNIT-NEXT: [[TRUETMP7:%.*]] = phi i32 [ [[TRUETMP8:%.*]], [[HD2:%.*]] ], [ 0, [[EN:%.*]] ]
1159+
; TUNIT-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD2:%.*]] ], [ 0, [[EN:%.*]] ]
11601160
; TUNIT-NEXT: tail call void @h(ptr [[A]]) #[[ATTR7]]
11611161
; TUNIT-NEXT: br label [[HD2]]
11621162
; TUNIT: hd2:
1163-
; TUNIT-NEXT: [[TRUETMP8]] = add nuw i32 [[TRUETMP7]], 1
1164-
; TUNIT-NEXT: [[TRUETMP9:%.*]] = icmp eq i32 [[TRUETMP8]], [[B]]
1165-
; TUNIT-NEXT: br i1 [[TRUETMP9]], label [[EX]], label [[HD]]
1163+
; TUNIT-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
1164+
; TUNIT-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
1165+
; TUNIT-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
11661166
;
11671167
; CGSCC: Function Attrs: mustprogress nounwind willreturn
11681168
; CGSCC-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1b
11691169
; CGSCC-SAME: (ptr [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7]] {
11701170
; CGSCC-NEXT: en:
1171-
; CGSCC-NEXT: [[TRUETMP3:%.*]] = icmp eq i32 [[B]], 0
1172-
; CGSCC-NEXT: br i1 [[TRUETMP3]], label [[EX:%.*]], label [[HD:%.*]]
1171+
; CGSCC-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
1172+
; CGSCC-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
11731173
; CGSCC: ex:
1174-
; CGSCC-NEXT: [[TRUETMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR6]]
1175-
; CGSCC-NEXT: ret i32 [[TRUETMP5]]
1174+
; CGSCC-NEXT: [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR6]]
1175+
; CGSCC-NEXT: ret i32 [[TMP5]]
11761176
; CGSCC: hd:
1177-
; CGSCC-NEXT: [[TRUETMP7:%.*]] = phi i32 [ [[TRUETMP8:%.*]], [[HD2:%.*]] ], [ 0, [[EN:%.*]] ]
1177+
; CGSCC-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD2:%.*]] ], [ 0, [[EN:%.*]] ]
11781178
; CGSCC-NEXT: tail call void @h(ptr [[A]]) #[[ATTR6]]
11791179
; CGSCC-NEXT: br label [[HD2]]
11801180
; CGSCC: hd2:
1181-
; CGSCC-NEXT: [[TRUETMP8]] = add nuw i32 [[TRUETMP7]], 1
1182-
; CGSCC-NEXT: [[TRUETMP9:%.*]] = icmp eq i32 [[TRUETMP8]], [[B]]
1183-
; CGSCC-NEXT: br i1 [[TRUETMP9]], label [[EX]], label [[HD]]
1181+
; CGSCC-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
1182+
; CGSCC-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
1183+
; CGSCC-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
11841184
;
11851185
en:
11861186
%tmp3 = icmp eq i32 %b, 0
@@ -1207,33 +1207,33 @@ define i32 @nonnull_exec_ctx_2(ptr %a, i32 %b) willreturn nounwind {
12071207
; TUNIT-LABEL: define {{[^@]+}}@nonnull_exec_ctx_2
12081208
; TUNIT-SAME: (ptr nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR8]] {
12091209
; TUNIT-NEXT: en:
1210-
; TUNIT-NEXT: [[TRUETMP3:%.*]] = icmp eq i32 [[B]], 0
1211-
; TUNIT-NEXT: br i1 [[TRUETMP3]], label [[EX:%.*]], label [[HD:%.*]]
1210+
; TUNIT-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
1211+
; TUNIT-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
12121212
; TUNIT: ex:
1213-
; TUNIT-NEXT: [[TRUETMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR5]]
1214-
; TUNIT-NEXT: ret i32 [[TRUETMP5]]
1213+
; TUNIT-NEXT: [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR5]]
1214+
; TUNIT-NEXT: ret i32 [[TMP5]]
12151215
; TUNIT: hd:
1216-
; TUNIT-NEXT: [[TRUETMP7:%.*]] = phi i32 [ [[TRUETMP8:%.*]], [[HD]] ], [ 0, [[EN:%.*]] ]
1216+
; TUNIT-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD]] ], [ 0, [[EN:%.*]] ]
12171217
; TUNIT-NEXT: tail call void @h(ptr nonnull [[A]]) #[[ATTR5]]
1218-
; TUNIT-NEXT: [[TRUETMP8]] = add nuw i32 [[TRUETMP7]], 1
1219-
; TUNIT-NEXT: [[TRUETMP9:%.*]] = icmp eq i32 [[TRUETMP8]], [[B]]
1220-
; TUNIT-NEXT: br i1 [[TRUETMP9]], label [[EX]], label [[HD]]
1218+
; TUNIT-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
1219+
; TUNIT-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
1220+
; TUNIT-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
12211221
;
12221222
; CGSCC: Function Attrs: mustprogress nounwind willreturn
12231223
; CGSCC-LABEL: define {{[^@]+}}@nonnull_exec_ctx_2
12241224
; CGSCC-SAME: (ptr nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7]] {
12251225
; CGSCC-NEXT: en:
1226-
; CGSCC-NEXT: [[TRUETMP3:%.*]] = icmp eq i32 [[B]], 0
1227-
; CGSCC-NEXT: br i1 [[TRUETMP3]], label [[EX:%.*]], label [[HD:%.*]]
1226+
; CGSCC-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
1227+
; CGSCC-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
12281228
; CGSCC: ex:
1229-
; CGSCC-NEXT: [[TRUETMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR4]]
1230-
; CGSCC-NEXT: ret i32 [[TRUETMP5]]
1229+
; CGSCC-NEXT: [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR4]]
1230+
; CGSCC-NEXT: ret i32 [[TMP5]]
12311231
; CGSCC: hd:
1232-
; CGSCC-NEXT: [[TRUETMP7:%.*]] = phi i32 [ [[TRUETMP8:%.*]], [[HD]] ], [ 0, [[EN:%.*]] ]
1232+
; CGSCC-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD]] ], [ 0, [[EN:%.*]] ]
12331233
; CGSCC-NEXT: tail call void @h(ptr nonnull [[A]]) #[[ATTR4]]
1234-
; CGSCC-NEXT: [[TRUETMP8]] = add nuw i32 [[TRUETMP7]], 1
1235-
; CGSCC-NEXT: [[TRUETMP9:%.*]] = icmp eq i32 [[TRUETMP8]], [[B]]
1236-
; CGSCC-NEXT: br i1 [[TRUETMP9]], label [[EX]], label [[HD]]
1234+
; CGSCC-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
1235+
; CGSCC-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
1236+
; CGSCC-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
12371237
;
12381238
en:
12391239
%tmp3 = icmp eq i32 %b, 0
@@ -1257,37 +1257,37 @@ define i32 @nonnull_exec_ctx_2b(ptr %a, i32 %b) willreturn nounwind {
12571257
; TUNIT-LABEL: define {{[^@]+}}@nonnull_exec_ctx_2b
12581258
; TUNIT-SAME: (ptr nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR8]] {
12591259
; TUNIT-NEXT: en:
1260-
; TUNIT-NEXT: [[TRUETMP3:%.*]] = icmp eq i32 [[B]], 0
1261-
; TUNIT-NEXT: br i1 [[TRUETMP3]], label [[EX:%.*]], label [[HD:%.*]]
1260+
; TUNIT-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
1261+
; TUNIT-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
12621262
; TUNIT: ex:
1263-
; TUNIT-NEXT: [[TRUETMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR5]]
1264-
; TUNIT-NEXT: ret i32 [[TRUETMP5]]
1263+
; TUNIT-NEXT: [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR5]]
1264+
; TUNIT-NEXT: ret i32 [[TMP5]]
12651265
; TUNIT: hd:
1266-
; TUNIT-NEXT: [[TRUETMP7:%.*]] = phi i32 [ [[TRUETMP8:%.*]], [[HD2:%.*]] ], [ 0, [[EN:%.*]] ]
1266+
; TUNIT-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD2:%.*]] ], [ 0, [[EN:%.*]] ]
12671267
; TUNIT-NEXT: tail call void @h(ptr nonnull [[A]]) #[[ATTR5]]
12681268
; TUNIT-NEXT: br label [[HD2]]
12691269
; TUNIT: hd2:
1270-
; TUNIT-NEXT: [[TRUETMP8]] = add nuw i32 [[TRUETMP7]], 1
1271-
; TUNIT-NEXT: [[TRUETMP9:%.*]] = icmp eq i32 [[TRUETMP8]], [[B]]
1272-
; TUNIT-NEXT: br i1 [[TRUETMP9]], label [[EX]], label [[HD]]
1270+
; TUNIT-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
1271+
; TUNIT-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
1272+
; TUNIT-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
12731273
;
12741274
; CGSCC: Function Attrs: mustprogress nounwind willreturn
12751275
; CGSCC-LABEL: define {{[^@]+}}@nonnull_exec_ctx_2b
12761276
; CGSCC-SAME: (ptr nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7]] {
12771277
; CGSCC-NEXT: en:
1278-
; CGSCC-NEXT: [[TRUETMP3:%.*]] = icmp eq i32 [[B]], 0
1279-
; CGSCC-NEXT: br i1 [[TRUETMP3]], label [[EX:%.*]], label [[HD:%.*]]
1278+
; CGSCC-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
1279+
; CGSCC-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
12801280
; CGSCC: ex:
1281-
; CGSCC-NEXT: [[TRUETMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR4]]
1282-
; CGSCC-NEXT: ret i32 [[TRUETMP5]]
1281+
; CGSCC-NEXT: [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]]) #[[ATTR4]]
1282+
; CGSCC-NEXT: ret i32 [[TMP5]]
12831283
; CGSCC: hd:
1284-
; CGSCC-NEXT: [[TRUETMP7:%.*]] = phi i32 [ [[TRUETMP8:%.*]], [[HD2:%.*]] ], [ 0, [[EN:%.*]] ]
1284+
; CGSCC-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD2:%.*]] ], [ 0, [[EN:%.*]] ]
12851285
; CGSCC-NEXT: tail call void @h(ptr nonnull [[A]]) #[[ATTR4]]
12861286
; CGSCC-NEXT: br label [[HD2]]
12871287
; CGSCC: hd2:
1288-
; CGSCC-NEXT: [[TRUETMP8]] = add nuw i32 [[TRUETMP7]], 1
1289-
; CGSCC-NEXT: [[TRUETMP9:%.*]] = icmp eq i32 [[TRUETMP8]], [[B]]
1290-
; CGSCC-NEXT: br i1 [[TRUETMP9]], label [[EX]], label [[HD]]
1288+
; CGSCC-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
1289+
; CGSCC-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
1290+
; CGSCC-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
12911291
;
12921292
en:
12931293
%tmp3 = icmp eq i32 %b, 0
@@ -1525,6 +1525,92 @@ define void @nonnull_caller(ptr %p) {
15251525

15261526
declare void @nonnull_callee(ptr nonnull %p)
15271527

1528+
define ptr @phi(ptr %p) {
1529+
; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
1530+
; CHECK-LABEL: define {{[^@]+}}@phi
1531+
; CHECK-SAME: (ptr nofree readnone [[P:%.*]]) #[[ATTR1]] {
1532+
; CHECK-NEXT: [[C:%.*]] = icmp eq ptr [[P]], null
1533+
; CHECK-NEXT: [[G:%.*]] = getelementptr inbounds i8, ptr [[P]], i64 1
1534+
; CHECK-NEXT: br i1 [[C]], label [[NULL:%.*]], label [[NNULL:%.*]]
1535+
; CHECK: NNULL:
1536+
; CHECK-NEXT: br label [[MERGE:%.*]]
1537+
; CHECK: NULL:
1538+
; CHECK-NEXT: br label [[MERGE]]
1539+
; CHECK: merge:
1540+
; CHECK-NEXT: [[PHI:%.*]] = phi ptr [ [[P]], [[NNULL]] ], [ [[G]], [[NULL]] ]
1541+
; CHECK-NEXT: ret ptr [[PHI]]
1542+
;
1543+
%c = icmp eq ptr %p, null
1544+
%g = getelementptr inbounds i8, ptr %p, i64 1
1545+
br i1 %c, label %NULL, label %NNULL
1546+
NNULL:
1547+
br label %merge
1548+
NULL:
1549+
br label %merge
1550+
merge:
1551+
%phi = phi ptr [%p, %NNULL], [%g, %NULL]
1552+
ret ptr %phi
1553+
}
1554+
define void @phi_caller(ptr %p) {
1555+
; TUNIT: Function Attrs: nounwind
1556+
; TUNIT-LABEL: define {{[^@]+}}@phi_caller
1557+
; TUNIT-SAME: (ptr nofree [[P:%.*]]) #[[ATTR5]] {
1558+
; TUNIT-NEXT: [[C:%.*]] = call ptr @phi(ptr noalias nofree readnone [[P]]) #[[ATTR19:[0-9]+]]
1559+
; TUNIT-NEXT: call void @use_i8_ptr(ptr noalias nocapture nofree readnone [[C]]) #[[ATTR5]]
1560+
; TUNIT-NEXT: ret void
1561+
;
1562+
; CGSCC: Function Attrs: nounwind
1563+
; CGSCC-LABEL: define {{[^@]+}}@phi_caller
1564+
; CGSCC-SAME: (ptr nofree [[P:%.*]]) #[[ATTR4]] {
1565+
; CGSCC-NEXT: [[C:%.*]] = call ptr @phi(ptr noalias nofree readnone [[P]]) #[[ATTR15]]
1566+
; CGSCC-NEXT: call void @use_i8_ptr(ptr noalias nocapture nofree readnone [[C]]) #[[ATTR4]]
1567+
; CGSCC-NEXT: ret void
1568+
;
1569+
%c = call ptr @phi(ptr %p)
1570+
call void @use_i8_ptr(ptr %c)
1571+
ret void
1572+
}
1573+
1574+
define ptr @multi_ret(ptr %p) {
1575+
; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
1576+
; CHECK-LABEL: define {{[^@]+}}@multi_ret
1577+
; CHECK-SAME: (ptr nofree readnone [[P:%.*]]) #[[ATTR1]] {
1578+
; CHECK-NEXT: [[C:%.*]] = icmp eq ptr [[P]], null
1579+
; CHECK-NEXT: br i1 [[C]], label [[NULL:%.*]], label [[NNULL:%.*]]
1580+
; CHECK: NNULL:
1581+
; CHECK-NEXT: ret ptr [[P]]
1582+
; CHECK: NULL:
1583+
; CHECK-NEXT: [[G:%.*]] = getelementptr inbounds i8, ptr [[P]], i64 1
1584+
; CHECK-NEXT: ret ptr [[G]]
1585+
;
1586+
%c = icmp eq ptr %p, null
1587+
br i1 %c, label %NULL, label %NNULL
1588+
NNULL:
1589+
ret ptr %p
1590+
NULL:
1591+
%g = getelementptr inbounds i8, ptr %p, i64 1
1592+
ret ptr %g
1593+
}
1594+
define void @multi_ret_caller(ptr %p) {
1595+
; TUNIT: Function Attrs: nounwind
1596+
; TUNIT-LABEL: define {{[^@]+}}@multi_ret_caller
1597+
; TUNIT-SAME: (ptr nofree [[P:%.*]]) #[[ATTR5]] {
1598+
; TUNIT-NEXT: [[C:%.*]] = call ptr @multi_ret(ptr noalias nofree readnone [[P]]) #[[ATTR19]]
1599+
; TUNIT-NEXT: call void @use_i8_ptr(ptr noalias nocapture nofree readnone [[C]]) #[[ATTR5]]
1600+
; TUNIT-NEXT: ret void
1601+
;
1602+
; CGSCC: Function Attrs: nounwind
1603+
; CGSCC-LABEL: define {{[^@]+}}@multi_ret_caller
1604+
; CGSCC-SAME: (ptr nofree [[P:%.*]]) #[[ATTR4]] {
1605+
; CGSCC-NEXT: [[C:%.*]] = call ptr @multi_ret(ptr noalias nofree readnone [[P]]) #[[ATTR15]]
1606+
; CGSCC-NEXT: call void @use_i8_ptr(ptr noalias nocapture nofree readnone [[C]]) #[[ATTR4]]
1607+
; CGSCC-NEXT: ret void
1608+
;
1609+
%c = call ptr @multi_ret(ptr %p)
1610+
call void @use_i8_ptr(ptr %c)
1611+
ret void
1612+
}
1613+
15281614
attributes #0 = { null_pointer_is_valid }
15291615
attributes #1 = { nounwind willreturn}
15301616
;.
@@ -1547,6 +1633,7 @@ attributes #1 = { nounwind willreturn}
15471633
; TUNIT: attributes #[[ATTR16]] = { nofree nosync nounwind memory(read) }
15481634
; TUNIT: attributes #[[ATTR17]] = { nosync willreturn memory(read) }
15491635
; TUNIT: attributes #[[ATTR18]] = { nofree nosync willreturn memory(read) }
1636+
; TUNIT: attributes #[[ATTR19]] = { nofree nosync nounwind willreturn memory(none) }
15501637
;.
15511638
; CGSCC: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
15521639
; CGSCC: attributes #[[ATTR1]] = { mustprogress nofree norecurse nosync nounwind willreturn memory(none) }

0 commit comments

Comments
 (0)