Skip to content

Commit 5ec91b3

Browse files
authored
[AttributorLight] Without liveness checks, look at all functions (#91004)
1 parent 7f5c71e commit 5ec91b3

File tree

3 files changed

+87
-112
lines changed

3 files changed

+87
-112
lines changed

llvm/lib/Transforms/IPO/Attributor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3954,7 +3954,7 @@ static bool runAttributorLightOnFunctions(InformationCache &InfoCache,
39543954
// We look at internal functions only on-demand but if any use is not a
39553955
// direct call or outside the current set of analyzed functions, we have
39563956
// to do it eagerly.
3957-
if (F->hasLocalLinkage()) {
3957+
if (AC.UseLiveness && F->hasLocalLinkage()) {
39583958
if (llvm::all_of(F->uses(), [&Functions](const Use &U) {
39593959
const auto *CB = dyn_cast<CallBase>(U.getUser());
39603960
return CB && CB->isCallee(&U) &&

llvm/test/Transforms/FunctionAttrs/nonnull.ll

Lines changed: 67 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ define ptr @test10(ptr %a, i64 %n) {
246246
; ATTRIBUTOR-LABEL: define ptr @test10(
247247
; ATTRIBUTOR-SAME: ptr nofree readnone [[A:%.*]], i64 [[N:%.*]]) #[[ATTR3:[0-9]+]] {
248248
; ATTRIBUTOR-NEXT: [[CMP:%.*]] = icmp ne i64 [[N]], 0
249-
; ATTRIBUTOR-NEXT: call void @llvm.assume(i1 [[CMP]]) #[[ATTR14:[0-9]+]]
249+
; ATTRIBUTOR-NEXT: call void @llvm.assume(i1 [[CMP]]) #[[ATTR13:[0-9]+]]
250250
; ATTRIBUTOR-NEXT: [[B:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 [[N]]
251251
; ATTRIBUTOR-NEXT: ret ptr [[B]]
252252
;
@@ -338,7 +338,7 @@ define internal void @test13(ptr %a, ptr %b, ptr %c) {
338338
; FNATTRS-NEXT: ret void
339339
;
340340
; ATTRIBUTOR-LABEL: define internal void @test13(
341-
; ATTRIBUTOR-SAME: ptr nocapture nofree readnone [[A:%.*]], ptr nocapture nofree readnone [[B:%.*]], ptr nocapture nofree readnone [[C:%.*]]) #[[ATTR4:[0-9]+]] {
341+
; ATTRIBUTOR-SAME: ptr nocapture nofree nonnull readnone [[A:%.*]], ptr nocapture nofree readnone [[B:%.*]], ptr nocapture nofree readnone [[C:%.*]]) #[[ATTR0]] {
342342
; ATTRIBUTOR-NEXT: ret void
343343
;
344344
ret void
@@ -382,7 +382,7 @@ define internal ptr @f1(ptr %arg) {
382382
; FNATTRS-NEXT: ret ptr [[TMP10]]
383383
;
384384
; ATTRIBUTOR-LABEL: define internal ptr @f1(
385-
; ATTRIBUTOR-SAME: ptr nofree readonly [[ARG:%.*]]) #[[ATTR5:[0-9]+]] {
385+
; ATTRIBUTOR-SAME: ptr nofree readonly [[ARG:%.*]]) #[[ATTR4:[0-9]+]] {
386386
; ATTRIBUTOR-NEXT: bb:
387387
; ATTRIBUTOR-NEXT: [[TMP:%.*]] = icmp eq ptr [[ARG]], null
388388
; ATTRIBUTOR-NEXT: br i1 [[TMP]], label [[BB9:%.*]], label [[BB1:%.*]]
@@ -392,11 +392,11 @@ define internal ptr @f1(ptr %arg) {
392392
; ATTRIBUTOR-NEXT: br i1 [[TMP3]], label [[BB6:%.*]], label [[BB4:%.*]]
393393
; ATTRIBUTOR: bb4:
394394
; ATTRIBUTOR-NEXT: [[TMP5:%.*]] = getelementptr inbounds i32, ptr [[ARG]], i64 1
395-
; ATTRIBUTOR-NEXT: [[TMP5B:%.*]] = tail call ptr @f3(ptr readonly [[TMP5]]) #[[ATTR15:[0-9]+]]
395+
; ATTRIBUTOR-NEXT: [[TMP5B:%.*]] = tail call ptr @f3(ptr nofree nonnull readonly [[TMP5]]) #[[ATTR14:[0-9]+]]
396396
; ATTRIBUTOR-NEXT: [[TMP5C:%.*]] = getelementptr inbounds i32, ptr [[TMP5B]], i64 -1
397397
; ATTRIBUTOR-NEXT: br label [[BB9]]
398398
; ATTRIBUTOR: bb6:
399-
; ATTRIBUTOR-NEXT: [[TMP7:%.*]] = tail call ptr @f2(ptr readonly [[ARG]]) #[[ATTR15]]
399+
; ATTRIBUTOR-NEXT: [[TMP7:%.*]] = tail call ptr @f2(ptr nofree nonnull readonly [[ARG]]) #[[ATTR14]]
400400
; ATTRIBUTOR-NEXT: ret ptr [[TMP7]]
401401
; ATTRIBUTOR: bb9:
402402
; ATTRIBUTOR-NEXT: [[TMP10:%.*]] = phi ptr [ [[TMP5C]], [[BB4]] ], [ inttoptr (i64 4 to ptr), [[BB:%.*]] ]
@@ -436,9 +436,9 @@ define internal ptr @f2(ptr %arg) {
436436
; FNATTRS-NEXT: ret ptr [[TMP]]
437437
;
438438
; ATTRIBUTOR-LABEL: define internal ptr @f2(
439-
; ATTRIBUTOR-SAME: ptr readonly [[ARG:%.*]]) #[[ATTR5]] {
439+
; ATTRIBUTOR-SAME: ptr nofree nonnull readonly [[ARG:%.*]]) #[[ATTR4]] {
440440
; ATTRIBUTOR-NEXT: bb:
441-
; ATTRIBUTOR-NEXT: [[TMP:%.*]] = tail call ptr @f1(ptr readonly [[ARG]]) #[[ATTR15]]
441+
; ATTRIBUTOR-NEXT: [[TMP:%.*]] = tail call ptr @f1(ptr nofree nonnull readonly [[ARG]]) #[[ATTR14]]
442442
; ATTRIBUTOR-NEXT: ret ptr [[TMP]]
443443
;
444444
bb:
@@ -457,9 +457,9 @@ define dso_local noalias ptr @f3(ptr %arg) {
457457
; FNATTRS-NEXT: ret ptr [[TMP]]
458458
;
459459
; ATTRIBUTOR-LABEL: define dso_local noalias ptr @f3(
460-
; ATTRIBUTOR-SAME: ptr nofree readonly [[ARG:%.*]]) #[[ATTR5]] {
460+
; ATTRIBUTOR-SAME: ptr nofree readonly [[ARG:%.*]]) #[[ATTR4]] {
461461
; ATTRIBUTOR-NEXT: bb:
462-
; ATTRIBUTOR-NEXT: [[TMP:%.*]] = call ptr @f1(ptr nofree readonly [[ARG]]) #[[ATTR15]]
462+
; ATTRIBUTOR-NEXT: [[TMP:%.*]] = call ptr @f1(ptr nofree readonly [[ARG]]) #[[ATTR14]]
463463
; ATTRIBUTOR-NEXT: ret ptr [[TMP]]
464464
;
465465
bb:
@@ -508,14 +508,14 @@ define void @f16(ptr %a, ptr %b, i8 %c) {
508508
; FNATTRS-NEXT: ret void
509509
;
510510
; ATTRIBUTOR-LABEL: define void @f16(
511-
; ATTRIBUTOR-SAME: ptr nonnull [[A:%.*]], ptr [[B:%.*]], i8 [[C:%.*]]) #[[ATTR7:[0-9]+]] {
511+
; ATTRIBUTOR-SAME: ptr nonnull [[A:%.*]], ptr [[B:%.*]], i8 [[C:%.*]]) #[[ATTR6:[0-9]+]] {
512512
; ATTRIBUTOR-NEXT: [[CMP:%.*]] = icmp eq i8 [[C]], 0
513513
; ATTRIBUTOR-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
514514
; ATTRIBUTOR: if.then:
515-
; ATTRIBUTOR-NEXT: tail call void @fun2(ptr nonnull [[A]], ptr nonnull [[B]]) #[[ATTR16:[0-9]+]]
515+
; ATTRIBUTOR-NEXT: tail call void @fun2(ptr nonnull [[A]], ptr nonnull [[B]]) #[[ATTR15:[0-9]+]]
516516
; ATTRIBUTOR-NEXT: ret void
517517
; ATTRIBUTOR: if.else:
518-
; ATTRIBUTOR-NEXT: tail call void @fun2(ptr nonnull [[A]], ptr [[B]]) #[[ATTR16]]
518+
; ATTRIBUTOR-NEXT: tail call void @fun2(ptr nonnull [[A]], ptr [[B]]) #[[ATTR15]]
519519
; ATTRIBUTOR-NEXT: ret void
520520
;
521521
%cmp = icmp eq i8 %c, 0
@@ -550,17 +550,17 @@ define void @f17(ptr %a, i8 %c) {
550550
; FNATTRS-NEXT: ret void
551551
;
552552
; ATTRIBUTOR-LABEL: define void @f17(
553-
; ATTRIBUTOR-SAME: ptr nonnull [[A:%.*]], i8 [[C:%.*]]) #[[ATTR7]] {
553+
; ATTRIBUTOR-SAME: ptr nonnull [[A:%.*]], i8 [[C:%.*]]) #[[ATTR6]] {
554554
; ATTRIBUTOR-NEXT: [[CMP:%.*]] = icmp eq i8 [[C]], 0
555555
; ATTRIBUTOR-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
556556
; ATTRIBUTOR: if.then:
557-
; ATTRIBUTOR-NEXT: tail call void @fun0() #[[ATTR16]]
557+
; ATTRIBUTOR-NEXT: tail call void @fun0() #[[ATTR15]]
558558
; ATTRIBUTOR-NEXT: br label [[CONT:%.*]]
559559
; ATTRIBUTOR: if.else:
560-
; ATTRIBUTOR-NEXT: tail call void @fun0() #[[ATTR16]]
560+
; ATTRIBUTOR-NEXT: tail call void @fun0() #[[ATTR15]]
561561
; ATTRIBUTOR-NEXT: br label [[CONT]]
562562
; ATTRIBUTOR: cont:
563-
; ATTRIBUTOR-NEXT: tail call void @fun1(ptr nonnull [[A]]) #[[ATTR16]]
563+
; ATTRIBUTOR-NEXT: tail call void @fun1(ptr nonnull [[A]]) #[[ATTR15]]
564564
; ATTRIBUTOR-NEXT: ret void
565565
;
566566
%cmp = icmp eq i8 %c, 0
@@ -611,26 +611,26 @@ define void @f18(ptr %a, ptr %b, i8 %c) {
611611
; FNATTRS-NEXT: ret void
612612
;
613613
; ATTRIBUTOR-LABEL: define void @f18(
614-
; ATTRIBUTOR-SAME: ptr nonnull [[A:%.*]], ptr [[B:%.*]], i8 [[C:%.*]]) #[[ATTR7]] {
614+
; ATTRIBUTOR-SAME: ptr nonnull [[A:%.*]], ptr [[B:%.*]], i8 [[C:%.*]]) #[[ATTR6]] {
615615
; ATTRIBUTOR-NEXT: [[CMP1:%.*]] = icmp eq i8 [[C]], 0
616616
; ATTRIBUTOR-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
617617
; ATTRIBUTOR: if.then:
618-
; ATTRIBUTOR-NEXT: tail call void @fun0() #[[ATTR16]]
618+
; ATTRIBUTOR-NEXT: tail call void @fun0() #[[ATTR15]]
619619
; ATTRIBUTOR-NEXT: br label [[CONT:%.*]]
620620
; ATTRIBUTOR: if.else:
621-
; ATTRIBUTOR-NEXT: tail call void @fun0() #[[ATTR16]]
621+
; ATTRIBUTOR-NEXT: tail call void @fun0() #[[ATTR15]]
622622
; ATTRIBUTOR-NEXT: br label [[CONT]]
623623
; ATTRIBUTOR: cont:
624624
; ATTRIBUTOR-NEXT: [[CMP2:%.*]] = icmp eq i8 [[C]], 1
625625
; ATTRIBUTOR-NEXT: br i1 [[CMP2]], label [[CONT_THEN:%.*]], label [[CONT_ELSE:%.*]]
626626
; ATTRIBUTOR: cont.then:
627-
; ATTRIBUTOR-NEXT: tail call void @fun1(ptr nonnull [[B]]) #[[ATTR16]]
627+
; ATTRIBUTOR-NEXT: tail call void @fun1(ptr nonnull [[B]]) #[[ATTR15]]
628628
; ATTRIBUTOR-NEXT: br label [[CONT2:%.*]]
629629
; ATTRIBUTOR: cont.else:
630-
; ATTRIBUTOR-NEXT: tail call void @fun0() #[[ATTR16]]
630+
; ATTRIBUTOR-NEXT: tail call void @fun0() #[[ATTR15]]
631631
; ATTRIBUTOR-NEXT: br label [[CONT2]]
632632
; ATTRIBUTOR: cont2:
633-
; ATTRIBUTOR-NEXT: tail call void @fun1(ptr nonnull [[A]]) #[[ATTR16]]
633+
; ATTRIBUTOR-NEXT: tail call void @fun1(ptr nonnull [[A]]) #[[ATTR15]]
634634
; ATTRIBUTOR-NEXT: ret void
635635
;
636636
%cmp1 = icmp eq i8 %c, 0
@@ -674,7 +674,7 @@ define void @f19(ptr %a, ptr %b, i8 %c) {
674674
; FNATTRS-NEXT: ret void
675675
;
676676
; ATTRIBUTOR-LABEL: define void @f19(
677-
; ATTRIBUTOR-SAME: ptr [[A:%.*]], ptr nonnull [[B:%.*]], i8 [[C:%.*]]) #[[ATTR8:[0-9]+]] {
677+
; ATTRIBUTOR-SAME: ptr [[A:%.*]], ptr nonnull [[B:%.*]], i8 [[C:%.*]]) #[[ATTR7:[0-9]+]] {
678678
; ATTRIBUTOR-NEXT: br label [[LOOP_HEADER:%.*]]
679679
; ATTRIBUTOR: loop.header:
680680
; ATTRIBUTOR-NEXT: [[CMP2:%.*]] = icmp eq i8 [[C]], 0
@@ -883,7 +883,7 @@ define i8 @parent7(ptr %a) {
883883
;
884884
; ATTRIBUTOR-LABEL: define i8 @parent7(
885885
; ATTRIBUTOR-SAME: ptr nonnull [[A:%.*]]) {
886-
; ATTRIBUTOR-NEXT: [[RET:%.*]] = call i8 @use1safecall(ptr nonnull [[A]]) #[[ATTR16]]
886+
; ATTRIBUTOR-NEXT: [[RET:%.*]] = call i8 @use1safecall(ptr nonnull [[A]]) #[[ATTR15]]
887887
; ATTRIBUTOR-NEXT: call void @use1nonnull(ptr nonnull [[A]])
888888
; ATTRIBUTOR-NEXT: ret i8 [[RET]]
889889
;
@@ -915,7 +915,7 @@ define i1 @parent8(ptr %a, ptr %bogus1, ptr %b) personality ptr @esfp{
915915
; FNATTRS-NEXT: unreachable
916916
;
917917
; ATTRIBUTOR-LABEL: define i1 @parent8(
918-
; ATTRIBUTOR-SAME: ptr nonnull [[A:%.*]], ptr nocapture nofree readnone [[BOGUS1:%.*]], ptr nonnull [[B:%.*]]) #[[ATTR8]] personality ptr @esfp {
918+
; ATTRIBUTOR-SAME: ptr nonnull [[A:%.*]], ptr nocapture nofree readnone [[BOGUS1:%.*]], ptr nonnull [[B:%.*]]) #[[ATTR7]] personality ptr @esfp {
919919
; ATTRIBUTOR-NEXT: entry:
920920
; ATTRIBUTOR-NEXT: invoke void @use2nonnull(ptr nonnull [[A]], ptr nonnull [[B]])
921921
; ATTRIBUTOR-NEXT: to label [[CONT:%.*]] unwind label [[EXC:%.*]]
@@ -965,7 +965,7 @@ define ptr @gep1_no_null_opt(ptr %p) #0 {
965965
; FNATTRS-NEXT: ret ptr [[Q]]
966966
;
967967
; ATTRIBUTOR-LABEL: define ptr @gep1_no_null_opt(
968-
; ATTRIBUTOR-SAME: ptr nofree readnone [[P:%.*]]) #[[ATTR9:[0-9]+]] {
968+
; ATTRIBUTOR-SAME: ptr nofree readnone [[P:%.*]]) #[[ATTR8:[0-9]+]] {
969969
; ATTRIBUTOR-NEXT: [[Q:%.*]] = getelementptr inbounds i32, ptr [[P]], i32 1
970970
; ATTRIBUTOR-NEXT: ret ptr [[Q]]
971971
;
@@ -1006,8 +1006,8 @@ define internal ptr @g2() {
10061006
; FNATTRS-SAME: ) #[[ATTR0]] {
10071007
; FNATTRS-NEXT: ret ptr inttoptr (i64 4 to ptr)
10081008
;
1009-
; ATTRIBUTOR-LABEL: define internal ptr @g2(
1010-
; ATTRIBUTOR-SAME: ) #[[ATTR10:[0-9]+]] {
1009+
; ATTRIBUTOR-LABEL: define internal nonnull ptr @g2(
1010+
; ATTRIBUTOR-SAME: ) #[[ATTR0]] {
10111011
; ATTRIBUTOR-NEXT: ret ptr inttoptr (i64 4 to ptr)
10121012
;
10131013
ret ptr inttoptr (i64 4 to ptr)
@@ -1021,7 +1021,7 @@ define ptr @g1() {
10211021
;
10221022
; ATTRIBUTOR-LABEL: define ptr @g1(
10231023
; ATTRIBUTOR-SAME: ) #[[ATTR0]] {
1024-
; ATTRIBUTOR-NEXT: [[C:%.*]] = call ptr @g2() #[[ATTR10]]
1024+
; ATTRIBUTOR-NEXT: [[C:%.*]] = call ptr @g2() #[[ATTR16:[0-9]+]]
10251025
; ATTRIBUTOR-NEXT: ret ptr [[C]]
10261026
;
10271027
%c = call ptr @g2()
@@ -1036,8 +1036,8 @@ define internal void @called_by_weak(ptr %a) {
10361036
; FNATTRS-NEXT: ret void
10371037
;
10381038
; ATTRIBUTOR-LABEL: define internal void @called_by_weak(
1039-
; ATTRIBUTOR-SAME: ptr nocapture readnone [[A:%.*]]) #[[ATTR11:[0-9]+]] {
1040-
; ATTRIBUTOR-NEXT: call void @use_i32_ptr(ptr [[A]])
1039+
; ATTRIBUTOR-SAME: ptr nocapture nonnull readnone [[A:%.*]]) #[[ATTR10:[0-9]+]] {
1040+
; ATTRIBUTOR-NEXT: call void @use_i32_ptr(ptr nonnull [[A]]) #[[ATTR17:[0-9]+]]
10411041
; ATTRIBUTOR-NEXT: ret void
10421042
;
10431043
call void @use_i32_ptr(ptr %a)
@@ -1068,8 +1068,8 @@ define internal void @control(ptr dereferenceable(4) %a) {
10681068
; FNATTRS-NEXT: ret void
10691069
;
10701070
; ATTRIBUTOR-LABEL: define internal void @control(
1071-
; ATTRIBUTOR-SAME: ptr nocapture readnone dereferenceable(4) [[A:%.*]]) #[[ATTR11]] {
1072-
; ATTRIBUTOR-NEXT: call void @use_i32_ptr(ptr [[A]])
1071+
; ATTRIBUTOR-SAME: ptr nocapture nonnull readnone dereferenceable(4) [[A:%.*]]) #[[ATTR10]] {
1072+
; ATTRIBUTOR-NEXT: call void @use_i32_ptr(ptr [[A]]) #[[ATTR17]]
10731073
; ATTRIBUTOR-NEXT: ret void
10741074
;
10751075
call void @use_i32_ptr(ptr %a)
@@ -1083,7 +1083,7 @@ define internal void @naked(ptr dereferenceable(4) %a) naked {
10831083
; FNATTRS-NEXT: ret void
10841084
;
10851085
; ATTRIBUTOR-LABEL: define internal void @naked(
1086-
; ATTRIBUTOR-SAME: ptr dereferenceable(4) [[A:%.*]]) #[[ATTR12:[0-9]+]] {
1086+
; ATTRIBUTOR-SAME: ptr nonnull dereferenceable(4) [[A:%.*]]) #[[ATTR11:[0-9]+]] {
10871087
; ATTRIBUTOR-NEXT: call void @use_i32_ptr(ptr [[A]])
10881088
; ATTRIBUTOR-NEXT: ret void
10891089
;
@@ -1098,7 +1098,7 @@ define internal void @optnone(ptr dereferenceable(4) %a) optnone noinline {
10981098
; FNATTRS-NEXT: ret void
10991099
;
11001100
; ATTRIBUTOR-LABEL: define internal void @optnone(
1101-
; ATTRIBUTOR-SAME: ptr dereferenceable(4) [[A:%.*]]) #[[ATTR13:[0-9]+]] {
1101+
; ATTRIBUTOR-SAME: ptr nonnull dereferenceable(4) [[A:%.*]]) #[[ATTR12:[0-9]+]] {
11021102
; ATTRIBUTOR-NEXT: call void @use_i32_ptr(ptr [[A]])
11031103
; ATTRIBUTOR-NEXT: ret void
11041104
;
@@ -1135,35 +1135,20 @@ define void @make_live(ptr nonnull dereferenceable(8) %a) {
11351135
declare void @h(ptr) willreturn nounwind
11361136
declare i32 @g(ptr) willreturn nounwind
11371137
define i32 @nonnull_exec_ctx_1(ptr %a, i32 %b) {
1138-
; FNATTRS-LABEL: define i32 @nonnull_exec_ctx_1(
1139-
; FNATTRS-SAME: ptr [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7]] {
1140-
; FNATTRS-NEXT: en:
1141-
; FNATTRS-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
1142-
; FNATTRS-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
1143-
; FNATTRS: ex:
1144-
; FNATTRS-NEXT: [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]])
1145-
; FNATTRS-NEXT: ret i32 [[TMP5]]
1146-
; FNATTRS: hd:
1147-
; FNATTRS-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD]] ], [ 0, [[EN:%.*]] ]
1148-
; FNATTRS-NEXT: tail call void @h(ptr [[A]])
1149-
; FNATTRS-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
1150-
; FNATTRS-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
1151-
; FNATTRS-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
1152-
;
1153-
; ATTRIBUTOR-LABEL: define i32 @nonnull_exec_ctx_1(
1154-
; ATTRIBUTOR-SAME: ptr [[A:%.*]], i32 [[B:%.*]]) #[[ATTR8]] {
1155-
; ATTRIBUTOR-NEXT: en:
1156-
; ATTRIBUTOR-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
1157-
; ATTRIBUTOR-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
1158-
; ATTRIBUTOR: ex:
1159-
; ATTRIBUTOR-NEXT: [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]])
1160-
; ATTRIBUTOR-NEXT: ret i32 [[TMP5]]
1161-
; ATTRIBUTOR: hd:
1162-
; ATTRIBUTOR-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD]] ], [ 0, [[EN:%.*]] ]
1163-
; ATTRIBUTOR-NEXT: tail call void @h(ptr [[A]])
1164-
; ATTRIBUTOR-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
1165-
; ATTRIBUTOR-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
1166-
; ATTRIBUTOR-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
1138+
; COMMON-LABEL: define i32 @nonnull_exec_ctx_1(
1139+
; COMMON-SAME: ptr [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7:[0-9]+]] {
1140+
; COMMON-NEXT: en:
1141+
; COMMON-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
1142+
; COMMON-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
1143+
; COMMON: ex:
1144+
; COMMON-NEXT: [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]])
1145+
; COMMON-NEXT: ret i32 [[TMP5]]
1146+
; COMMON: hd:
1147+
; COMMON-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD]] ], [ 0, [[EN:%.*]] ]
1148+
; COMMON-NEXT: tail call void @h(ptr [[A]])
1149+
; COMMON-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
1150+
; COMMON-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
1151+
; COMMON-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
11671152
;
11681153
en:
11691154
%tmp3 = icmp eq i32 %b, 0
@@ -1182,39 +1167,22 @@ hd:
11821167
}
11831168

11841169
define i32 @nonnull_exec_ctx_1b(ptr %a, i32 %b) {
1185-
; FNATTRS-LABEL: define i32 @nonnull_exec_ctx_1b(
1186-
; FNATTRS-SAME: ptr [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7]] {
1187-
; FNATTRS-NEXT: en:
1188-
; FNATTRS-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
1189-
; FNATTRS-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
1190-
; FNATTRS: ex:
1191-
; FNATTRS-NEXT: [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]])
1192-
; FNATTRS-NEXT: ret i32 [[TMP5]]
1193-
; FNATTRS: hd:
1194-
; FNATTRS-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD2:%.*]] ], [ 0, [[EN:%.*]] ]
1195-
; FNATTRS-NEXT: tail call void @h(ptr [[A]])
1196-
; FNATTRS-NEXT: br label [[HD2]]
1197-
; FNATTRS: hd2:
1198-
; FNATTRS-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
1199-
; FNATTRS-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
1200-
; FNATTRS-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
1201-
;
1202-
; ATTRIBUTOR-LABEL: define i32 @nonnull_exec_ctx_1b(
1203-
; ATTRIBUTOR-SAME: ptr [[A:%.*]], i32 [[B:%.*]]) #[[ATTR8]] {
1204-
; ATTRIBUTOR-NEXT: en:
1205-
; ATTRIBUTOR-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
1206-
; ATTRIBUTOR-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
1207-
; ATTRIBUTOR: ex:
1208-
; ATTRIBUTOR-NEXT: [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]])
1209-
; ATTRIBUTOR-NEXT: ret i32 [[TMP5]]
1210-
; ATTRIBUTOR: hd:
1211-
; ATTRIBUTOR-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD2:%.*]] ], [ 0, [[EN:%.*]] ]
1212-
; ATTRIBUTOR-NEXT: tail call void @h(ptr [[A]])
1213-
; ATTRIBUTOR-NEXT: br label [[HD2]]
1214-
; ATTRIBUTOR: hd2:
1215-
; ATTRIBUTOR-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
1216-
; ATTRIBUTOR-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
1217-
; ATTRIBUTOR-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
1170+
; COMMON-LABEL: define i32 @nonnull_exec_ctx_1b(
1171+
; COMMON-SAME: ptr [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7]] {
1172+
; COMMON-NEXT: en:
1173+
; COMMON-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
1174+
; COMMON-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
1175+
; COMMON: ex:
1176+
; COMMON-NEXT: [[TMP5:%.*]] = tail call i32 @g(ptr nonnull [[A]])
1177+
; COMMON-NEXT: ret i32 [[TMP5]]
1178+
; COMMON: hd:
1179+
; COMMON-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD2:%.*]] ], [ 0, [[EN:%.*]] ]
1180+
; COMMON-NEXT: tail call void @h(ptr [[A]])
1181+
; COMMON-NEXT: br label [[HD2]]
1182+
; COMMON: hd2:
1183+
; COMMON-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
1184+
; COMMON-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
1185+
; COMMON-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
12181186
;
12191187
en:
12201188
%tmp3 = icmp eq i32 %b, 0
@@ -1252,7 +1220,7 @@ define i32 @nonnull_exec_ctx_2(ptr %a, i32 %b) willreturn nounwind {
12521220
; FNATTRS-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
12531221
;
12541222
; ATTRIBUTOR-LABEL: define i32 @nonnull_exec_ctx_2(
1255-
; ATTRIBUTOR-SAME: ptr nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7]] {
1223+
; ATTRIBUTOR-SAME: ptr nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR6]] {
12561224
; ATTRIBUTOR-NEXT: en:
12571225
; ATTRIBUTOR-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
12581226
; ATTRIBUTOR-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
@@ -1301,7 +1269,7 @@ define i32 @nonnull_exec_ctx_2b(ptr %a, i32 %b) willreturn nounwind {
13011269
; FNATTRS-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
13021270
;
13031271
; ATTRIBUTOR-LABEL: define i32 @nonnull_exec_ctx_2b(
1304-
; ATTRIBUTOR-SAME: ptr nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7]] {
1272+
; ATTRIBUTOR-SAME: ptr nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR6]] {
13051273
; ATTRIBUTOR-NEXT: en:
13061274
; ATTRIBUTOR-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
13071275
; ATTRIBUTOR-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]

0 commit comments

Comments
 (0)