summaryrefslogtreecommitdiff
path: root/compiler/optimizing/intrinsics_x86_64.cc
diff options
context:
space:
mode:
author Santiago Aboy Solanes <solanes@google.com> 2024-11-07 15:15:41 +0000
committer Santiago Aboy Solanes <solanes@google.com> 2024-11-12 14:13:01 +0000
commit20cdc427d5f5875c2d58f9fde775957ad2e28cfd (patch)
tree2a4c8b3d71e54273745fe161a82905a6754013ee /compiler/optimizing/intrinsics_x86_64.cc
parent83668f93e29877e8cab86bcd25fba90412981518 (diff)
Add missing Location::kNoOutputOverlap
This can save some ParallelMove instructions. For x86(_64) all FPToFP intrinsics can add it. For RISC-V, MathSqrt can add it but the ones that call GenDoubleRound can't. Also, we can add it for MathMultiplyHigh. Test: art/test/testrunner/testrunner.py --host --64 -b --optimizing Test: LUCI run https://ci.chromium.org/b/8731845964396026257 Change-Id: I28e13caf84cd850566538efbd285c0264ce80a1a
Diffstat (limited to 'compiler/optimizing/intrinsics_x86_64.cc')
-rw-r--r--compiler/optimizing/intrinsics_x86_64.cc3
1 files changed, 2 insertions, 1 deletions
diff --git a/compiler/optimizing/intrinsics_x86_64.cc b/compiler/optimizing/intrinsics_x86_64.cc
index 5e7c3a9611..85c33d312f 100644
--- a/compiler/optimizing/intrinsics_x86_64.cc
+++ b/compiler/optimizing/intrinsics_x86_64.cc
@@ -37,6 +37,7 @@
#include "mirror/string.h"
#include "optimizing/code_generator.h"
#include "optimizing/data_type.h"
+#include "optimizing/locations.h"
#include "scoped_thread_state_change-inl.h"
#include "thread-current-inl.h"
#include "utils/x86_64/assembler_x86_64.h"
@@ -329,7 +330,7 @@ static void CreateFPToFPLocations(ArenaAllocator* allocator, HInvoke* invoke) {
LocationSummary* locations =
new (allocator) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified);
locations->SetInAt(0, Location::RequiresFpuRegister());
- locations->SetOut(Location::RequiresFpuRegister());
+ locations->SetOut(Location::RequiresFpuRegister(), Location::kNoOutputOverlap);
}
void IntrinsicLocationsBuilderX86_64::VisitMathSqrt(HInvoke* invoke) {