diff options
| -rw-r--r-- | compiler/optimizing/graph_checker.cc | 51 | ||||
| -rw-r--r-- | compiler/optimizing/instruction_simplifier.cc | 37 |
2 files changed, 50 insertions, 38 deletions
diff --git a/compiler/optimizing/graph_checker.cc b/compiler/optimizing/graph_checker.cc index f32494bb04..e8c94dd6b4 100644 --- a/compiler/optimizing/graph_checker.cc +++ b/compiler/optimizing/graph_checker.cc @@ -735,10 +735,59 @@ void GraphChecker::VisitInvoke(HInvoke* invoke) { } flag_info_.seen_always_throwing_invokes = true; } + + // Check for intrinsics which should have been replaced by intermediate representation in the + // instruction builder. + switch (invoke->GetIntrinsic()) { + case Intrinsics::kIntegerRotateRight: + case Intrinsics::kLongRotateRight: + case Intrinsics::kIntegerRotateLeft: + case Intrinsics::kLongRotateLeft: + case Intrinsics::kIntegerCompare: + case Intrinsics::kLongCompare: + case Intrinsics::kIntegerSignum: + case Intrinsics::kLongSignum: + case Intrinsics::kFloatIsNaN: + case Intrinsics::kDoubleIsNaN: + case Intrinsics::kStringIsEmpty: + case Intrinsics::kUnsafeLoadFence: + case Intrinsics::kUnsafeStoreFence: + case Intrinsics::kUnsafeFullFence: + case Intrinsics::kJdkUnsafeLoadFence: + case Intrinsics::kJdkUnsafeStoreFence: + case Intrinsics::kJdkUnsafeFullFence: + case Intrinsics::kVarHandleFullFence: + case Intrinsics::kVarHandleAcquireFence: + case Intrinsics::kVarHandleReleaseFence: + case Intrinsics::kVarHandleLoadLoadFence: + case Intrinsics::kVarHandleStoreStoreFence: + case Intrinsics::kMathMinIntInt: + case Intrinsics::kMathMinLongLong: + case Intrinsics::kMathMinFloatFloat: + case Intrinsics::kMathMinDoubleDouble: + case Intrinsics::kMathMaxIntInt: + case Intrinsics::kMathMaxLongLong: + case Intrinsics::kMathMaxFloatFloat: + case Intrinsics::kMathMaxDoubleDouble: + case Intrinsics::kMathAbsInt: + case Intrinsics::kMathAbsLong: + case Intrinsics::kMathAbsFloat: + case Intrinsics::kMathAbsDouble: + AddError( + StringPrintf("The graph contains an instrinsic which should have been replaced in the " + "instruction builder: %s:%d in block %d.", + invoke->DebugName(), + invoke->GetId(), + invoke->GetBlock()->GetBlockId())); + break; + default: + break; + } } void GraphChecker::VisitInvokeStaticOrDirect(HInvokeStaticOrDirect* invoke) { - // We call VisitInvoke and not VisitInstruction to de-duplicate the always throwing code check. + // We call VisitInvoke and not VisitInstruction to de-duplicate the common code: always throwing + // and instrinsic checks. VisitInvoke(invoke); if (invoke->IsStaticWithExplicitClinitCheck()) { diff --git a/compiler/optimizing/instruction_simplifier.cc b/compiler/optimizing/instruction_simplifier.cc index 0e2a62226f..fb6d53b9da 100644 --- a/compiler/optimizing/instruction_simplifier.cc +++ b/compiler/optimizing/instruction_simplifier.cc @@ -3136,43 +3136,6 @@ void InstructionSimplifierVisitor::VisitInvoke(HInvoke* instruction) { case Intrinsics::kVarHandleWeakCompareAndSetRelease: SimplifyVarHandleIntrinsic(instruction); break; - case Intrinsics::kIntegerRotateRight: - case Intrinsics::kLongRotateRight: - case Intrinsics::kIntegerRotateLeft: - case Intrinsics::kLongRotateLeft: - case Intrinsics::kIntegerCompare: - case Intrinsics::kLongCompare: - case Intrinsics::kIntegerSignum: - case Intrinsics::kLongSignum: - case Intrinsics::kFloatIsNaN: - case Intrinsics::kDoubleIsNaN: - case Intrinsics::kStringIsEmpty: - case Intrinsics::kUnsafeLoadFence: - case Intrinsics::kUnsafeStoreFence: - case Intrinsics::kUnsafeFullFence: - case Intrinsics::kJdkUnsafeLoadFence: - case Intrinsics::kJdkUnsafeStoreFence: - case Intrinsics::kJdkUnsafeFullFence: - case Intrinsics::kVarHandleFullFence: - case Intrinsics::kVarHandleAcquireFence: - case Intrinsics::kVarHandleReleaseFence: - case Intrinsics::kVarHandleLoadLoadFence: - case Intrinsics::kVarHandleStoreStoreFence: - case Intrinsics::kMathMinIntInt: - case Intrinsics::kMathMinLongLong: - case Intrinsics::kMathMinFloatFloat: - case Intrinsics::kMathMinDoubleDouble: - case Intrinsics::kMathMaxIntInt: - case Intrinsics::kMathMaxLongLong: - case Intrinsics::kMathMaxFloatFloat: - case Intrinsics::kMathMaxDoubleDouble: - case Intrinsics::kMathAbsInt: - case Intrinsics::kMathAbsLong: - case Intrinsics::kMathAbsFloat: - case Intrinsics::kMathAbsDouble: - // These are replaced by intermediate representation in the instruction builder. - LOG(FATAL) << "Unexpected " << static_cast<Intrinsics>(instruction->GetIntrinsic()); - UNREACHABLE(); default: break; } |