[llvm] [SPIR-V] Rework usage of virtual registers' types and classes (PR #104104)
Farzon Lotfi via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 21 17:50:09 PDT 2024
================
@@ -1451,3 +1438,61 @@ Register SPIRVGlobalRegistry::getOrCreateUndef(MachineInstr &I,
*ST.getRegisterInfo(), *ST.getRegBankInfo());
return Res;
}
+
+const TargetRegisterClass *
+SPIRVGlobalRegistry::getRegClass(SPIRVType *SpvType) const {
+ unsigned Opcode = SpvType->getOpcode();
+ switch (Opcode) {
+ case SPIRV::OpTypeFloat:
+ return &SPIRV::fIDRegClass;
+ case SPIRV::OpTypePointer:
+ return &SPIRV::pIDRegClass;
+ case SPIRV::OpTypeVector: {
+ SPIRVType *ElemType = getSPIRVTypeForVReg(SpvType->getOperand(1).getReg());
+ unsigned ElemOpcode = ElemType ? ElemType->getOpcode() : 0;
+ if (ElemOpcode == SPIRV::OpTypeFloat)
+ return &SPIRV::vfIDRegClass;
+ if (ElemOpcode == SPIRV::OpTypePointer)
+ return &SPIRV::vpIDRegClass;
+ return &SPIRV::vIDRegClass;
+ }
+ }
+ return &SPIRV::iIDRegClass;
----------------
farzonl wrote:
maybe add an assert for `SPIRV::OpTypeInt`?
https://github.com/llvm/llvm-project/pull/104104
More information about the llvm-commits
mailing list