1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-09 03:52:19 +02:00

Fixed backend indirect float const storage issue

This commit is contained in:
Brian Fiete 2022-02-06 11:57:40 -05:00
parent 58eec21fbf
commit 2054ea0fd8

View file

@ -10650,11 +10650,25 @@ bool BeMCContext::DoLegalization()
CheckForce(vregInfo);
}
BeMCOperand castedVReg = AllocVirtualReg(mModule->mContext->GetPrimitiveType(BeTypeCode_Int64), 2, false);
CreateDefineVReg(castedVReg, instIdx++);
auto castedVRegInfo = GetVRegInfo(castedVReg);
castedVRegInfo->mIsExpr = true;
castedVRegInfo->mRelTo = inst->mArg0;
BeMCOperand castedVReg;
if (inst->mArg0.mKind == BeMCOperandKind_VRegLoad)
{
// Maintain the load-ness (don't wrap a load)
castedVReg = AllocVirtualReg(mModule->mContext->GetPointerTo(mModule->mContext->GetPrimitiveType(BeTypeCode_Int64)), 2, false);
CreateDefineVReg(castedVReg, instIdx++);
auto castedVRegInfo = GetVRegInfo(castedVReg);
castedVRegInfo->mIsExpr = true;
castedVRegInfo->mRelTo = BeMCOperand::FromVReg(inst->mArg0.mVRegIdx);
castedVReg.mKind = BeMCOperandKind_VRegLoad;
}
else
{
castedVReg = AllocVirtualReg(mModule->mContext->GetPrimitiveType(BeTypeCode_Int64), 2, false);
CreateDefineVReg(castedVReg, instIdx++);
auto castedVRegInfo = GetVRegInfo(castedVReg);
castedVRegInfo->mIsExpr = true;
castedVRegInfo->mRelTo = inst->mArg0;
}
BeMCOperand scratchReg = AllocVirtualReg(mModule->mContext->GetPrimitiveType(BeTypeCode_Int64), 2, true);
CreateDefineVReg(scratchReg, instIdx++);