summaryrefslogtreecommitdiff
path: root/compiler/optimizing/optimizing_compiler.cc
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2023-07-20 13:12:29 +0000
committer VladimĂ­r Marko <vmarko@google.com> 2023-08-24 06:21:49 +0000
commitd9fc1b683fd305d2d5369a5e605084e5f9c8040c (patch)
tree7939842812c6c434cfd4e873c8c0e1c92a6078be /compiler/optimizing/optimizing_compiler.cc
parentc9986c6475bd62994826314057484380387e899e (diff)
riscv64: Enable Optimizing compiler for more instructions.
And fix a bad DCHECK() in disassembler that failed for some checker tests. Test: run-gtests.sh # Ignore pre-existing timeout in `TestImageLayout`. Test: testrunner.py --target --64 --ndebug --optimizing --jit # Ignore flakes in 004-ThreadStress. Ignore pre-existing # failures (57 for --optimizing, down from 68; 98 for # --jit, down from 104). Bug: 283082089 Change-Id: I9aef19a0791afa231111d45409e775b394bff847
Diffstat (limited to 'compiler/optimizing/optimizing_compiler.cc')
-rw-r--r--compiler/optimizing/optimizing_compiler.cc50
1 files changed, 50 insertions, 0 deletions
diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc
index 62cae41665..f86ee4f70e 100644
--- a/compiler/optimizing/optimizing_compiler.cc
+++ b/compiler/optimizing/optimizing_compiler.cc
@@ -747,6 +747,56 @@ static bool CanAssembleGraphForRiscv64(HGraph* graph) {
case HInstruction::kReturn:
case HInstruction::kReturnVoid:
case HInstruction::kSuspendCheck:
+ case HInstruction::kDoubleConstant:
+ case HInstruction::kFloatConstant:
+ case HInstruction::kIntConstant:
+ case HInstruction::kLongConstant:
+ case HInstruction::kAbove:
+ case HInstruction::kAboveOrEqual:
+ case HInstruction::kBelow:
+ case HInstruction::kBelowOrEqual:
+ case HInstruction::kEqual:
+ case HInstruction::kGreaterThan:
+ case HInstruction::kGreaterThanOrEqual:
+ case HInstruction::kLessThan:
+ case HInstruction::kLessThanOrEqual:
+ case HInstruction::kNotEqual:
+ case HInstruction::kCompare:
+ case HInstruction::kIf:
+ case HInstruction::kAdd:
+ case HInstruction::kAnd:
+ case HInstruction::kOr:
+ case HInstruction::kSub:
+ case HInstruction::kXor:
+ case HInstruction::kRor:
+ case HInstruction::kShl:
+ case HInstruction::kShr:
+ case HInstruction::kUShr:
+ case HInstruction::kAbs:
+ case HInstruction::kBooleanNot:
+ case HInstruction::kMul:
+ break;
+ case HInstruction::kInvokeStaticOrDirect: {
+ Intrinsics intrinsic = it.Current()->AsInvokeStaticOrDirect()->GetIntrinsic();
+ if (intrinsic != Intrinsics::kDoubleDoubleToRawLongBits &&
+ intrinsic != Intrinsics::kDoubleIsInfinite &&
+ intrinsic != Intrinsics::kDoubleLongBitsToDouble &&
+ intrinsic != Intrinsics::kFloatFloatToRawIntBits &&
+ intrinsic != Intrinsics::kFloatIsInfinite &&
+ intrinsic != Intrinsics::kFloatIntBitsToFloat &&
+ intrinsic != Intrinsics::kMemoryPeekByte &&
+ intrinsic != Intrinsics::kMemoryPeekIntNative &&
+ intrinsic != Intrinsics::kMemoryPeekLongNative &&
+ intrinsic != Intrinsics::kMemoryPeekShortNative &&
+ intrinsic != Intrinsics::kMemoryPokeByte &&
+ intrinsic != Intrinsics::kMemoryPokeIntNative &&
+ intrinsic != Intrinsics::kMemoryPokeLongNative &&
+ intrinsic != Intrinsics::kMemoryPokeShortNative) {
+ return false;
+ }
+ break;
+ }
+ case HInstruction::kCurrentMethod:
break;
default:
// Unimplemented instruction.