@@ -104,22 +104,21 @@ static bool optimizeUniformIntrinsic(IntrinsicInst &II,
104
104
static bool runUniformIntrinsicCombine (Function &F, const UniformityInfo *UI) {
105
105
Module *M = F.getParent ();
106
106
// List of AMDGPU intrinsics to optimize if their arguments are uniform.
107
- std::vector <Intrinsic::ID> Intrinsics = {
107
+ constexpr std::array <Intrinsic::ID, 4 > Intrinsics = {
108
108
Intrinsic::amdgcn_permlane64, Intrinsic::amdgcn_readfirstlane,
109
109
Intrinsic::amdgcn_readlane, Intrinsic::amdgcn_ballot};
110
110
111
111
bool IsChanged = false ;
112
112
for (Function &Func : M->functions ()) {
113
113
// Continue if intrinsic doesn't exists or not in the intrinsic list.
114
114
Intrinsic::ID IID = Func.getIntrinsicID ();
115
- if (IID == Intrinsic::not_intrinsic || !llvm::is_contained (Intrinsics, IID))
115
+ if (!llvm::is_contained (Intrinsics, IID))
116
116
continue ;
117
117
118
118
for (User *U : Func.users ()) {
119
119
if (auto *II = dyn_cast<IntrinsicInst>(U)) {
120
- if (II->getFunction () == &F) {
120
+ if (II->getFunction () == &F)
121
121
IsChanged |= optimizeUniformIntrinsic (*II, UI);
122
- }
123
122
}
124
123
}
125
124
}
@@ -135,6 +134,7 @@ class AMDGPUUniformIntrinsicCombineLegacy : public FunctionPass {
135
134
}
136
135
bool runOnFunction (Function &F) override ;
137
136
void getAnalysisUsage (AnalysisUsage &AU) const override {
137
+ AU.addRequired <UniformityInfoWrapperPass>();
138
138
AU.addPreserved <UniformityInfoWrapperPass>();
139
139
}
140
140
};
0 commit comments