@@ -41,12 +41,10 @@ using namespace llvm;
41
41
using namespace llvm ::AMDGPU;
42
42
using namespace llvm ::PatternMatch;
43
43
44
- // / Tracks uniformity of newly created instructions.
45
- using UniformityTracker = ValueMap<const Value *, bool >;
46
-
47
44
// / Wrapper for querying uniformity info that first checks new instructions.
48
- static bool isDivergentUseWithNew (const Use &U, const UniformityInfo &UI,
49
- const UniformityTracker &Tracker) {
45
+ static bool
46
+ isDivergentUseWithNew (const Use &U, const UniformityInfo &UI,
47
+ const ValueMap<const Value *, bool > &Tracker) {
50
48
Value *V = U.get ();
51
49
if (auto It = Tracker.find (V); It != Tracker.end ())
52
50
return !It->second ; // divergent if marked false
@@ -56,7 +54,7 @@ static bool isDivergentUseWithNew(const Use &U, const UniformityInfo &UI,
56
54
// / Optimizes uniform intrinsics.
57
55
static bool optimizeUniformIntrinsic (IntrinsicInst &II,
58
56
const UniformityInfo &UI,
59
- UniformityTracker &Tracker) {
57
+ ValueMap< const Value *, bool > &Tracker) {
60
58
llvm::Intrinsic::ID IID = II.getIntrinsicID ();
61
59
62
60
switch (IID) {
@@ -77,10 +75,6 @@ static bool optimizeUniformIntrinsic(IntrinsicInst &II,
77
75
return false ;
78
76
LLVM_DEBUG (dbgs () << " Found uniform ballot intrinsic: " << II << ' \n ' );
79
77
80
- // If there are no ICmp users, return early.
81
- if (none_of (II.users (), [](User *U) { return isa<ICmpInst>(U); }))
82
- return false ;
83
-
84
78
bool Changed = false ;
85
79
for (User *U : make_early_inc_range (II.users ())) {
86
80
if (auto *ICmp = dyn_cast<ICmpInst>(U)) {
@@ -122,7 +116,7 @@ static bool optimizeUniformIntrinsic(IntrinsicInst &II,
122
116
// / Iterate over intrinsics in the module to optimise.
123
117
static bool runUniformIntrinsicCombine (Module &M, ModuleAnalysisManager &AM) {
124
118
bool IsChanged = false ;
125
- UniformityTracker Tracker;
119
+ ValueMap< const Value *, bool > Tracker;
126
120
127
121
FunctionAnalysisManager &FAM =
128
122
AM.getResult <FunctionAnalysisManagerModuleProxy>(M).getManager ();
@@ -140,9 +134,6 @@ static bool runUniformIntrinsicCombine(Module &M, ModuleAnalysisManager &AM) {
140
134
for (User *U : F.users ()) {
141
135
auto *II = cast<IntrinsicInst>(U);
142
136
Function *ParentF = II->getFunction ();
143
- if (ParentF->isDeclaration ())
144
- continue ;
145
-
146
137
const auto &UI = FAM.getResult <UniformityInfoAnalysis>(*ParentF);
147
138
IsChanged |= optimizeUniformIntrinsic (*II, UI, Tracker);
148
139
}
0 commit comments