Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions src/coreclr/jit/codegen.h
Original file line number Diff line number Diff line change
Expand Up @@ -341,11 +341,8 @@ class CodeGen final : public CodeGenInterface
// Prolog functions and data (there are a few exceptions for more generally used things)
//

void genEstablishFramePointer(int delta, bool reportUnwindData);
void genHomeRegisterParams(regNumber initReg, bool* initRegStillZeroed);
#ifdef TARGET_WASM
void genHomeRegisterParamsOutsideProlog();
#endif
void genEstablishFramePointer(int delta, bool reportUnwindData);
void genHomeRegisterParams(regNumber initReg, bool* initRegStillZeroed);
regMaskTP genGetParameterHomingTempRegisterCandidates();

var_types genParamStackType(LclVarDsc* dsc, const ABIPassingSegment& seg);
Expand Down
20 changes: 8 additions & 12 deletions src/coreclr/jit/codegenarm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1603,7 +1603,7 @@ void CodeGen::genEmitHelperCall(unsigned helper, int argSize, emitAttr retSize,
//
void CodeGen::genProfilingEnterCallback(regNumber initReg, bool* pInitRegZeroed)
{
assert(m_compiler->compGeneratingProlog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog());

// Give profiler a chance to back out of hooking this method
if (!m_compiler->compIsProfilerHookNeeded())
Expand Down Expand Up @@ -1771,7 +1771,7 @@ void CodeGen::genOSRHandleTier0CalleeSavedRegistersAndFrame()
//
void CodeGen::genEstablishFramePointer(int delta, bool reportUnwindData)
{
assert(m_compiler->compGeneratingProlog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog());

assert(arm_Valid_Imm_For_Add_SP(delta));
GetEmitter()->emitIns_R_R_I(INS_add, EA_PTRSIZE, REG_FPBASE, REG_SPBASE, delta);
Expand Down Expand Up @@ -1805,7 +1805,7 @@ void CodeGen::genEstablishFramePointer(int delta, bool reportUnwindData)
//
void CodeGen::genAllocLclFrame(unsigned frameSize, regNumber initReg, bool* pInitRegZeroed, regMaskTP maskArgRegsLiveIn)
{
assert(m_compiler->compGeneratingProlog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog());

if (frameSize == 0)
{
Expand Down Expand Up @@ -1906,7 +1906,7 @@ void CodeGen::genPopFltRegs(regMaskTP regMask)
//
void CodeGen::genFreeLclFrame(unsigned frameSize, /* IN OUT */ bool* pUnwindStarted)
{
assert(m_compiler->compGeneratingEpilog);
assert(GetEmitter()->emitGeneratingEpilogOrFuncletEpilog());

if (frameSize == 0)
return;
Expand Down Expand Up @@ -2015,7 +2015,7 @@ void CodeGen::genMov32RelocatableImmediate(emitAttr size, BYTE* addr, regNumber
*/
regMaskTP CodeGen::genStackAllocRegisterMask(unsigned frameSize, regMaskTP maskCalleeSavedFloat)
{
assert(m_compiler->compGeneratingProlog || m_compiler->compGeneratingEpilog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog() || GetEmitter()->emitGeneratingEpilogOrFuncletEpilog());

// We can't do this optimization with callee saved floating point registers because
// the stack would be allocated in a wrong spot.
Expand Down Expand Up @@ -2104,7 +2104,7 @@ void CodeGen::instGen_MemoryBarrier(BarrierKind barrierKind)

bool CodeGen::genCanUsePopToReturn(regMaskTP maskPopRegsInt, bool jmpEpilog)
{
assert(m_compiler->compGeneratingEpilog);
assert(GetEmitter()->emitGeneratingEpilogOrFuncletEpilog());

if (!jmpEpilog && regSet.rsMaskPreSpillRegs(true) == RBM_NONE)
return true;
Expand All @@ -2114,7 +2114,7 @@ bool CodeGen::genCanUsePopToReturn(regMaskTP maskPopRegsInt, bool jmpEpilog)

void CodeGen::genPopCalleeSavedRegisters(bool jmpEpilog)
{
assert(m_compiler->compGeneratingEpilog);
assert(GetEmitter()->emitGeneratingEpilogOrFuncletEpilog());

regMaskTP maskPopRegs = regSet.rsGetModifiedCalleeSavedRegsMask();
regMaskTP maskPopRegsFloat = maskPopRegs & RBM_ALLFLOAT;
Expand Down Expand Up @@ -2225,8 +2225,6 @@ void CodeGen::genFuncletProlog(BasicBlock* block)
assert(block != NULL);
assert(m_compiler->bbIsFuncletBeg(block));

ScopedSetVariable<bool> _setGeneratingProlog(&m_compiler->compGeneratingProlog, true);

gcInfo.gcResetForBB();

m_compiler->unwindBegProlog();
Expand Down Expand Up @@ -2287,8 +2285,6 @@ void CodeGen::genFuncletEpilog(BasicBlock* /* block */)
printf("*************** In genFuncletEpilog()\n");
#endif

ScopedSetVariable<bool> _setGeneratingEpilog(&m_compiler->compGeneratingEpilog, true);

// Just as for the main function, we delay starting the unwind codes until we have
// an instruction which we know needs an unwind code. This is to support code like
// this:
Expand Down Expand Up @@ -2422,7 +2418,7 @@ void CodeGen::genCaptureFuncletPrologEpilogInfo()
//
void CodeGen::genZeroInitFrameUsingBlockInit(int untrLclHi, int untrLclLo, regNumber initReg, bool* pInitRegZeroed)
{
assert(m_compiler->compGeneratingProlog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog());
assert(genUseBlockInit);
assert(untrLclHi > untrLclLo);

Expand Down
16 changes: 6 additions & 10 deletions src/coreclr/jit/codegenarm64.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

void CodeGen::genPopCalleeSavedRegistersAndFreeLclFrame(bool jmpEpilog)
{
assert(m_compiler->compGeneratingEpilog);
assert(GetEmitter()->emitGeneratingEpilogOrFuncletEpilog());

regMaskTP rsRestoreRegs = regSet.rsGetModifiedCalleeSavedRegsMask();

Expand Down Expand Up @@ -1387,8 +1387,6 @@ void CodeGen::genFuncletProlog(BasicBlock* block)
assert(block != NULL);
assert(m_compiler->bbIsFuncletBeg(block));

ScopedSetVariable<bool> _setGeneratingProlog(&m_compiler->compGeneratingProlog, true);

gcInfo.gcResetForBB();

m_compiler->unwindBegProlog();
Expand Down Expand Up @@ -1553,8 +1551,6 @@ void CodeGen::genFuncletEpilog(BasicBlock* /* block */)
printf("*************** In genFuncletEpilog()\n");
#endif

ScopedSetVariable<bool> _setGeneratingEpilog(&m_compiler->compGeneratingEpilog, true);

bool unwindStarted = false;

if (!unwindStarted)
Expand Down Expand Up @@ -1883,7 +1879,7 @@ void CodeGen::genCaptureFuncletPrologEpilogInfo()
//
void CodeGen::genZeroInitFrameUsingBlockInit(int untrLclHi, int untrLclLo, regNumber initReg, bool* pInitRegZeroed)
{
assert(m_compiler->compGeneratingProlog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog());
assert(genUseBlockInit);
assert(untrLclHi > untrLclLo);

Expand Down Expand Up @@ -5437,7 +5433,7 @@ void CodeGen::genStoreLclTypeSimd12(GenTreeLclVarCommon* treeNode)
//
void CodeGen::genOSRHandleTier0CalleeSavedRegistersAndFrame()
{
assert(m_compiler->compGeneratingProlog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog());
assert(m_compiler->opts.IsOSR());
assert(m_compiler->funCurrentFunc()->funKind == FuncKind::FUNC_ROOT);

Expand Down Expand Up @@ -5543,7 +5539,7 @@ void CodeGen::genOSRHandleTier0CalleeSavedRegistersAndFrame()
//
void CodeGen::genProfilingEnterCallback(regNumber initReg, bool* pInitRegZeroed)
{
assert(m_compiler->compGeneratingProlog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog());

if (!m_compiler->compIsProfilerHookNeeded())
{
Expand Down Expand Up @@ -5631,7 +5627,7 @@ void CodeGen::genProfilingLeaveCallback(unsigned helper)
//
void CodeGen::genEstablishFramePointer(int delta, bool reportUnwindData)
{
assert(m_compiler->compGeneratingProlog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog());

if (delta == 0)
{
Expand Down Expand Up @@ -5673,7 +5669,7 @@ void CodeGen::genEstablishFramePointer(int delta, bool reportUnwindData)
//
void CodeGen::genAllocLclFrame(unsigned frameSize, regNumber initReg, bool* pInitRegZeroed, regMaskTP maskArgRegsLiveIn)
{
assert(m_compiler->compGeneratingProlog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog());

if (frameSize == 0)
{
Expand Down
6 changes: 2 additions & 4 deletions src/coreclr/jit/codegenarmarch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -580,7 +580,7 @@ void CodeGen::genCodeForTreeNode(GenTree* treeNode)
//
void CodeGen::genSetGSSecurityCookie(regNumber initReg, bool* pInitRegZeroed)
{
assert(m_compiler->compGeneratingProlog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog());

if (!m_compiler->getNeedsGSSecurityCookie())
{
Expand Down Expand Up @@ -4308,7 +4308,7 @@ void CodeGen::genSIMDSplitReturn(GenTree* src, const ReturnTypeDesc* retTypeDesc
//
void CodeGen::genPushCalleeSavedRegisters(regNumber initReg, bool* pInitRegZeroed)
{
assert(m_compiler->compGeneratingProlog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog());

#ifdef TARGET_ARM64
// Probe large frames now, if necessary, since genPushCalleeSavedRegisters() will allocate the frame. Note that
Expand Down Expand Up @@ -4943,8 +4943,6 @@ void CodeGen::genFnEpilog(BasicBlock* block)
printf("*************** In genFnEpilog()\n");
#endif // DEBUG

ScopedSetVariable<bool> _setGeneratingEpilog(&m_compiler->compGeneratingEpilog, true);

VarSetOps::Assign(m_compiler, gcInfo.gcVarPtrSetCur, GetEmitter()->emitInitGCrefVars);
gcInfo.gcRegGCrefSetCur = GetEmitter()->emitInitGCrefRegs;
gcInfo.gcRegByrefSetCur = GetEmitter()->emitInitByrefRegs;
Expand Down
11 changes: 5 additions & 6 deletions src/coreclr/jit/codegencommon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3577,7 +3577,7 @@ void CodeGen::genEnregisterIncomingStackArgs()
//
assert(!m_compiler->opts.IsOSR());

assert(m_compiler->compGeneratingProlog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog());

unsigned varNum = 0;

Expand Down Expand Up @@ -3685,7 +3685,7 @@ void CodeGen::genEnregisterIncomingStackArgs()
*/
void CodeGen::genCheckUseBlockInit()
{
assert(!m_compiler->compGeneratingProlog);
assert(!GetEmitter()->emitGeneratingPrologOrFuncletProlog());

unsigned initStkLclCnt = 0; // The number of int-sized stack local variables that need to be initialized (variables
// larger than int count for more than 1).
Expand Down Expand Up @@ -3909,7 +3909,7 @@ void CodeGen::genCheckUseBlockInit()
*/
void CodeGen::genZeroInitFltRegs(const regMaskTP& initFltRegs, const regMaskTP& initDblRegs, const regNumber& initReg)
{
assert(m_compiler->compGeneratingProlog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog());

// The first float/double reg that is initialized to 0. So they can be used to
// initialize the remaining registers.
Expand Down Expand Up @@ -4036,7 +4036,7 @@ regNumber CodeGen::genGetZeroReg(regNumber initReg, bool* pInitRegZeroed)
// 'false' if initReg was set to a non-zero value, and left unchanged if initReg was not touched.
void CodeGen::genZeroInitFrame(int untrLclHi, int untrLclLo, regNumber initReg, bool* pInitRegZeroed)
{
assert(m_compiler->compGeneratingProlog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog());

if (genUseBlockInit)
{
Expand Down Expand Up @@ -4479,7 +4479,7 @@ void CodeGen::genHomeStackPartOfSplitParameter(regNumber initReg, bool* initRegS

void CodeGen::genReportGenericContextArg(regNumber initReg, bool* pInitRegZeroed)
{
assert(m_compiler->compGeneratingProlog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog());

const bool reportArg = m_compiler->lvaReportParamTypeArg();

Expand Down Expand Up @@ -5021,7 +5021,6 @@ void CodeGen::genFinalizeFrame()
*/
void CodeGen::genFnProlog()
{
ScopedSetVariable<bool> _setGeneratingProlog(&m_compiler->compGeneratingProlog, true);

m_compiler->funSetCurrentFunc(0);

Expand Down
12 changes: 1 addition & 11 deletions src/coreclr/jit/codegenlinear.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -458,19 +458,9 @@ void CodeGen::genCodeForBlock(BasicBlock* block)
}
#endif

#ifdef TARGET_WASM
// genHomeRegisterParams can generate arbitrary amounts of code on Wasm, so
// we have moved it out of the prolog to the first basic block in order to
// work around the restriction that the prolog can only be one insGroup.
if (block->IsFirst())
{
genHomeRegisterParamsOutsideProlog();
}
#endif

#ifndef TARGET_WASM // TODO-WASM: enable genPoisonFrame
// Emit poisoning into the init BB that comes right after prolog.
// We cannot emit this code in the prolog as it might make the prolog too large.
// We cannot emit this code in the prolog as it might use a helper call that kills argument regs.
if (m_compiler->compShouldPoisonFrame() && block->IsFirst())
{
genPoisonFrame(newLiveRegSet);
Expand Down
20 changes: 7 additions & 13 deletions src/coreclr/jit/codegenloongarch64.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,7 @@ void CodeGen::genRestoreCalleeSavedRegistersHelp(regMaskTP regsToRestoreMask,
//
void CodeGen::genOSRHandleTier0CalleeSavedRegistersAndFrame()
{
assert(m_compiler->compGeneratingProlog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog());
assert(m_compiler->opts.IsOSR());
assert(m_compiler->funCurrentFunc()->funKind == FuncKind::FUNC_ROOT);

Expand Down Expand Up @@ -445,8 +445,6 @@ void CodeGen::genFuncletProlog(BasicBlock* block)
assert(block != NULL);
assert(m_compiler->bbIsFuncletBeg(block));

ScopedSetVariable<bool> _setGeneratingProlog(&m_compiler->compGeneratingProlog, true);

gcInfo.gcResetForBB();

m_compiler->unwindBegProlog();
Expand Down Expand Up @@ -522,8 +520,6 @@ void CodeGen::genFuncletEpilog(BasicBlock* /* block */)
}
#endif

ScopedSetVariable<bool> _setGeneratingEpilog(&m_compiler->compGeneratingEpilog, true);

m_compiler->unwindBegEpilog();

int frameSize = genFuncletInfo.fiSpDelta;
Expand Down Expand Up @@ -626,8 +622,6 @@ void CodeGen::genFnEpilog(BasicBlock* block)
}
#endif // DEBUG

ScopedSetVariable<bool> _setGeneratingEpilog(&m_compiler->compGeneratingEpilog, true);

VarSetOps::Assign(m_compiler, gcInfo.gcVarPtrSetCur, GetEmitter()->emitInitGCrefVars);
gcInfo.gcRegGCrefSetCur = GetEmitter()->emitInitGCrefRegs;
gcInfo.gcRegByrefSetCur = GetEmitter()->emitInitByrefRegs;
Expand Down Expand Up @@ -4326,7 +4320,7 @@ void CodeGen::genCodeForTreeNode(GenTree* treeNode)
//
void CodeGen::genSetGSSecurityCookie(regNumber initReg, bool* pInitRegZeroed)
{
assert(m_compiler->compGeneratingProlog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog());

if (!m_compiler->getNeedsGSSecurityCookie())
{
Expand Down Expand Up @@ -6151,7 +6145,7 @@ void CodeGen::genLeaInstruction(GenTreeAddrMode* lea)

void CodeGen::genEstablishFramePointer(int delta, bool reportUnwindData)
{
assert(m_compiler->compGeneratingProlog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog());

if (delta == 0)
{
Expand Down Expand Up @@ -6184,7 +6178,7 @@ void CodeGen::genEstablishFramePointer(int delta, bool reportUnwindData)
//
void CodeGen::genAllocLclFrame(unsigned frameSize, regNumber initReg, bool* pInitRegZeroed, regMaskTP maskArgRegsLiveIn)
{
assert(m_compiler->compGeneratingProlog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog());

if (frameSize == 0)
{
Expand Down Expand Up @@ -6536,7 +6530,7 @@ void CodeGen::instGen_MemoryBarrier(BarrierKind barrierKind)
*/
void CodeGen::genPushCalleeSavedRegisters(regNumber initReg, bool* pInitRegZeroed)
{
assert(m_compiler->compGeneratingProlog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog());

regMaskTP rsPushRegs = regSet.rsGetModifiedCalleeSavedRegsMask();

Expand Down Expand Up @@ -6659,7 +6653,7 @@ void CodeGen::genPushCalleeSavedRegisters(regNumber initReg, bool* pInitRegZeroe

void CodeGen::genPopCalleeSavedRegisters(bool jmpEpilog)
{
assert(m_compiler->compGeneratingEpilog);
assert(GetEmitter()->emitGeneratingEpilogOrFuncletEpilog());

regMaskTP regsToRestoreMask = regSet.rsGetModifiedCalleeSavedRegsMask();

Expand Down Expand Up @@ -6769,7 +6763,7 @@ void CodeGen::genPopCalleeSavedRegisters(bool jmpEpilog)
//
void CodeGen::genProfilingEnterCallback(regNumber initReg, bool* pInitRegZeroed)
{
assert(m_compiler->compGeneratingProlog);
assert(GetEmitter()->emitGeneratingPrologOrFuncletProlog());

if (!m_compiler->compIsProfilerHookNeeded())
{
Expand Down
Loading
Loading