[llvm] [Spirv][HLSL] Add OpAll lowering and float vec support (PR #87952)
Nathan Gauër via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 8 11:20:07 PDT 2024
================
@@ -164,9 +178,82 @@ SPIRVGlobalRegistry::getOrCreateConstIntReg(uint64_t Val, SPIRVType *SpvType,
return std::make_tuple(Res, CI, NewInstr);
}
+std::tuple<Register, ConstantFP *, bool, unsigned>
+SPIRVGlobalRegistry::getOrCreateConstFloatReg(APFloat Val, SPIRVType *SpvType,
+ MachineIRBuilder *MIRBuilder,
+ MachineInstr *I,
+ const SPIRVInstrInfo *TII) {
+ const Type *LLVMFloatTy;
+ LLVMContext &Ctx = CurMF->getFunction().getContext();
+ unsigned BitWidth = 32;
+ if (SpvType)
+ LLVMFloatTy = getTypeForSPIRVType(SpvType);
+ else {
+ LLVMFloatTy = Type::getFloatTy(Ctx);
+ if (MIRBuilder)
+ SpvType = getOrCreateSPIRVType(LLVMFloatTy, *MIRBuilder);
+ }
+ bool NewInstr = false;
+ // Find a constant in DT or build a new one.
+ auto *const CI = ConstantFP::get(Ctx, Val);
+ Register Res = DT.find(CI, CurMF);
+ if (!Res.isValid()) {
+ if (SpvType)
+ BitWidth = getScalarOrVectorBitWidth(SpvType);
+
+ LLT LLTy = LLT::scalar(32);
----------------
Keenuts wrote:
Oh ok I see. Adding a comment to quickly say "this is expected as passing bitwidth causes a crash for now" or "TODO: handle cases where the type is not 32bit wide"
https://github.com/llvm/llvm-project/pull/87952
More information about the llvm-commits
mailing list