File tree Expand file tree Collapse file tree 7 files changed +28
-13
lines changed
Expand file tree Collapse file tree 7 files changed +28
-13
lines changed Original file line number Diff line number Diff line change @@ -1066,7 +1066,7 @@ class LinearScan : public LinearScanInterface
10661066 regMaskTP getKillSetForCall (GenTreeCall* call);
10671067 regMaskTP getKillSetForModDiv (GenTreeOp* tree);
10681068 regMaskTP getKillSetForBlockStore (GenTreeBlk* blkNode);
1069- regMaskTP getKillSetForReturn ();
1069+ regMaskTP getKillSetForReturn (GenTree* returnNode );
10701070 regMaskTP getKillSetForProfilerHook ();
10711071#ifdef FEATURE_HW_INTRINSICS
10721072 regMaskTP getKillSetForHWIntrinsic (GenTreeHWIntrinsic* node);
Original file line number Diff line number Diff line change @@ -468,7 +468,7 @@ int LinearScan::BuildNode(GenTree* tree)
468468
469469 case GT_RETURN:
470470 srcCount = BuildReturn (tree);
471- killMask = getKillSetForReturn ();
471+ killMask = getKillSetForReturn (tree );
472472 BuildKills (tree, killMask);
473473 break ;
474474
Original file line number Diff line number Diff line change @@ -780,7 +780,7 @@ int LinearScan::BuildNode(GenTree* tree)
780780
781781 case GT_RETURN:
782782 srcCount = BuildReturn (tree);
783- killMask = getKillSetForReturn ();
783+ killMask = getKillSetForReturn (tree );
784784 BuildKills (tree, killMask);
785785 break ;
786786
@@ -789,7 +789,7 @@ int LinearScan::BuildNode(GenTree* tree)
789789 BuildUse (tree->gtGetOp1 (), RBM_SWIFT_ERROR.GetIntRegSet ());
790790 // Plus one for error register
791791 srcCount = BuildReturn (tree) + 1 ;
792- killMask = getKillSetForReturn ();
792+ killMask = getKillSetForReturn (tree );
793793 BuildKills (tree, killMask);
794794 break ;
795795#endif // SWIFT_SUPPORT
Original file line number Diff line number Diff line change 11// Licensed to the .NET Foundation under one or more agreements.
2+ // Licensed to the .NET Foundation under one or more agreements.
23// The .NET Foundation licenses this file to you under the MIT license.
34
45/* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
@@ -1003,14 +1004,28 @@ regMaskTP LinearScan::getKillSetForHWIntrinsic(GenTreeHWIntrinsic* node)
10031004// getKillSetForReturn: Determine the liveness kill set for a return node.
10041005//
10051006// Arguments:
1006- // NONE (this kill set is independent of the details of the specific return.)
1007+ // returnNode - the return node
10071008//
10081009// Return Value: a register mask of the registers killed
10091010//
1010- regMaskTP LinearScan::getKillSetForReturn ()
1011+ regMaskTP LinearScan::getKillSetForReturn (GenTree* returnNode )
10111012{
1012- return compiler->compIsProfilerHookNeeded () ? compiler->compHelperCallKillSet (CORINFO_HELP_PROF_FCN_LEAVE)
1013- : RBM_NONE;
1013+ regMaskTP killSet = RBM_NONE;
1014+
1015+ if (compiler->compIsProfilerHookNeeded ())
1016+ {
1017+ killSet = compiler->compHelperCallKillSet (CORINFO_HELP_PROF_FCN_LEAVE);
1018+
1019+ #if defined(TARGET_ARM)
1020+ // For arm methods with no return value R0 is also trashed.
1021+ if (returnNode->TypeIs (TYP_VOID))
1022+ {
1023+ killSet |= RBM_R0;
1024+ }
1025+ #endif
1026+ }
1027+
1028+ return killSet;
10141029}
10151030
10161031// ------------------------------------------------------------------------
@@ -1091,7 +1106,7 @@ regMaskTP LinearScan::getKillSetForNode(GenTree* tree)
10911106 // more details.
10921107 case GT_RETURN:
10931108 case GT_SWIFT_ERROR_RET:
1094- killMask = getKillSetForReturn ();
1109+ killMask = getKillSetForReturn (tree );
10951110 break ;
10961111
10971112 case GT_PROF_HOOK:
Original file line number Diff line number Diff line change @@ -169,7 +169,7 @@ int LinearScan::BuildNode(GenTree* tree)
169169
170170 case GT_RETURN:
171171 srcCount = BuildReturn (tree);
172- killMask = getKillSetForReturn ();
172+ killMask = getKillSetForReturn (tree );
173173 BuildKills (tree, killMask);
174174 break ;
175175
Original file line number Diff line number Diff line change @@ -173,7 +173,7 @@ int LinearScan::BuildNode(GenTree* tree)
173173
174174 case GT_RETURN:
175175 srcCount = BuildReturn (tree);
176- killMask = getKillSetForReturn ();
176+ killMask = getKillSetForReturn (tree );
177177 BuildKills (tree, killMask);
178178 break ;
179179
Original file line number Diff line number Diff line change @@ -194,7 +194,7 @@ int LinearScan::BuildNode(GenTree* tree)
194194
195195 case GT_RETURN:
196196 srcCount = BuildReturn (tree);
197- killMask = getKillSetForReturn ();
197+ killMask = getKillSetForReturn (tree );
198198 BuildKills (tree, killMask);
199199 break ;
200200
@@ -203,7 +203,7 @@ int LinearScan::BuildNode(GenTree* tree)
203203 BuildUse (tree->gtGetOp1 (), RBM_SWIFT_ERROR.GetIntRegSet ());
204204 // Plus one for error register
205205 srcCount = BuildReturn (tree) + 1 ;
206- killMask = getKillSetForReturn ();
206+ killMask = getKillSetForReturn (tree );
207207 BuildKills (tree, killMask);
208208 break ;
209209#endif // SWIFT_SUPPORT
You can’t perform that action at this time.
0 commit comments