26class SPIRVStripConvergentIntrinsics :
public FunctionPass {
30 SPIRVStripConvergentIntrinsics() : FunctionPass(ID) {}
37 auto CleanupIntrinsic = [&](IntrinsicInst *
II) {
38 if (
II->getIntrinsicID() != Intrinsic::experimental_convergence_entry &&
39 II->getIntrinsicID() != Intrinsic::experimental_convergence_loop &&
40 II->getIntrinsicID() != Intrinsic::experimental_convergence_anchor)
50 auto CleanupCall = [&](CallInst *CI) {
57 NewCall->copyMetadata(*CI);
58 CI->replaceAllUsesWith(NewCall);
62 for (BasicBlock &BB :
F) {
63 for (Instruction &
I : BB) {
65 if (CleanupIntrinsic(
II))
81char SPIRVStripConvergentIntrinsics::ID = 0;
83 "SPIRV strip convergent intrinsics",
false,
false)
86 return new SPIRVStripConvergentIntrinsics();
ReachingDefInfo InstSet & ToRemove
static bool runOnFunction(Function &F, bool PostInlining)
uint64_t IntrinsicInst * II
#define INITIALIZE_PASS(passName, arg, name, cfg, analysis)
static LLVM_ABI CallBase * removeOperandBundle(CallBase *CB, uint32_t ID, InsertPosition InsertPt=nullptr)
Create a clone of CB with operand bundle ID removed.
FunctionPass class - This class is used to implement most global optimizations.
static LLVM_ABI UndefValue * get(Type *T)
Static factory methods - Return an 'undef' object of the specified type.
@ OB
OB - OneByte - Set if this instruction has a one byte opcode.
This is an optimization pass for GlobalISel generic memory operations.
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
FunctionPass * createSPIRVStripConvergenceIntrinsicsPass()