diff options
author | 2023-07-20 13:12:29 +0000 | |
---|---|---|
committer | 2023-08-24 06:21:49 +0000 | |
commit | d9fc1b683fd305d2d5369a5e605084e5f9c8040c (patch) | |
tree | 7939842812c6c434cfd4e873c8c0e1c92a6078be /compiler/optimizing/optimizing_compiler.cc | |
parent | c9986c6475bd62994826314057484380387e899e (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.cc | 50 |
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. |