Skip to content

Commit 7f4393d

Browse files
rmacnak-googleCommit Queue
authored andcommitted
[vm, compiler] Reduce spilling for CaseInsensitiveCompare and InvokeMathCFunction.
Fix LocationSummary::kNativeLeafCall for unboxed SIMD on ARM64. TEST=lib/typed_data Change-Id: Ie90d83f490818614141b1b36f96995eafff0e146 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/445966 Reviewed-by: Daco Harkes <[email protected]> Commit-Queue: Ryan Macnak <[email protected]>
1 parent aac3076 commit 7f4393d

File tree

7 files changed

+32
-24
lines changed

7 files changed

+32
-24
lines changed

runtime/vm/compiler/backend/il_arm.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5297,8 +5297,8 @@ LocationSummary* CaseInsensitiveCompareInstr::MakeLocationSummary(
52975297
Zone* zone,
52985298
bool opt) const {
52995299
const intptr_t kNumTemps = 0;
5300-
LocationSummary* summary = new (zone)
5301-
LocationSummary(zone, InputCount(), kNumTemps, LocationSummary::kCall);
5300+
LocationSummary* summary = new (zone) LocationSummary(
5301+
zone, InputCount(), kNumTemps, LocationSummary::kNativeLeafCall);
53025302
summary->set_in(0, Location::RegisterLocation(R0));
53035303
summary->set_in(1, Location::RegisterLocation(R1));
53045304
summary->set_in(2, Location::RegisterLocation(R2));
@@ -5613,8 +5613,8 @@ LocationSummary* InvokeMathCFunctionInstr::MakeLocationSummary(Zone* zone,
56135613
(TargetCPUFeatures::hardfp_supported())
56145614
? ((recognized_kind() == MethodRecognizer::kMathDoublePow) ? 1 : 0)
56155615
: 4;
5616-
LocationSummary* result = new (zone)
5617-
LocationSummary(zone, InputCount(), kNumTemps, LocationSummary::kCall);
5616+
LocationSummary* result = new (zone) LocationSummary(
5617+
zone, InputCount(), kNumTemps, LocationSummary::kNativeLeafCall);
56185618
result->set_in(0, Location::FpuRegisterLocation(Q0));
56195619
if (InputCount() == 2) {
56205620
result->set_in(1, Location::FpuRegisterLocation(Q1));

runtime/vm/compiler/backend/il_arm64.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4368,8 +4368,8 @@ LocationSummary* CaseInsensitiveCompareInstr::MakeLocationSummary(
43684368
Zone* zone,
43694369
bool opt) const {
43704370
const intptr_t kNumTemps = 0;
4371-
LocationSummary* summary = new (zone)
4372-
LocationSummary(zone, InputCount(), kNumTemps, LocationSummary::kCall);
4371+
LocationSummary* summary = new (zone) LocationSummary(
4372+
zone, InputCount(), kNumTemps, LocationSummary::kNativeLeafCall);
43734373
summary->set_in(0, Location::RegisterLocation(R0));
43744374
summary->set_in(1, Location::RegisterLocation(R1));
43754375
summary->set_in(2, Location::RegisterLocation(R2));
@@ -4696,8 +4696,8 @@ LocationSummary* InvokeMathCFunctionInstr::MakeLocationSummary(Zone* zone,
46964696
ASSERT((InputCount() == 1) || (InputCount() == 2));
46974697
const intptr_t kNumTemps =
46984698
(recognized_kind() == MethodRecognizer::kMathDoublePow) ? 1 : 0;
4699-
LocationSummary* result = new (zone)
4700-
LocationSummary(zone, InputCount(), kNumTemps, LocationSummary::kCall);
4699+
LocationSummary* result = new (zone) LocationSummary(
4700+
zone, InputCount(), kNumTemps, LocationSummary::kNativeLeafCall);
47014701
result->set_in(0, Location::FpuRegisterLocation(V0));
47024702
if (InputCount() == 2) {
47034703
result->set_in(1, Location::FpuRegisterLocation(V1));

runtime/vm/compiler/backend/il_ia32.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4372,8 +4372,8 @@ LocationSummary* CaseInsensitiveCompareInstr::MakeLocationSummary(
43724372
Zone* zone,
43734373
bool opt) const {
43744374
const intptr_t kNumTemps = 0;
4375-
LocationSummary* summary = new (zone)
4376-
LocationSummary(zone, InputCount(), kNumTemps, LocationSummary::kCall);
4375+
LocationSummary* summary = new (zone) LocationSummary(
4376+
zone, InputCount(), kNumTemps, LocationSummary::kNativeLeafCall);
43774377
summary->set_in(0, Location::RegisterLocation(EAX));
43784378
summary->set_in(1, Location::RegisterLocation(ECX));
43794379
summary->set_in(2, Location::RegisterLocation(EDX));
@@ -4707,8 +4707,8 @@ LocationSummary* InvokeMathCFunctionInstr::MakeLocationSummary(Zone* zone,
47074707
ASSERT((InputCount() == 1) || (InputCount() == 2));
47084708
const intptr_t kNumTemps =
47094709
(recognized_kind() == MethodRecognizer::kMathDoublePow) ? 4 : 1;
4710-
LocationSummary* result = new (zone)
4711-
LocationSummary(zone, InputCount(), kNumTemps, LocationSummary::kCall);
4710+
LocationSummary* result = new (zone) LocationSummary(
4711+
zone, InputCount(), kNumTemps, LocationSummary::kNativeLeafCall);
47124712
// EDI is chosen because it is callee saved so we do not need to back it
47134713
// up before calling into the runtime.
47144714
result->set_temp(0, Location::RegisterLocation(EDI));

runtime/vm/compiler/backend/il_riscv.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4288,8 +4288,8 @@ LocationSummary* CaseInsensitiveCompareInstr::MakeLocationSummary(
42884288
Zone* zone,
42894289
bool opt) const {
42904290
const intptr_t kNumTemps = 0;
4291-
LocationSummary* summary = new (zone)
4292-
LocationSummary(zone, InputCount(), kNumTemps, LocationSummary::kCall);
4291+
LocationSummary* summary = new (zone) LocationSummary(
4292+
zone, InputCount(), kNumTemps, LocationSummary::kNativeLeafCall);
42934293
summary->set_in(0, Location::RegisterLocation(A0));
42944294
summary->set_in(1, Location::RegisterLocation(A1));
42954295
summary->set_in(2, Location::RegisterLocation(A2));
@@ -4737,8 +4737,8 @@ LocationSummary* InvokeMathCFunctionInstr::MakeLocationSummary(Zone* zone,
47374737
bool opt) const {
47384738
ASSERT((InputCount() == 1) || (InputCount() == 2));
47394739
const intptr_t kNumTemps = 0;
4740-
LocationSummary* result = new (zone)
4741-
LocationSummary(zone, InputCount(), kNumTemps, LocationSummary::kCall);
4740+
LocationSummary* result = new (zone) LocationSummary(
4741+
zone, InputCount(), kNumTemps, LocationSummary::kNativeLeafCall);
47424742
result->set_in(0, Location::FpuRegisterLocation(FA0));
47434743
if (InputCount() == 2) {
47444744
result->set_in(1, Location::FpuRegisterLocation(FA1));

runtime/vm/compiler/backend/il_x64.cc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4549,8 +4549,8 @@ LocationSummary* CaseInsensitiveCompareInstr::MakeLocationSummary(
45494549
Zone* zone,
45504550
bool opt) const {
45514551
const intptr_t kNumTemps = 0;
4552-
LocationSummary* summary = new (zone)
4553-
LocationSummary(zone, InputCount(), kNumTemps, LocationSummary::kCall);
4552+
LocationSummary* summary = new (zone) LocationSummary(
4553+
zone, InputCount(), kNumTemps, LocationSummary::kNativeLeafCall);
45544554
summary->set_in(0, Location::RegisterLocation(CallingConventions::kArg1Reg));
45554555
summary->set_in(1, Location::RegisterLocation(CallingConventions::kArg2Reg));
45564556
summary->set_in(2, Location::RegisterLocation(CallingConventions::kArg3Reg));
@@ -4926,8 +4926,8 @@ LocationSummary* InvokeMathCFunctionInstr::MakeLocationSummary(Zone* zone,
49264926
if (recognized_kind() == MethodRecognizer::kMathDoublePow) {
49274927
ASSERT(InputCount() == 2);
49284928
const intptr_t kNumTemps = 4;
4929-
LocationSummary* result = new (zone)
4930-
LocationSummary(zone, InputCount(), kNumTemps, LocationSummary::kCall);
4929+
LocationSummary* result = new (zone) LocationSummary(
4930+
zone, InputCount(), kNumTemps, LocationSummary::kNativeLeafCall);
49314931
result->set_in(0, Location::FpuRegisterLocation(XMM2));
49324932
result->set_in(1, Location::FpuRegisterLocation(XMM1));
49334933
result->set_temp(0, Location::RegisterLocation(R13));
@@ -4942,8 +4942,8 @@ LocationSummary* InvokeMathCFunctionInstr::MakeLocationSummary(Zone* zone,
49424942
}
49434943
ASSERT((InputCount() == 1) || (InputCount() == 2));
49444944
const intptr_t kNumTemps = 1;
4945-
LocationSummary* result = new (zone)
4946-
LocationSummary(zone, InputCount(), kNumTemps, LocationSummary::kCall);
4945+
LocationSummary* result = new (zone) LocationSummary(
4946+
zone, InputCount(), kNumTemps, LocationSummary::kNativeLeafCall);
49474947
result->set_temp(0, Location::RegisterLocation(R13));
49484948
result->set_in(0, Location::FpuRegisterLocation(XMM0));
49494949
if (InputCount() == 2) {

runtime/vm/constants_arm64.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -548,10 +548,14 @@ const Register kDartLastVolatileCpuReg = R14;
548548
const int kDartVolatileCpuRegCount = 15;
549549
const int kDartVolatileFpuRegCount = 24;
550550

551-
const RegList kAbiVolatileFpuRegs =
551+
const RegList kAbiFullyVolatileFpuRegs =
552552
R(V0) | R(V1) | R(V2) | R(V3) | R(V4) | R(V5) | R(V6) | R(V7) | R(V16) |
553553
R(V17) | R(V18) | R(V19) | R(V20) | R(V21) | R(V22) | R(V23) | R(V24) |
554554
R(V25) | R(V26) | R(V27) | R(V28) | R(V29) | R(V30) | R(V31);
555+
const RegList kAbiPartiallyVolatileFpuRegs =
556+
R(V8) | R(V9) | R(V10) | R(V11) | R(V12) | R(V13) | R(V14) | R(V15);
557+
const RegList kAbiVolatileFpuRegs =
558+
kAbiFullyVolatileFpuRegs | kAbiPartiallyVolatileFpuRegs;
555559

556560
constexpr int kStoreBufferWrapperSize = 32;
557561

runtime/vm/simulator_arm64.cc

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1931,10 +1931,14 @@ void Simulator::ClobberVolatileRegisters() {
19311931
}
19321932

19331933
for (intptr_t i = 0; i < kNumberOfFpuRegisters; i++) {
1934-
if ((kAbiVolatileFpuRegs & (1 << i)) != 0) {
1934+
if ((kAbiFullyVolatileFpuRegs & (1 << i)) != 0) {
19351935
vregisters_[i].bits.i64[0] = icount_;
19361936
vregisters_[i].bits.i64[1] = icount_;
19371937
}
1938+
if ((kAbiPartiallyVolatileFpuRegs & (1 << i)) != 0) {
1939+
// V8-V15: Low bits preserved.
1940+
vregisters_[i].bits.i64[1] = icount_;
1941+
}
19381942
}
19391943
}
19401944

0 commit comments

Comments
 (0)