Skip to content

Commit 77dbd1d

Browse files
committed
[Attributor][NFCI] Manifest assumption attributes explicitly
We had some custom manifest for assumption attributes but we use the generic manifest logic. If we later decide to curb duplication (of attributes on the call site and callee), we can do that at a single location and for all attributes. The test changes basically add known `llvm.assume` callee information to the call sites.
1 parent b672c60 commit 77dbd1d

File tree

6 files changed

+104
-90
lines changed

6 files changed

+104
-90
lines changed

llvm/lib/Transforms/IPO/AttributorAttributes.cpp

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -11559,6 +11559,20 @@ struct AAAssumptionInfoImpl : public AAAssumptionInfo {
1155911559
const DenseSet<StringRef> &Known)
1156011560
: AAAssumptionInfo(IRP, A, Known) {}
1156111561

11562+
/// See AbstractAttribute::manifest(...).
11563+
ChangeStatus manifest(Attributor &A) override {
11564+
// Don't manifest a universal set if it somehow made it here.
11565+
if (getKnown().isUniversal())
11566+
return ChangeStatus::UNCHANGED;
11567+
11568+
const IRPosition &IRP = getIRPosition();
11569+
return IRAttributeManifest::manifestAttrs(
11570+
A, IRP,
11571+
Attribute::get(IRP.getAnchorValue().getContext(), AssumptionAttrKey,
11572+
llvm::join(getAssumed().getSet(), ",")),
11573+
/* ForceReplace */ true);
11574+
}
11575+
1156211576
bool hasAssumption(const StringRef Assumption) const override {
1156311577
return isValidState() && setContains(Assumption);
1156411578
}
@@ -11595,21 +11609,6 @@ struct AAAssumptionInfoFunction final : AAAssumptionInfoImpl {
1159511609
: AAAssumptionInfoImpl(IRP, A,
1159611610
getAssumptions(*IRP.getAssociatedFunction())) {}
1159711611

11598-
/// See AbstractAttribute::manifest(...).
11599-
ChangeStatus manifest(Attributor &A) override {
11600-
const auto &Assumptions = getKnown();
11601-
11602-
// Don't manifest a universal set if it somehow made it here.
11603-
if (Assumptions.isUniversal())
11604-
return ChangeStatus::UNCHANGED;
11605-
11606-
Function *AssociatedFunction = getAssociatedFunction();
11607-
11608-
bool Changed = addAssumptions(*AssociatedFunction, Assumptions.getSet());
11609-
11610-
return Changed ? ChangeStatus::CHANGED : ChangeStatus::UNCHANGED;
11611-
}
11612-
1161311612
/// See AbstractAttribute::updateImpl(...).
1161411613
ChangeStatus updateImpl(Attributor &A) override {
1161511614
bool Changed = false;
@@ -11652,18 +11651,6 @@ struct AAAssumptionInfoCallSite final : AAAssumptionInfoImpl {
1165211651
A.getAAFor<AAAssumptionInfo>(*this, FnPos, DepClassTy::REQUIRED);
1165311652
}
1165411653

11655-
/// See AbstractAttribute::manifest(...).
11656-
ChangeStatus manifest(Attributor &A) override {
11657-
// Don't manifest a universal set if it somehow made it here.
11658-
if (getKnown().isUniversal())
11659-
return ChangeStatus::UNCHANGED;
11660-
11661-
CallBase &AssociatedCall = cast<CallBase>(getAssociatedValue());
11662-
bool Changed = addAssumptions(AssociatedCall, getAssumed().getSet());
11663-
11664-
return Changed ? ChangeStatus::CHANGED : ChangeStatus::UNCHANGED;
11665-
}
11666-
1166711654
/// See AbstractAttribute::updateImpl(...).
1166811655
ChangeStatus updateImpl(Attributor &A) override {
1166911656
const IRPosition &FnPos = IRPosition::function(*getAnchorScope());

llvm/test/Transforms/Attributor/assumes_info.ll

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ define dso_local void @entry(i1 %cond) #0 {
66
; CHECK-LABEL: define {{[^@]+}}@entry
77
; CHECK-SAME: (i1 [[COND:%.*]]) #[[ATTR0:[0-9]+]] {
88
; CHECK-NEXT: entry:
9-
; CHECK-NEXT: call void @foo(i1 [[COND]])
10-
; CHECK-NEXT: call void @bar()
11-
; CHECK-NEXT: call void @qux() #[[ATTR1:[0-9]+]]
9+
; CHECK-NEXT: call void @foo(i1 [[COND]]) #[[ATTR1:[0-9]+]]
10+
; CHECK-NEXT: call void @bar() #[[ATTR2:[0-9]+]]
11+
; CHECK-NEXT: call void @qux() #[[ATTR1]]
1212
; CHECK-NEXT: ret void
1313
;
1414
entry:
@@ -19,17 +19,11 @@ entry:
1919
}
2020

2121
define internal void @foo(i1 %cond) #1 {
22-
; TUNIT-LABEL: define {{[^@]+}}@foo
23-
; TUNIT-SAME: (i1 [[COND:%.*]]) #[[ATTR1]] {
24-
; TUNIT-NEXT: entry:
25-
; TUNIT-NEXT: call void @baz(i1 [[COND]])
26-
; TUNIT-NEXT: ret void
27-
;
28-
; CGSCC-LABEL: define {{[^@]+}}@foo
29-
; CGSCC-SAME: (i1 [[COND:%.*]]) #[[ATTR1]] {
30-
; CGSCC-NEXT: entry:
31-
; CGSCC-NEXT: call void @baz(i1 [[COND]]) #[[ATTR1]]
32-
; CGSCC-NEXT: ret void
22+
; CHECK-LABEL: define {{[^@]+}}@foo
23+
; CHECK-SAME: (i1 [[COND:%.*]]) #[[ATTR1]] {
24+
; CHECK-NEXT: entry:
25+
; CHECK-NEXT: call void @baz(i1 [[COND]]) #[[ATTR1]]
26+
; CHECK-NEXT: ret void
3327
;
3428
entry:
3529
call void @baz(i1 %cond)
@@ -38,7 +32,7 @@ entry:
3832

3933
define internal void @bar() #2 {
4034
; CHECK-LABEL: define {{[^@]+}}@bar
41-
; CHECK-SAME: () #[[ATTR2:[0-9]+]] {
35+
; CHECK-SAME: () #[[ATTR2]] {
4236
; CHECK-NEXT: entry:
4337
; CHECK-NEXT: call void @baz(i1 noundef false) #[[ATTR2]]
4438
; CHECK-NEXT: ret void
@@ -55,10 +49,10 @@ define internal void @baz(i1 %Cond) {
5549
; TUNIT-NEXT: [[TOBOOL:%.*]] = icmp ne i1 [[COND]], false
5650
; TUNIT-NEXT: br i1 [[TOBOOL]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
5751
; TUNIT: if.then:
58-
; TUNIT-NEXT: call void @baz(i1 noundef false)
52+
; TUNIT-NEXT: call void @baz(i1 noundef false) #[[ATTR1]]
5953
; TUNIT-NEXT: br label [[IF_END]]
6054
; TUNIT: if.end:
61-
; TUNIT-NEXT: call void @qux()
55+
; TUNIT-NEXT: call void @qux() #[[ATTR1]]
6256
; TUNIT-NEXT: ret void
6357
;
6458
; CGSCC-LABEL: define {{[^@]+}}@baz
@@ -67,7 +61,7 @@ define internal void @baz(i1 %Cond) {
6761
; CGSCC-NEXT: [[TOBOOL:%.*]] = icmp ne i1 [[COND]], false
6862
; CGSCC-NEXT: br i1 [[TOBOOL]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
6963
; CGSCC: if.then:
70-
; CGSCC-NEXT: call void @baz(i1 noundef false)
64+
; CGSCC-NEXT: call void @baz(i1 noundef false) #[[ATTR3]]
7165
; CGSCC-NEXT: br label [[IF_END]]
7266
; CGSCC: if.end:
7367
; CGSCC-NEXT: call void @qux() #[[ATTR3]]
@@ -90,12 +84,12 @@ define internal void @qux() {
9084
; TUNIT-LABEL: define {{[^@]+}}@qux
9185
; TUNIT-SAME: () #[[ATTR1]] {
9286
; TUNIT-NEXT: entry:
93-
; TUNIT-NEXT: call void @call()
87+
; TUNIT-NEXT: call void @call() #[[ATTR2]]
9488
; TUNIT-NEXT: ret void
9589
;
9690
; CGSCC-LABEL: define {{[^@]+}}@qux() {
9791
; CGSCC-NEXT: entry:
98-
; CGSCC-NEXT: call void @call()
92+
; CGSCC-NEXT: call void @call() #[[ATTR2]]
9993
; CGSCC-NEXT: ret void
10094
;
10195
entry:

llvm/test/Transforms/OpenMP/remove_globalization.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ define void @kernel() "kernel" {
4545
; CHECK-NEXT: call void @foo() #[[ATTR1:[0-9]+]]
4646
; CHECK-NEXT: call void @bar() #[[ATTR1]]
4747
; CHECK-NEXT: call void @convert_and_move_alloca() #[[ATTR1]]
48-
; CHECK-NEXT: call void @unknown_no_openmp()
48+
; CHECK-NEXT: call void @unknown_no_openmp() #[[ATTR4:[0-9]+]]
4949
; CHECK-NEXT: call void @__kmpc_target_deinit(ptr nonnull null, i8 1)
5050
; CHECK-NEXT: ret void
5151
;
@@ -56,7 +56,7 @@ define void @kernel() "kernel" {
5656
; CHECK-DISABLED-NEXT: call void @foo() #[[ATTR1:[0-9]+]]
5757
; CHECK-DISABLED-NEXT: call void @bar() #[[ATTR1]]
5858
; CHECK-DISABLED-NEXT: call void @convert_and_move_alloca() #[[ATTR1]]
59-
; CHECK-DISABLED-NEXT: call void @unknown_no_openmp()
59+
; CHECK-DISABLED-NEXT: call void @unknown_no_openmp() #[[ATTR4:[0-9]+]]
6060
; CHECK-DISABLED-NEXT: call void @__kmpc_target_deinit(ptr nonnull null, i8 1)
6161
; CHECK-DISABLED-NEXT: ret void
6262
;
@@ -259,15 +259,15 @@ declare void @unknown_no_openmp() "llvm.assume"="omp_no_openmp"
259259
; CHECK: attributes #[[ATTR1]] = { nosync nounwind }
260260
; CHECK: attributes #[[ATTR2]] = { nofree norecurse nosync nounwind memory(write) }
261261
; CHECK: attributes #[[ATTR3:[0-9]+]] = { nosync nounwind allocsize(0) }
262-
; CHECK: attributes #[[ATTR4:[0-9]+]] = { "llvm.assume"="omp_no_openmp" }
262+
; CHECK: attributes #[[ATTR4]] = { "llvm.assume"="omp_no_openmp" }
263263
; CHECK: attributes #[[ATTR5]] = { nounwind }
264264
; CHECK: attributes #[[ATTR6]] = { nosync nounwind memory(write) }
265265
;.
266266
; CHECK-DISABLED: attributes #[[ATTR0]] = { "kernel" }
267267
; CHECK-DISABLED: attributes #[[ATTR1]] = { nosync nounwind }
268268
; CHECK-DISABLED: attributes #[[ATTR2]] = { nofree norecurse nosync nounwind memory(write) }
269269
; CHECK-DISABLED: attributes #[[ATTR3:[0-9]+]] = { nosync nounwind allocsize(0) }
270-
; CHECK-DISABLED: attributes #[[ATTR4:[0-9]+]] = { "llvm.assume"="omp_no_openmp" }
270+
; CHECK-DISABLED: attributes #[[ATTR4]] = { "llvm.assume"="omp_no_openmp" }
271271
; CHECK-DISABLED: attributes #[[ATTR5]] = { nounwind }
272272
; CHECK-DISABLED: attributes #[[ATTR6]] = { nosync nounwind memory(write) }
273273
;.

llvm/test/Transforms/OpenMP/replace_globalization.ll

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ declare void @unknown_no_openmp() "llvm.assume"="omp_no_openmp"
143143
; CHECK-NEXT: entry:
144144
; CHECK-NEXT: [[C:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 false)
145145
; CHECK-NEXT: [[X:%.*]] = call align 4 ptr @__kmpc_alloc_shared(i64 4) #[[ATTR6:[0-9]+]]
146-
; CHECK-NEXT: call void @unknown_no_openmp()
146+
; CHECK-NEXT: call void @unknown_no_openmp() #[[ATTR5:[0-9]+]]
147147
; CHECK-NEXT: call void @use.internalized(ptr nofree [[X]]) #[[ATTR7:[0-9]+]]
148148
; CHECK-NEXT: call void @__kmpc_free_shared(ptr [[X]], i64 4) #[[ATTR8:[0-9]+]]
149149
; CHECK-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
@@ -153,14 +153,14 @@ declare void @unknown_no_openmp() "llvm.assume"="omp_no_openmp"
153153
; CHECK-LABEL: define {{[^@]+}}@bar
154154
; CHECK-SAME: () #[[ATTR0]] {
155155
; CHECK-NEXT: [[C:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 false)
156-
; CHECK-NEXT: call void @unknown_no_openmp()
156+
; CHECK-NEXT: call void @unknown_no_openmp() #[[ATTR5]]
157157
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[C]], -1
158158
; CHECK-NEXT: br i1 [[CMP]], label [[MASTER1:%.*]], label [[EXIT:%.*]]
159159
; CHECK: master1:
160160
; CHECK-NEXT: call void @use.internalized(ptr nofree addrspacecast (ptr addrspace(3) @x_shared to ptr)) #[[ATTR7]]
161161
; CHECK-NEXT: br label [[NEXT:%.*]]
162162
; CHECK: next:
163-
; CHECK-NEXT: call void @unknown_no_openmp()
163+
; CHECK-NEXT: call void @unknown_no_openmp() #[[ATTR5]]
164164
; CHECK-NEXT: [[B0:%.*]] = icmp eq i32 [[C]], -1
165165
; CHECK-NEXT: br i1 [[B0]], label [[MASTER2:%.*]], label [[EXIT]]
166166
; CHECK: master2:
@@ -174,7 +174,7 @@ declare void @unknown_no_openmp() "llvm.assume"="omp_no_openmp"
174174
; CHECK-LABEL: define {{[^@]+}}@baz_spmd
175175
; CHECK-SAME: () #[[ATTR0]] {
176176
; CHECK-NEXT: [[C:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 true)
177-
; CHECK-NEXT: call void @unknown_no_openmp()
177+
; CHECK-NEXT: call void @unknown_no_openmp() #[[ATTR5]]
178178
; CHECK-NEXT: [[C0:%.*]] = icmp eq i32 [[C]], -1
179179
; CHECK-NEXT: br i1 [[C0]], label [[MASTER3:%.*]], label [[EXIT:%.*]]
180180
; CHECK: master3:
@@ -220,7 +220,7 @@ declare void @unknown_no_openmp() "llvm.assume"="omp_no_openmp"
220220
; CHECK: attributes #[[ATTR2]] = { norecurse nosync nounwind allocsize(0) memory(read) }
221221
; CHECK: attributes #[[ATTR3:[0-9]+]] = { nosync nounwind }
222222
; CHECK: attributes #[[ATTR4:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
223-
; CHECK: attributes #[[ATTR5:[0-9]+]] = { "llvm.assume"="omp_no_openmp" }
223+
; CHECK: attributes #[[ATTR5]] = { "llvm.assume"="omp_no_openmp" }
224224
; CHECK: attributes #[[ATTR6]] = { nounwind memory(read) }
225225
; CHECK: attributes #[[ATTR7]] = { nosync nounwind memory(write) }
226226
; CHECK: attributes #[[ATTR8]] = { nounwind }

llvm/test/Transforms/OpenMP/spmdization_guarding.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -434,8 +434,8 @@ attributes #5 = { convergent nounwind "llvm.assume"="omp_no_openmp,ompx_spmd_ame
434434
; CHECK: attributes #[[ATTR6]] = { nounwind }
435435
; CHECK: attributes #[[ATTR7:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
436436
; CHECK: attributes #[[ATTR8:[0-9]+]] = { convergent nounwind }
437-
; CHECK: attributes #[[ATTR9]] = { nounwind willreturn }
438-
; CHECK: attributes #[[ATTR10]] = { convergent nounwind "llvm.assume"="omp_no_openmp,ompx_spmd_amenable" }
437+
; CHECK: attributes #[[ATTR9]] = { nounwind willreturn "llvm.assume"="ompx_spmd_amenable,omp_no_openmp" }
438+
; CHECK: attributes #[[ATTR10]] = { convergent nounwind "llvm.assume"="ompx_spmd_amenable,omp_no_openmp" }
439439
;.
440440
; CHECK-DISABLED: attributes #[[ATTR0]] = { convergent norecurse nounwind "frame-pointer"="all" "kernel" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="sm_53" "target-features"="+ptx32,+sm_53" }
441441
; CHECK-DISABLED: attributes #[[ATTR1:[0-9]+]] = { alwaysinline }
@@ -446,8 +446,8 @@ attributes #5 = { convergent nounwind "llvm.assume"="omp_no_openmp,ompx_spmd_ame
446446
; CHECK-DISABLED: attributes #[[ATTR6]] = { nounwind }
447447
; CHECK-DISABLED: attributes #[[ATTR7:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
448448
; CHECK-DISABLED: attributes #[[ATTR8:[0-9]+]] = { convergent nounwind }
449-
; CHECK-DISABLED: attributes #[[ATTR9]] = { nounwind willreturn }
450-
; CHECK-DISABLED: attributes #[[ATTR10]] = { convergent nounwind "llvm.assume"="omp_no_openmp,ompx_spmd_amenable" }
449+
; CHECK-DISABLED: attributes #[[ATTR9]] = { nounwind willreturn "llvm.assume"="ompx_spmd_amenable,omp_no_openmp" }
450+
; CHECK-DISABLED: attributes #[[ATTR10]] = { convergent nounwind "llvm.assume"="ompx_spmd_amenable,omp_no_openmp" }
451451
;.
452452
; CHECK: [[META0:![0-9]+]] = !{i32 0, i32 42, i32 16513658, !"sequential_loop", i32 6, i32 0}
453453
; CHECK: [[META1:![0-9]+]] = !{ptr @__omp_offloading_2a_fbfa7a_sequential_loop_l6, !"kernel", i32 1}

llvm/test/Transforms/OpenMP/value-simplify-openmp-opt.ll

Lines changed: 63 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -26,29 +26,53 @@ target triple = "amdgcn-amd-amdhsa"
2626
;.
2727
define void @kernel() "kernel" {
2828
;
29-
; CHECK: Function Attrs: norecurse
30-
; CHECK-LABEL: define {{[^@]+}}@kernel
31-
; CHECK-SAME: () #[[ATTR0:[0-9]+]] {
32-
; CHECK-NEXT: [[CALL:%.*]] = call i32 @__kmpc_target_init(ptr undef, i8 1, i1 false)
33-
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[CALL]], -1
34-
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
35-
; CHECK: if.then:
36-
; CHECK-NEXT: br label [[IF_MERGE:%.*]]
37-
; CHECK: if.else:
38-
; CHECK-NEXT: call void @barrier() #[[ATTR6:[0-9]+]]
39-
; CHECK-NEXT: call void @use1(i32 undef) #[[ATTR6]]
40-
; CHECK-NEXT: call void @llvm.assume(i1 undef)
41-
; CHECK-NEXT: call void @barrier() #[[ATTR6]]
42-
; CHECK-NEXT: br label [[IF_MERGE]]
43-
; CHECK: if.merge:
44-
; CHECK-NEXT: call void @use1(i32 2) #[[ATTR6]]
45-
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN2:%.*]], label [[IF_END:%.*]]
46-
; CHECK: if.then2:
47-
; CHECK-NEXT: call void @barrier() #[[ATTR6]]
48-
; CHECK-NEXT: br label [[IF_END]]
49-
; CHECK: if.end:
50-
; CHECK-NEXT: call void @__kmpc_target_deinit(ptr undef, i8 1)
51-
; CHECK-NEXT: ret void
29+
; TUNIT: Function Attrs: norecurse
30+
; TUNIT-LABEL: define {{[^@]+}}@kernel
31+
; TUNIT-SAME: () #[[ATTR0:[0-9]+]] {
32+
; TUNIT-NEXT: [[CALL:%.*]] = call i32 @__kmpc_target_init(ptr undef, i8 1, i1 false)
33+
; TUNIT-NEXT: [[CMP:%.*]] = icmp eq i32 [[CALL]], -1
34+
; TUNIT-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
35+
; TUNIT: if.then:
36+
; TUNIT-NEXT: br label [[IF_MERGE:%.*]]
37+
; TUNIT: if.else:
38+
; TUNIT-NEXT: call void @barrier() #[[ATTR6:[0-9]+]]
39+
; TUNIT-NEXT: call void @use1(i32 undef) #[[ATTR7:[0-9]+]]
40+
; TUNIT-NEXT: call void @llvm.assume(i1 undef)
41+
; TUNIT-NEXT: call void @barrier() #[[ATTR6]]
42+
; TUNIT-NEXT: br label [[IF_MERGE]]
43+
; TUNIT: if.merge:
44+
; TUNIT-NEXT: call void @use1(i32 2) #[[ATTR7]]
45+
; TUNIT-NEXT: br i1 [[CMP]], label [[IF_THEN2:%.*]], label [[IF_END:%.*]]
46+
; TUNIT: if.then2:
47+
; TUNIT-NEXT: call void @barrier() #[[ATTR6]]
48+
; TUNIT-NEXT: br label [[IF_END]]
49+
; TUNIT: if.end:
50+
; TUNIT-NEXT: call void @__kmpc_target_deinit(ptr undef, i8 1)
51+
; TUNIT-NEXT: ret void
52+
;
53+
; CGSCC: Function Attrs: norecurse
54+
; CGSCC-LABEL: define {{[^@]+}}@kernel
55+
; CGSCC-SAME: () #[[ATTR0:[0-9]+]] {
56+
; CGSCC-NEXT: [[CALL:%.*]] = call i32 @__kmpc_target_init(ptr undef, i8 1, i1 false)
57+
; CGSCC-NEXT: [[CMP:%.*]] = icmp eq i32 [[CALL]], -1
58+
; CGSCC-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
59+
; CGSCC: if.then:
60+
; CGSCC-NEXT: br label [[IF_MERGE:%.*]]
61+
; CGSCC: if.else:
62+
; CGSCC-NEXT: call void @barrier() #[[ATTR6:[0-9]+]]
63+
; CGSCC-NEXT: call void @use1(i32 undef) #[[ATTR6]]
64+
; CGSCC-NEXT: call void @llvm.assume(i1 undef)
65+
; CGSCC-NEXT: call void @barrier() #[[ATTR6]]
66+
; CGSCC-NEXT: br label [[IF_MERGE]]
67+
; CGSCC: if.merge:
68+
; CGSCC-NEXT: call void @use1(i32 2) #[[ATTR6]]
69+
; CGSCC-NEXT: br i1 [[CMP]], label [[IF_THEN2:%.*]], label [[IF_END:%.*]]
70+
; CGSCC: if.then2:
71+
; CGSCC-NEXT: call void @barrier() #[[ATTR6]]
72+
; CGSCC-NEXT: br label [[IF_END]]
73+
; CGSCC: if.end:
74+
; CGSCC-NEXT: call void @__kmpc_target_deinit(ptr undef, i8 1)
75+
; CGSCC-NEXT: ret void
5276
;
5377
%call = call i32 @__kmpc_target_init(ptr undef, i8 1, i1 false)
5478
%cmp = icmp eq i32 %call, -1
@@ -161,13 +185,22 @@ declare void @llvm.assume(i1)
161185
!4 = !{ptr @kernel3, !"kernel", i32 1}
162186

163187
;.
164-
; CHECK: attributes #[[ATTR0]] = { norecurse "kernel" }
165-
; CHECK: attributes #[[ATTR1]] = { "kernel" }
166-
; CHECK: attributes #[[ATTR2:[0-9]+]] = { nocallback norecurse nounwind "llvm.assume"="ompx_aligned_barrier" }
167-
; CHECK: attributes #[[ATTR3:[0-9]+]] = { nocallback norecurse nosync nounwind }
168-
; CHECK: attributes #[[ATTR4:[0-9]+]] = { nocallback }
169-
; CHECK: attributes #[[ATTR5:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
170-
; CHECK: attributes #[[ATTR6]] = { nounwind }
188+
; TUNIT: attributes #[[ATTR0]] = { norecurse "kernel" }
189+
; TUNIT: attributes #[[ATTR1]] = { "kernel" }
190+
; TUNIT: attributes #[[ATTR2:[0-9]+]] = { nocallback norecurse nounwind "llvm.assume"="ompx_aligned_barrier" }
191+
; TUNIT: attributes #[[ATTR3:[0-9]+]] = { nocallback norecurse nosync nounwind }
192+
; TUNIT: attributes #[[ATTR4:[0-9]+]] = { nocallback }
193+
; TUNIT: attributes #[[ATTR5:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
194+
; TUNIT: attributes #[[ATTR6]] = { nounwind "llvm.assume"="ompx_aligned_barrier" }
195+
; TUNIT: attributes #[[ATTR7]] = { nounwind }
196+
;.
197+
; CGSCC: attributes #[[ATTR0]] = { norecurse "kernel" }
198+
; CGSCC: attributes #[[ATTR1]] = { "kernel" }
199+
; CGSCC: attributes #[[ATTR2:[0-9]+]] = { nocallback norecurse nounwind "llvm.assume"="ompx_aligned_barrier" }
200+
; CGSCC: attributes #[[ATTR3:[0-9]+]] = { nocallback norecurse nosync nounwind }
201+
; CGSCC: attributes #[[ATTR4:[0-9]+]] = { nocallback }
202+
; CGSCC: attributes #[[ATTR5:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
203+
; CGSCC: attributes #[[ATTR6]] = { nounwind }
171204
;.
172205
; CHECK: [[META0:![0-9]+]] = !{i32 7, !"openmp", i32 50}
173206
; CHECK: [[META1:![0-9]+]] = !{i32 7, !"openmp-device", i32 50}

0 commit comments

Comments
 (0)