[llvm] [DXIL] Add GroupMemoryBarrierWithGroupSync intrinsic (PR #114349)
Adam Yang via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 6 13:03:55 PST 2024
================
@@ -106,17 +106,41 @@ class OpLowerer {
return false;
}
- [[nodiscard]]
- bool replaceFunctionWithOp(Function &F, dxil::OpCode DXILOp) {
+ struct ArgSelect {
+ enum class Type {
+ Index,
+ I8,
+ I32,
+ };
+ Type Type = Type::Index;
+ int Value = -1;
+ };
+
+ [[nodiscard]] bool replaceFunctionWithOp(Function &F, dxil::OpCode DXILOp,
+ ArrayRef<ArgSelect> ArgSelects) {
bool IsVectorArgExpansion = isVectorArgExpansion(F);
return replaceFunction(F, [&](CallInst *CI) -> Error {
- SmallVector<Value *> Args;
OpBuilder.getIRB().SetInsertPoint(CI);
- if (IsVectorArgExpansion) {
- SmallVector<Value *> NewArgs = argVectorFlatten(CI, OpBuilder.getIRB());
- Args.append(NewArgs.begin(), NewArgs.end());
- } else
+ SmallVector<Value *> Args;
+ if (ArgSelects.size()) {
+ for (const ArgSelect &A : ArgSelects) {
+ switch (A.Type) {
+ case ArgSelect::Type::Index:
+ Args.push_back(CI->getArgOperand(A.Value));
+ break;
+ case ArgSelect::Type::I8:
+ Args.push_back(OpBuilder.getIRB().getInt8((uint8_t)A.Value));
+ break;
+ case ArgSelect::Type::I32:
+ Args.push_back(OpBuilder.getIRB().getInt32(A.Value));
+ break;
+ }
----------------
adam-yang wrote:
@inbelic The default warning was here. It warned that there is a default even though the switch already has all the cases covered.
https://github.com/llvm/llvm-project/pull/114349
More information about the llvm-commits
mailing list