@@ -41,12 +41,10 @@ using namespace llvm;
4141using namespace llvm ::AMDGPU;
4242using namespace llvm ::PatternMatch;
4343
44- // / Tracks uniformity of newly created instructions.
45- using UniformityTracker = ValueMap<const Value *, bool >;
46-
4744// / 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) {
5048 Value *V = U.get ();
5149 if (auto It = Tracker.find (V); It != Tracker.end ())
5250 return !It->second ; // divergent if marked false
@@ -56,7 +54,7 @@ static bool isDivergentUseWithNew(const Use &U, const UniformityInfo &UI,
5654// / Optimizes uniform intrinsics.
5755static bool optimizeUniformIntrinsic (IntrinsicInst &II,
5856 const UniformityInfo &UI,
59- UniformityTracker &Tracker) {
57+ ValueMap< const Value *, bool > &Tracker) {
6058 llvm::Intrinsic::ID IID = II.getIntrinsicID ();
6159
6260 switch (IID) {
@@ -77,10 +75,6 @@ static bool optimizeUniformIntrinsic(IntrinsicInst &II,
7775 return false ;
7876 LLVM_DEBUG (dbgs () << " Found uniform ballot intrinsic: " << II << ' \n ' );
7977
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-
8478 bool Changed = false ;
8579 for (User *U : make_early_inc_range (II.users ())) {
8680 if (auto *ICmp = dyn_cast<ICmpInst>(U)) {
@@ -122,7 +116,7 @@ static bool optimizeUniformIntrinsic(IntrinsicInst &II,
122116// / Iterate over intrinsics in the module to optimise.
123117static bool runUniformIntrinsicCombine (Module &M, ModuleAnalysisManager &AM) {
124118 bool IsChanged = false ;
125- UniformityTracker Tracker;
119+ ValueMap< const Value *, bool > Tracker;
126120
127121 FunctionAnalysisManager &FAM =
128122 AM.getResult <FunctionAnalysisManagerModuleProxy>(M).getManager ();
@@ -140,9 +134,6 @@ static bool runUniformIntrinsicCombine(Module &M, ModuleAnalysisManager &AM) {
140134 for (User *U : F.users ()) {
141135 auto *II = cast<IntrinsicInst>(U);
142136 Function *ParentF = II->getFunction ();
143- if (ParentF->isDeclaration ())
144- continue ;
145-
146137 const auto &UI = FAM.getResult <UniformityInfoAnalysis>(*ParentF);
147138 IsChanged |= optimizeUniformIntrinsic (*II, UI, Tracker);
148139 }
0 commit comments