MCPcopy Create free account
hub / github.com/beefytech/Beef / Prepare

Method Prepare

IDEHelper/Backend/BeMCContext.cpp:872–930  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

870}
871
872void BeMCColorizer::Prepare()
873{
874 mReserveParamRegs = false;
875 mNodes.Resize(mContext->mVRegInfo.size());
876
877 for (int vregIdx = 0; vregIdx < (int)mNodes.size(); vregIdx++)
878 {
879 auto node = &mNodes[vregIdx];
880 node->Prepare();
881 //node->mActualVRegIdx = vregIdx;
882 auto vregInfo = mContext->mVRegInfo[vregIdx];
883 if ((vregInfo->mIsRetVal) && (mContext->mCompositeRetVRegIdx != -1) && (vregIdx != mContext->mCompositeRetVRegIdx))
884 continue;
885 if (vregInfo->mRelTo)
886 {
887 BF_ASSERT(vregInfo->mIsExpr);
888
889 /*if ((vregInfo->IsDirectRelTo()) && (vregInfo->mRelTo.mKind == BeMCOperandKind_VReg))
890 node->mActualVRegIdx = vregInfo->mRelTo.mVRegIdx; */
891
892 //node->mWantsReg = false;
893 //vregInfo->mReg = X64Reg_None;
894 //continue;
895 }
896
897 if ((vregInfo->mRefCount > 0) || (vregInfo->mIsRetVal))
898 {
899 node->mWantsReg = ((vregInfo->mType->mSize > 0) && (!vregInfo->mRegNumPinned) && (!vregInfo->mSpilled) &&
900 (!vregInfo->mIsExpr) && (!vregInfo->mForceMem) && (vregInfo->mFrameOffset == INT_MIN));
901 }
902
903 // if (vregInfo->mIsRetVal)
904 // node->mWantsReg = true;
905 if (!node->mWantsReg)
906 vregInfo->mReg = X64Reg_None;
907 vregInfo->mVRegAffinity = -1;
908 /*if (vregInfo->mForceReg)
909 {
910 // We can't have reg restrictions when we have forceReg set
911 BF_ASSERT(!vregInfo->mDisableR12);
912 BF_ASSERT(!vregInfo->mDisableRDX);
913 }*/
914 if (vregInfo->mDisableR11)
915 node->AdjustRegCost(X64Reg_R11, 0x0FFFFFFF);
916 if (vregInfo->mDisableR12)
917 node->AdjustRegCost(X64Reg_R12, 0x0FFFFFFF);
918 if (vregInfo->mDisableR13)
919 node->AdjustRegCost(X64Reg_R13, 0x0FFFFFFF);
920 if (vregInfo->mDisableRAX)
921 node->AdjustRegCost(X64Reg_RAX, 0x0FFFFFFF);
922 if (vregInfo->mDisableRDX)
923 node->AdjustRegCost(X64Reg_RDX, 0x0FFFFFFF);
924 if (vregInfo->mDisableEx)
925 {
926 for (int i = X64Reg_RSI; i <= X64Reg_R15; i++)
927 node->AdjustRegCost((X64CPURegister)i, 0x0FFFFFFF);
928 }
929 }

Callers 1

DoRegAssignPassMethod · 0.45

Calls 3

AdjustRegCostMethod · 0.80
ResizeMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected