Skip to content

Commit

Permalink
revert the OSR offset's changing which will be pushed by a new PR.
Browse files Browse the repository at this point in the history
  • Loading branch information
shushanhf committed Apr 19, 2024
1 parent 8fe1a21 commit c237762
Show file tree
Hide file tree
Showing 5 changed files with 8 additions and 42 deletions.
34 changes: 2 additions & 32 deletions src/coreclr/jit/codegencommon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4086,7 +4086,7 @@ void CodeGen::genEnregisterOSRArgsAndLocals()

GetEmitter()->emitIns_R_AR(ins_Load(lclTyp), size, varDsc->GetRegNum(), genFramePointerReg(), offset);

#elif defined(TARGET_ARM64)
#elif defined(TARGET_ARM64) || defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)

// Patchpoint offset is from top of Tier0 frame
//
Expand Down Expand Up @@ -4118,37 +4118,7 @@ void CodeGen::genEnregisterOSRArgsAndLocals()

genInstrWithConstant(ins_Load(lclTyp), size, varDsc->GetRegNum(), genFramePointerReg(), offset, initReg);
*pInitRegZeroed = false;
#elif defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)

// Patchpoint offset is from top of Tier0 frame
//
// We need to determine the frame-pointer relative
// offset for this variable in the osr frame.
//
// First there is no need to ajust stkOffs
// as it relative to sp within Tier0 frame

// then add the OSR frame size
//
const int osrFrameSize = genTotalFrameSize();

// then subtract OSR SP-FP delta
//
const int osrSpToFpDelta = genSPtoFPdelta();

// | => tier0 top of frame relative
// | + => osr bottom of frame (sp) relative
// | | - => osr fp relative
// | | |
const int offset = stkOffs + osrFrameSize - osrSpToFpDelta;

JITDUMP("---OSR--- V%02u (reg) Tier0 virtual offset %d OSR frame size %d OSR sp-fp "
"delta %d total offset %d (0x%x)\n",
varNum, stkOffs, osrFrameSize, osrSpToFpDelta, offset, offset);

genInstrWithConstant(ins_Load(lclTyp), size, varDsc->GetRegNum(), genFramePointerReg(), offset, initReg);
*pInitRegZeroed = false;
#endif // TARGET_LOONGARCH64 || TARGET_RISCV64
#endif // TARGET_ARM64 || TARGET_LOONGARCH64 || TARGET_RISCV64
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/jit/codegenloongarch64.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -691,7 +691,7 @@ void CodeGen::genRestoreCalleeSavedRegistersHelp(regMaskTP regsToRestoreMask, in
* |-----------------------|
* | PSP slot | // 8 bytes (omitted in NativeAOT ABI)
* |-----------------------|
* |Callee saved registers | // multiple of 8 bytes, not includting FP/RA
* |Callee saved registers | // multiple of 8 bytes, not including FP/RA
* |-----------------------|
* | Saved FP, RA | // 16 bytes
* |-----------------------|
Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/jit/codegenriscv64.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -787,7 +787,7 @@ void CodeGen::genRestoreCalleeSavedRegistersHelp(regMaskTP regsToRestoreMask, in
* |-----------------------|
* ~ alignment padding ~ // To make the whole frame 16 byte aligned
* |-----------------------|
* |Callee saved registers | // multiple of 8 bytes, not includting FP/RA
* |Callee saved registers | // multiple of 8 bytes, not including FP/RA
* |-----------------------|
* | Saved FP, RA | // 16 bytes
* |-----------------------|
Expand Down
8 changes: 1 addition & 7 deletions src/coreclr/jit/compiler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5834,18 +5834,12 @@ void Compiler::generatePatchpointInfo()
//
const int totalFrameSize = codeGen->genTotalFrameSize() + TARGET_POINTER_SIZE;
const int offsetAdjust = 0;
#elif defined(TARGET_ARM64)
#elif defined(TARGET_ARM64) || defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)
// SP is not manipulated by calls so no frame size adjustment needed.
// Local Offsets may need adjusting, if FP is at bottom of frame.
//
const int totalFrameSize = codeGen->genTotalFrameSize();
const int offsetAdjust = codeGen->genSPtoFPdelta() - totalFrameSize;
#elif defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)
// SP is not manipulated by calls so no frame size adjustment needed.
// Local Offsets are adjusted which relative to SP.
//
const int totalFrameSize = codeGen->genTotalFrameSize();
const int offsetAdjust = codeGen->genSPtoFPdelta();
#else
NYI("patchpoint info generation");
const int offsetAdjust = 0;
Expand Down
4 changes: 3 additions & 1 deletion src/coreclr/jit/lclvars.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6571,7 +6571,9 @@ void Compiler::lvaAssignVirtualFrameOffsetsToLocals()
//
if (opts.IsOSR())
{
#if !defined(TARGET_LOONGARCH64) && !defined(TARGET_RISCV64)
#if defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)
originalFrameStkOffs = info.compPatchpointInfo->TotalFrameSize();
#else
originalFrameSize = info.compPatchpointInfo->TotalFrameSize();
originalFrameStkOffs = stkOffs;
stkOffs -= originalFrameSize;
Expand Down

0 comments on commit c237762

Please sign in to comment.