[llvm] [SPIRV] Implement handle_fromBinding intrinsic. (PR #111052)
Vyacheslav Levytskyy via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 4 03:12:08 PDT 2024
================
@@ -44,6 +44,18 @@ using ExtInstList =
namespace {
+uint64_t getUnsignedConstantValueFromReg(llvm::Register Reg,
+ const llvm::MachineRegisterInfo &MRI) {
+ llvm::SPIRVType *ConstTy = MRI.getVRegDef(Reg);
+ assert(ConstTy && ConstTy->getOpcode() == llvm::SPIRV::ASSIGN_TYPE &&
+ ConstTy->getOperand(1).isReg());
----------------
VyacheslavLevytskyy wrote:
This is even more complicated than that. Please have a look at https://github.com/llvm/llvm-project/blob/8535758efac9d7bb90fd65f883f46dbdaa8e9aa5/llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp#L1842-L1887
But if we are going to get a value from integer constant only it would be indeed something like
```
if (SPIRVType *OpDef = MRI->getVRegDef(OpReg)) {
if (OpDef->getOpcode() == SPIRV::ASSIGN_TYPE &&
OpDef->getOperand(1).isReg()) {
if (SPIRVType *RefDef = MRI->getVRegDef(OpDef->getOperand(1).getReg()))
OpDef = RefDef;
}
if (OpDef->getOpcode() == TargetOpcode::G_CONSTANT)
return OpDef->getOperand(1).getCImm();
}
report_fatal_error(...);
```
https://github.com/llvm/llvm-project/pull/111052
More information about the llvm-commits
mailing list