[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