[llvm] 77dbd1d - [Attributor][NFCI] Manifest assumption attributes explicitly
Johannes Doerfert via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 3 11:57:47 PDT 2023
Author: Johannes Doerfert
Date: 2023-07-03T11:57:29-07:00
New Revision: 77dbd1d712729e275bb2dca586cdfbedfc063713
URL: https://github.com/llvm/llvm-project/commit/77dbd1d712729e275bb2dca586cdfbedfc063713
DIFF: https://github.com/llvm/llvm-project/commit/77dbd1d712729e275bb2dca586cdfbedfc063713.diff
LOG: [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.
Added:
Modified:
llvm/lib/Transforms/IPO/AttributorAttributes.cpp
llvm/test/Transforms/Attributor/assumes_info.ll
llvm/test/Transforms/OpenMP/remove_globalization.ll
llvm/test/Transforms/OpenMP/replace_globalization.ll
llvm/test/Transforms/OpenMP/spmdization_guarding.ll
llvm/test/Transforms/OpenMP/value-simplify-openmp-opt.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/IPO/AttributorAttributes.cpp b/llvm/lib/Transforms/IPO/AttributorAttributes.cpp
index fb1576baae0e30..db973f7f1caec0 100644
--- a/llvm/lib/Transforms/IPO/AttributorAttributes.cpp
+++ b/llvm/lib/Transforms/IPO/AttributorAttributes.cpp
@@ -11559,6 +11559,20 @@ struct AAAssumptionInfoImpl : public AAAssumptionInfo {
const DenseSet<StringRef> &Known)
: AAAssumptionInfo(IRP, A, Known) {}
+ /// See AbstractAttribute::manifest(...).
+ ChangeStatus manifest(Attributor &A) override {
+ // Don't manifest a universal set if it somehow made it here.
+ if (getKnown().isUniversal())
+ return ChangeStatus::UNCHANGED;
+
+ const IRPosition &IRP = getIRPosition();
+ return IRAttributeManifest::manifestAttrs(
+ A, IRP,
+ Attribute::get(IRP.getAnchorValue().getContext(), AssumptionAttrKey,
+ llvm::join(getAssumed().getSet(), ",")),
+ /* ForceReplace */ true);
+ }
+
bool hasAssumption(const StringRef Assumption) const override {
return isValidState() && setContains(Assumption);
}
@@ -11595,21 +11609,6 @@ struct AAAssumptionInfoFunction final : AAAssumptionInfoImpl {
: AAAssumptionInfoImpl(IRP, A,
getAssumptions(*IRP.getAssociatedFunction())) {}
- /// See AbstractAttribute::manifest(...).
- ChangeStatus manifest(Attributor &A) override {
- const auto &Assumptions = getKnown();
-
- // Don't manifest a universal set if it somehow made it here.
- if (Assumptions.isUniversal())
- return ChangeStatus::UNCHANGED;
-
- Function *AssociatedFunction = getAssociatedFunction();
-
- bool Changed = addAssumptions(*AssociatedFunction, Assumptions.getSet());
-
- return Changed ? ChangeStatus::CHANGED : ChangeStatus::UNCHANGED;
- }
-
/// See AbstractAttribute::updateImpl(...).
ChangeStatus updateImpl(Attributor &A) override {
bool Changed = false;
@@ -11652,18 +11651,6 @@ struct AAAssumptionInfoCallSite final : AAAssumptionInfoImpl {
A.getAAFor<AAAssumptionInfo>(*this, FnPos, DepClassTy::REQUIRED);
}
- /// See AbstractAttribute::manifest(...).
- ChangeStatus manifest(Attributor &A) override {
- // Don't manifest a universal set if it somehow made it here.
- if (getKnown().isUniversal())
- return ChangeStatus::UNCHANGED;
-
- CallBase &AssociatedCall = cast<CallBase>(getAssociatedValue());
- bool Changed = addAssumptions(AssociatedCall, getAssumed().getSet());
-
- return Changed ? ChangeStatus::CHANGED : ChangeStatus::UNCHANGED;
- }
-
/// See AbstractAttribute::updateImpl(...).
ChangeStatus updateImpl(Attributor &A) override {
const IRPosition &FnPos = IRPosition::function(*getAnchorScope());
diff --git a/llvm/test/Transforms/Attributor/assumes_info.ll b/llvm/test/Transforms/Attributor/assumes_info.ll
index c1045ada23c4c3..e4099b576cde15 100644
--- a/llvm/test/Transforms/Attributor/assumes_info.ll
+++ b/llvm/test/Transforms/Attributor/assumes_info.ll
@@ -6,9 +6,9 @@ define dso_local void @entry(i1 %cond) #0 {
; CHECK-LABEL: define {{[^@]+}}@entry
; CHECK-SAME: (i1 [[COND:%.*]]) #[[ATTR0:[0-9]+]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @foo(i1 [[COND]])
-; CHECK-NEXT: call void @bar()
-; CHECK-NEXT: call void @qux() #[[ATTR1:[0-9]+]]
+; CHECK-NEXT: call void @foo(i1 [[COND]]) #[[ATTR1:[0-9]+]]
+; CHECK-NEXT: call void @bar() #[[ATTR2:[0-9]+]]
+; CHECK-NEXT: call void @qux() #[[ATTR1]]
; CHECK-NEXT: ret void
;
entry:
@@ -19,17 +19,11 @@ entry:
}
define internal void @foo(i1 %cond) #1 {
-; TUNIT-LABEL: define {{[^@]+}}@foo
-; TUNIT-SAME: (i1 [[COND:%.*]]) #[[ATTR1]] {
-; TUNIT-NEXT: entry:
-; TUNIT-NEXT: call void @baz(i1 [[COND]])
-; TUNIT-NEXT: ret void
-;
-; CGSCC-LABEL: define {{[^@]+}}@foo
-; CGSCC-SAME: (i1 [[COND:%.*]]) #[[ATTR1]] {
-; CGSCC-NEXT: entry:
-; CGSCC-NEXT: call void @baz(i1 [[COND]]) #[[ATTR1]]
-; CGSCC-NEXT: ret void
+; CHECK-LABEL: define {{[^@]+}}@foo
+; CHECK-SAME: (i1 [[COND:%.*]]) #[[ATTR1]] {
+; CHECK-NEXT: entry:
+; CHECK-NEXT: call void @baz(i1 [[COND]]) #[[ATTR1]]
+; CHECK-NEXT: ret void
;
entry:
call void @baz(i1 %cond)
@@ -38,7 +32,7 @@ entry:
define internal void @bar() #2 {
; CHECK-LABEL: define {{[^@]+}}@bar
-; CHECK-SAME: () #[[ATTR2:[0-9]+]] {
+; CHECK-SAME: () #[[ATTR2]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @baz(i1 noundef false) #[[ATTR2]]
; CHECK-NEXT: ret void
@@ -55,10 +49,10 @@ define internal void @baz(i1 %Cond) {
; TUNIT-NEXT: [[TOBOOL:%.*]] = icmp ne i1 [[COND]], false
; TUNIT-NEXT: br i1 [[TOBOOL]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
; TUNIT: if.then:
-; TUNIT-NEXT: call void @baz(i1 noundef false)
+; TUNIT-NEXT: call void @baz(i1 noundef false) #[[ATTR1]]
; TUNIT-NEXT: br label [[IF_END]]
; TUNIT: if.end:
-; TUNIT-NEXT: call void @qux()
+; TUNIT-NEXT: call void @qux() #[[ATTR1]]
; TUNIT-NEXT: ret void
;
; CGSCC-LABEL: define {{[^@]+}}@baz
@@ -67,7 +61,7 @@ define internal void @baz(i1 %Cond) {
; CGSCC-NEXT: [[TOBOOL:%.*]] = icmp ne i1 [[COND]], false
; CGSCC-NEXT: br i1 [[TOBOOL]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
; CGSCC: if.then:
-; CGSCC-NEXT: call void @baz(i1 noundef false)
+; CGSCC-NEXT: call void @baz(i1 noundef false) #[[ATTR3]]
; CGSCC-NEXT: br label [[IF_END]]
; CGSCC: if.end:
; CGSCC-NEXT: call void @qux() #[[ATTR3]]
@@ -90,12 +84,12 @@ define internal void @qux() {
; TUNIT-LABEL: define {{[^@]+}}@qux
; TUNIT-SAME: () #[[ATTR1]] {
; TUNIT-NEXT: entry:
-; TUNIT-NEXT: call void @call()
+; TUNIT-NEXT: call void @call() #[[ATTR2]]
; TUNIT-NEXT: ret void
;
; CGSCC-LABEL: define {{[^@]+}}@qux() {
; CGSCC-NEXT: entry:
-; CGSCC-NEXT: call void @call()
+; CGSCC-NEXT: call void @call() #[[ATTR2]]
; CGSCC-NEXT: ret void
;
entry:
diff --git a/llvm/test/Transforms/OpenMP/remove_globalization.ll b/llvm/test/Transforms/OpenMP/remove_globalization.ll
index c837dc52b42d58..6ca5cb1177ff8a 100644
--- a/llvm/test/Transforms/OpenMP/remove_globalization.ll
+++ b/llvm/test/Transforms/OpenMP/remove_globalization.ll
@@ -45,7 +45,7 @@ define void @kernel() "kernel" {
; CHECK-NEXT: call void @foo() #[[ATTR1:[0-9]+]]
; CHECK-NEXT: call void @bar() #[[ATTR1]]
; CHECK-NEXT: call void @convert_and_move_alloca() #[[ATTR1]]
-; CHECK-NEXT: call void @unknown_no_openmp()
+; CHECK-NEXT: call void @unknown_no_openmp() #[[ATTR4:[0-9]+]]
; CHECK-NEXT: call void @__kmpc_target_deinit(ptr nonnull null, i8 1)
; CHECK-NEXT: ret void
;
@@ -56,7 +56,7 @@ define void @kernel() "kernel" {
; CHECK-DISABLED-NEXT: call void @foo() #[[ATTR1:[0-9]+]]
; CHECK-DISABLED-NEXT: call void @bar() #[[ATTR1]]
; CHECK-DISABLED-NEXT: call void @convert_and_move_alloca() #[[ATTR1]]
-; CHECK-DISABLED-NEXT: call void @unknown_no_openmp()
+; CHECK-DISABLED-NEXT: call void @unknown_no_openmp() #[[ATTR4:[0-9]+]]
; CHECK-DISABLED-NEXT: call void @__kmpc_target_deinit(ptr nonnull null, i8 1)
; CHECK-DISABLED-NEXT: ret void
;
@@ -259,7 +259,7 @@ declare void @unknown_no_openmp() "llvm.assume"="omp_no_openmp"
; CHECK: attributes #[[ATTR1]] = { nosync nounwind }
; CHECK: attributes #[[ATTR2]] = { nofree norecurse nosync nounwind memory(write) }
; CHECK: attributes #[[ATTR3:[0-9]+]] = { nosync nounwind allocsize(0) }
-; CHECK: attributes #[[ATTR4:[0-9]+]] = { "llvm.assume"="omp_no_openmp" }
+; CHECK: attributes #[[ATTR4]] = { "llvm.assume"="omp_no_openmp" }
; CHECK: attributes #[[ATTR5]] = { nounwind }
; CHECK: attributes #[[ATTR6]] = { nosync nounwind memory(write) }
;.
@@ -267,7 +267,7 @@ declare void @unknown_no_openmp() "llvm.assume"="omp_no_openmp"
; CHECK-DISABLED: attributes #[[ATTR1]] = { nosync nounwind }
; CHECK-DISABLED: attributes #[[ATTR2]] = { nofree norecurse nosync nounwind memory(write) }
; CHECK-DISABLED: attributes #[[ATTR3:[0-9]+]] = { nosync nounwind allocsize(0) }
-; CHECK-DISABLED: attributes #[[ATTR4:[0-9]+]] = { "llvm.assume"="omp_no_openmp" }
+; CHECK-DISABLED: attributes #[[ATTR4]] = { "llvm.assume"="omp_no_openmp" }
; CHECK-DISABLED: attributes #[[ATTR5]] = { nounwind }
; CHECK-DISABLED: attributes #[[ATTR6]] = { nosync nounwind memory(write) }
;.
diff --git a/llvm/test/Transforms/OpenMP/replace_globalization.ll b/llvm/test/Transforms/OpenMP/replace_globalization.ll
index c42a982f7e5caa..358511dd386d6f 100644
--- a/llvm/test/Transforms/OpenMP/replace_globalization.ll
+++ b/llvm/test/Transforms/OpenMP/replace_globalization.ll
@@ -143,7 +143,7 @@ declare void @unknown_no_openmp() "llvm.assume"="omp_no_openmp"
; CHECK-NEXT: entry:
; CHECK-NEXT: [[C:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 false)
; CHECK-NEXT: [[X:%.*]] = call align 4 ptr @__kmpc_alloc_shared(i64 4) #[[ATTR6:[0-9]+]]
-; CHECK-NEXT: call void @unknown_no_openmp()
+; CHECK-NEXT: call void @unknown_no_openmp() #[[ATTR5:[0-9]+]]
; CHECK-NEXT: call void @use.internalized(ptr nofree [[X]]) #[[ATTR7:[0-9]+]]
; CHECK-NEXT: call void @__kmpc_free_shared(ptr [[X]], i64 4) #[[ATTR8:[0-9]+]]
; 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"
; CHECK-LABEL: define {{[^@]+}}@bar
; CHECK-SAME: () #[[ATTR0]] {
; CHECK-NEXT: [[C:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 false)
-; CHECK-NEXT: call void @unknown_no_openmp()
+; CHECK-NEXT: call void @unknown_no_openmp() #[[ATTR5]]
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[C]], -1
; CHECK-NEXT: br i1 [[CMP]], label [[MASTER1:%.*]], label [[EXIT:%.*]]
; CHECK: master1:
; CHECK-NEXT: call void @use.internalized(ptr nofree addrspacecast (ptr addrspace(3) @x_shared to ptr)) #[[ATTR7]]
; CHECK-NEXT: br label [[NEXT:%.*]]
; CHECK: next:
-; CHECK-NEXT: call void @unknown_no_openmp()
+; CHECK-NEXT: call void @unknown_no_openmp() #[[ATTR5]]
; CHECK-NEXT: [[B0:%.*]] = icmp eq i32 [[C]], -1
; CHECK-NEXT: br i1 [[B0]], label [[MASTER2:%.*]], label [[EXIT]]
; CHECK: master2:
@@ -174,7 +174,7 @@ declare void @unknown_no_openmp() "llvm.assume"="omp_no_openmp"
; CHECK-LABEL: define {{[^@]+}}@baz_spmd
; CHECK-SAME: () #[[ATTR0]] {
; CHECK-NEXT: [[C:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 true)
-; CHECK-NEXT: call void @unknown_no_openmp()
+; CHECK-NEXT: call void @unknown_no_openmp() #[[ATTR5]]
; CHECK-NEXT: [[C0:%.*]] = icmp eq i32 [[C]], -1
; CHECK-NEXT: br i1 [[C0]], label [[MASTER3:%.*]], label [[EXIT:%.*]]
; CHECK: master3:
@@ -220,7 +220,7 @@ declare void @unknown_no_openmp() "llvm.assume"="omp_no_openmp"
; CHECK: attributes #[[ATTR2]] = { norecurse nosync nounwind allocsize(0) memory(read) }
; CHECK: attributes #[[ATTR3:[0-9]+]] = { nosync nounwind }
; CHECK: attributes #[[ATTR4:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
-; CHECK: attributes #[[ATTR5:[0-9]+]] = { "llvm.assume"="omp_no_openmp" }
+; CHECK: attributes #[[ATTR5]] = { "llvm.assume"="omp_no_openmp" }
; CHECK: attributes #[[ATTR6]] = { nounwind memory(read) }
; CHECK: attributes #[[ATTR7]] = { nosync nounwind memory(write) }
; CHECK: attributes #[[ATTR8]] = { nounwind }
diff --git a/llvm/test/Transforms/OpenMP/spmdization_guarding.ll b/llvm/test/Transforms/OpenMP/spmdization_guarding.ll
index eaceb26815d4c3..4dad4da6564920 100644
--- a/llvm/test/Transforms/OpenMP/spmdization_guarding.ll
+++ b/llvm/test/Transforms/OpenMP/spmdization_guarding.ll
@@ -434,8 +434,8 @@ attributes #5 = { convergent nounwind "llvm.assume"="omp_no_openmp,ompx_spmd_ame
; CHECK: attributes #[[ATTR6]] = { nounwind }
; CHECK: attributes #[[ATTR7:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
; CHECK: attributes #[[ATTR8:[0-9]+]] = { convergent nounwind }
-; CHECK: attributes #[[ATTR9]] = { nounwind willreturn }
-; CHECK: attributes #[[ATTR10]] = { convergent nounwind "llvm.assume"="omp_no_openmp,ompx_spmd_amenable" }
+; CHECK: attributes #[[ATTR9]] = { nounwind willreturn "llvm.assume"="ompx_spmd_amenable,omp_no_openmp" }
+; CHECK: attributes #[[ATTR10]] = { convergent nounwind "llvm.assume"="ompx_spmd_amenable,omp_no_openmp" }
;.
; 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" }
; CHECK-DISABLED: attributes #[[ATTR1:[0-9]+]] = { alwaysinline }
@@ -446,8 +446,8 @@ attributes #5 = { convergent nounwind "llvm.assume"="omp_no_openmp,ompx_spmd_ame
; CHECK-DISABLED: attributes #[[ATTR6]] = { nounwind }
; CHECK-DISABLED: attributes #[[ATTR7:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
; CHECK-DISABLED: attributes #[[ATTR8:[0-9]+]] = { convergent nounwind }
-; CHECK-DISABLED: attributes #[[ATTR9]] = { nounwind willreturn }
-; CHECK-DISABLED: attributes #[[ATTR10]] = { convergent nounwind "llvm.assume"="omp_no_openmp,ompx_spmd_amenable" }
+; CHECK-DISABLED: attributes #[[ATTR9]] = { nounwind willreturn "llvm.assume"="ompx_spmd_amenable,omp_no_openmp" }
+; CHECK-DISABLED: attributes #[[ATTR10]] = { convergent nounwind "llvm.assume"="ompx_spmd_amenable,omp_no_openmp" }
;.
; CHECK: [[META0:![0-9]+]] = !{i32 0, i32 42, i32 16513658, !"sequential_loop", i32 6, i32 0}
; CHECK: [[META1:![0-9]+]] = !{ptr @__omp_offloading_2a_fbfa7a_sequential_loop_l6, !"kernel", i32 1}
diff --git a/llvm/test/Transforms/OpenMP/value-simplify-openmp-opt.ll b/llvm/test/Transforms/OpenMP/value-simplify-openmp-opt.ll
index 65ee949da7fc62..b75536a617ad84 100644
--- a/llvm/test/Transforms/OpenMP/value-simplify-openmp-opt.ll
+++ b/llvm/test/Transforms/OpenMP/value-simplify-openmp-opt.ll
@@ -26,29 +26,53 @@ target triple = "amdgcn-amd-amdhsa"
;.
define void @kernel() "kernel" {
;
-; CHECK: Function Attrs: norecurse
-; CHECK-LABEL: define {{[^@]+}}@kernel
-; CHECK-SAME: () #[[ATTR0:[0-9]+]] {
-; CHECK-NEXT: [[CALL:%.*]] = call i32 @__kmpc_target_init(ptr undef, i8 1, i1 false)
-; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[CALL]], -1
-; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
-; CHECK: if.then:
-; CHECK-NEXT: br label [[IF_MERGE:%.*]]
-; CHECK: if.else:
-; CHECK-NEXT: call void @barrier() #[[ATTR6:[0-9]+]]
-; CHECK-NEXT: call void @use1(i32 undef) #[[ATTR6]]
-; CHECK-NEXT: call void @llvm.assume(i1 undef)
-; CHECK-NEXT: call void @barrier() #[[ATTR6]]
-; CHECK-NEXT: br label [[IF_MERGE]]
-; CHECK: if.merge:
-; CHECK-NEXT: call void @use1(i32 2) #[[ATTR6]]
-; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN2:%.*]], label [[IF_END:%.*]]
-; CHECK: if.then2:
-; CHECK-NEXT: call void @barrier() #[[ATTR6]]
-; CHECK-NEXT: br label [[IF_END]]
-; CHECK: if.end:
-; CHECK-NEXT: call void @__kmpc_target_deinit(ptr undef, i8 1)
-; CHECK-NEXT: ret void
+; TUNIT: Function Attrs: norecurse
+; TUNIT-LABEL: define {{[^@]+}}@kernel
+; TUNIT-SAME: () #[[ATTR0:[0-9]+]] {
+; TUNIT-NEXT: [[CALL:%.*]] = call i32 @__kmpc_target_init(ptr undef, i8 1, i1 false)
+; TUNIT-NEXT: [[CMP:%.*]] = icmp eq i32 [[CALL]], -1
+; TUNIT-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
+; TUNIT: if.then:
+; TUNIT-NEXT: br label [[IF_MERGE:%.*]]
+; TUNIT: if.else:
+; TUNIT-NEXT: call void @barrier() #[[ATTR6:[0-9]+]]
+; TUNIT-NEXT: call void @use1(i32 undef) #[[ATTR7:[0-9]+]]
+; TUNIT-NEXT: call void @llvm.assume(i1 undef)
+; TUNIT-NEXT: call void @barrier() #[[ATTR6]]
+; TUNIT-NEXT: br label [[IF_MERGE]]
+; TUNIT: if.merge:
+; TUNIT-NEXT: call void @use1(i32 2) #[[ATTR7]]
+; TUNIT-NEXT: br i1 [[CMP]], label [[IF_THEN2:%.*]], label [[IF_END:%.*]]
+; TUNIT: if.then2:
+; TUNIT-NEXT: call void @barrier() #[[ATTR6]]
+; TUNIT-NEXT: br label [[IF_END]]
+; TUNIT: if.end:
+; TUNIT-NEXT: call void @__kmpc_target_deinit(ptr undef, i8 1)
+; TUNIT-NEXT: ret void
+;
+; CGSCC: Function Attrs: norecurse
+; CGSCC-LABEL: define {{[^@]+}}@kernel
+; CGSCC-SAME: () #[[ATTR0:[0-9]+]] {
+; CGSCC-NEXT: [[CALL:%.*]] = call i32 @__kmpc_target_init(ptr undef, i8 1, i1 false)
+; CGSCC-NEXT: [[CMP:%.*]] = icmp eq i32 [[CALL]], -1
+; CGSCC-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
+; CGSCC: if.then:
+; CGSCC-NEXT: br label [[IF_MERGE:%.*]]
+; CGSCC: if.else:
+; CGSCC-NEXT: call void @barrier() #[[ATTR6:[0-9]+]]
+; CGSCC-NEXT: call void @use1(i32 undef) #[[ATTR6]]
+; CGSCC-NEXT: call void @llvm.assume(i1 undef)
+; CGSCC-NEXT: call void @barrier() #[[ATTR6]]
+; CGSCC-NEXT: br label [[IF_MERGE]]
+; CGSCC: if.merge:
+; CGSCC-NEXT: call void @use1(i32 2) #[[ATTR6]]
+; CGSCC-NEXT: br i1 [[CMP]], label [[IF_THEN2:%.*]], label [[IF_END:%.*]]
+; CGSCC: if.then2:
+; CGSCC-NEXT: call void @barrier() #[[ATTR6]]
+; CGSCC-NEXT: br label [[IF_END]]
+; CGSCC: if.end:
+; CGSCC-NEXT: call void @__kmpc_target_deinit(ptr undef, i8 1)
+; CGSCC-NEXT: ret void
;
%call = call i32 @__kmpc_target_init(ptr undef, i8 1, i1 false)
%cmp = icmp eq i32 %call, -1
@@ -161,13 +185,22 @@ declare void @llvm.assume(i1)
!4 = !{ptr @kernel3, !"kernel", i32 1}
;.
-; CHECK: attributes #[[ATTR0]] = { norecurse "kernel" }
-; CHECK: attributes #[[ATTR1]] = { "kernel" }
-; CHECK: attributes #[[ATTR2:[0-9]+]] = { nocallback norecurse nounwind "llvm.assume"="ompx_aligned_barrier" }
-; CHECK: attributes #[[ATTR3:[0-9]+]] = { nocallback norecurse nosync nounwind }
-; CHECK: attributes #[[ATTR4:[0-9]+]] = { nocallback }
-; CHECK: attributes #[[ATTR5:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
-; CHECK: attributes #[[ATTR6]] = { nounwind }
+; TUNIT: attributes #[[ATTR0]] = { norecurse "kernel" }
+; TUNIT: attributes #[[ATTR1]] = { "kernel" }
+; TUNIT: attributes #[[ATTR2:[0-9]+]] = { nocallback norecurse nounwind "llvm.assume"="ompx_aligned_barrier" }
+; TUNIT: attributes #[[ATTR3:[0-9]+]] = { nocallback norecurse nosync nounwind }
+; TUNIT: attributes #[[ATTR4:[0-9]+]] = { nocallback }
+; TUNIT: attributes #[[ATTR5:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
+; TUNIT: attributes #[[ATTR6]] = { nounwind "llvm.assume"="ompx_aligned_barrier" }
+; TUNIT: attributes #[[ATTR7]] = { nounwind }
+;.
+; CGSCC: attributes #[[ATTR0]] = { norecurse "kernel" }
+; CGSCC: attributes #[[ATTR1]] = { "kernel" }
+; CGSCC: attributes #[[ATTR2:[0-9]+]] = { nocallback norecurse nounwind "llvm.assume"="ompx_aligned_barrier" }
+; CGSCC: attributes #[[ATTR3:[0-9]+]] = { nocallback norecurse nosync nounwind }
+; CGSCC: attributes #[[ATTR4:[0-9]+]] = { nocallback }
+; CGSCC: attributes #[[ATTR5:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
+; CGSCC: attributes #[[ATTR6]] = { nounwind }
;.
; CHECK: [[META0:![0-9]+]] = !{i32 7, !"openmp", i32 50}
; CHECK: [[META1:![0-9]+]] = !{i32 7, !"openmp-device", i32 50}
More information about the llvm-commits
mailing list