Skip to content
Merged
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
2 changes: 1 addition & 1 deletion src/coreclr/jit/lsra.h
Original file line number Diff line number Diff line change
Expand Up @@ -1066,7 +1066,7 @@ class LinearScan : public LinearScanInterface
regMaskTP getKillSetForCall(GenTreeCall* call);
regMaskTP getKillSetForModDiv(GenTreeOp* tree);
regMaskTP getKillSetForBlockStore(GenTreeBlk* blkNode);
regMaskTP getKillSetForReturn();
regMaskTP getKillSetForReturn(GenTree* returnNode);
regMaskTP getKillSetForProfilerHook();
#ifdef FEATURE_HW_INTRINSICS
regMaskTP getKillSetForHWIntrinsic(GenTreeHWIntrinsic* node);
Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/jit/lsraarm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -468,7 +468,7 @@ int LinearScan::BuildNode(GenTree* tree)

case GT_RETURN:
srcCount = BuildReturn(tree);
killMask = getKillSetForReturn();
killMask = getKillSetForReturn(tree);
BuildKills(tree, killMask);
break;

Expand Down
4 changes: 2 additions & 2 deletions src/coreclr/jit/lsraarm64.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -780,7 +780,7 @@ int LinearScan::BuildNode(GenTree* tree)

case GT_RETURN:
srcCount = BuildReturn(tree);
killMask = getKillSetForReturn();
killMask = getKillSetForReturn(tree);
BuildKills(tree, killMask);
break;

Expand All @@ -789,7 +789,7 @@ int LinearScan::BuildNode(GenTree* tree)
BuildUse(tree->gtGetOp1(), RBM_SWIFT_ERROR.GetIntRegSet());
// Plus one for error register
srcCount = BuildReturn(tree) + 1;
killMask = getKillSetForReturn();
killMask = getKillSetForReturn(tree);
BuildKills(tree, killMask);
break;
#endif // SWIFT_SUPPORT
Expand Down
25 changes: 20 additions & 5 deletions src/coreclr/jit/lsrabuild.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// Licensed to the .NET Foundation under one or more agreements.
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Expand Down Expand Up @@ -1003,14 +1004,28 @@ regMaskTP LinearScan::getKillSetForHWIntrinsic(GenTreeHWIntrinsic* node)
// getKillSetForReturn: Determine the liveness kill set for a return node.
//
// Arguments:
// NONE (this kill set is independent of the details of the specific return.)
// returnNode - the return node
//
// Return Value: a register mask of the registers killed
//
regMaskTP LinearScan::getKillSetForReturn()
regMaskTP LinearScan::getKillSetForReturn(GenTree* returnNode)
{
return compiler->compIsProfilerHookNeeded() ? compiler->compHelperCallKillSet(CORINFO_HELP_PROF_FCN_LEAVE)
: RBM_NONE;
regMaskTP killSet = RBM_NONE;

if (compiler->compIsProfilerHookNeeded())
{
killSet = compiler->compHelperCallKillSet(CORINFO_HELP_PROF_FCN_LEAVE);

#if defined(TARGET_ARM)
// For arm methods with no return value R0 is also trashed.
if (returnNode->TypeIs(TYP_VOID))
{
killSet |= RBM_R0;
}
#endif
}

return killSet;
}

//------------------------------------------------------------------------
Expand Down Expand Up @@ -1091,7 +1106,7 @@ regMaskTP LinearScan::getKillSetForNode(GenTree* tree)
// more details.
case GT_RETURN:
case GT_SWIFT_ERROR_RET:
killMask = getKillSetForReturn();
killMask = getKillSetForReturn(tree);
break;

case GT_PROF_HOOK:
Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/jit/lsraloongarch64.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ int LinearScan::BuildNode(GenTree* tree)

case GT_RETURN:
srcCount = BuildReturn(tree);
killMask = getKillSetForReturn();
killMask = getKillSetForReturn(tree);
BuildKills(tree, killMask);
break;

Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/jit/lsrariscv64.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ int LinearScan::BuildNode(GenTree* tree)

case GT_RETURN:
srcCount = BuildReturn(tree);
killMask = getKillSetForReturn();
killMask = getKillSetForReturn(tree);
BuildKills(tree, killMask);
break;

Expand Down
4 changes: 2 additions & 2 deletions src/coreclr/jit/lsraxarch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ int LinearScan::BuildNode(GenTree* tree)

case GT_RETURN:
srcCount = BuildReturn(tree);
killMask = getKillSetForReturn();
killMask = getKillSetForReturn(tree);
BuildKills(tree, killMask);
break;

Expand All @@ -203,7 +203,7 @@ int LinearScan::BuildNode(GenTree* tree)
BuildUse(tree->gtGetOp1(), RBM_SWIFT_ERROR.GetIntRegSet());
// Plus one for error register
srcCount = BuildReturn(tree) + 1;
killMask = getKillSetForReturn();
killMask = getKillSetForReturn(tree);
BuildKills(tree, killMask);
break;
#endif // SWIFT_SUPPORT
Expand Down
Loading