diff options
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/image_writer.cc | 4 | ||||
| -rw-r--r-- | compiler/optimizing/graph_visualizer.cc | 14 | ||||
| -rw-r--r-- | compiler/optimizing/induction_var_range.cc | 6 | ||||
| -rw-r--r-- | compiler/optimizing/intrinsics_arm_vixl.cc | 36 | ||||
| -rw-r--r-- | compiler/optimizing/load_store_analysis.h | 52 | ||||
| -rw-r--r-- | compiler/verifier_deps_test.cc | 10 |
6 files changed, 40 insertions, 82 deletions
diff --git a/compiler/image_writer.cc b/compiler/image_writer.cc index 115e722a75..6ee9cc6056 100644 --- a/compiler/image_writer.cc +++ b/compiler/image_writer.cc @@ -2593,10 +2593,6 @@ void ImageWriter::CopyAndFixupMethod(ArtMethod* orig, CopyReference(copy->GetDeclaringClassAddressWithoutBarrier(), orig->GetDeclaringClassUnchecked()); - mirror::MethodDexCacheType* orig_resolved_methods = - orig->GetDexCacheResolvedMethods(target_ptr_size_); - copy->SetDexCacheResolvedMethods(NativeLocationInImage(orig_resolved_methods), target_ptr_size_); - // OatWriter replaces the code_ with an offset value. Here we re-adjust to a pointer relative to // oat_begin_ diff --git a/compiler/optimizing/graph_visualizer.cc b/compiler/optimizing/graph_visualizer.cc index a20ec3c0db..3035e4657d 100644 --- a/compiler/optimizing/graph_visualizer.cc +++ b/compiler/optimizing/graph_visualizer.cc @@ -501,6 +501,20 @@ class HGraphVisualizerPrinter : public HGraphDelegateVisitor { StartAttributeStream("field_type") << iset->GetFieldType(); } + void VisitStaticFieldGet(HStaticFieldGet* sget) OVERRIDE { + StartAttributeStream("field_name") << + sget->GetFieldInfo().GetDexFile().PrettyField(sget->GetFieldInfo().GetFieldIndex(), + /* with type */ false); + StartAttributeStream("field_type") << sget->GetFieldType(); + } + + void VisitStaticFieldSet(HStaticFieldSet* sset) OVERRIDE { + StartAttributeStream("field_name") << + sset->GetFieldInfo().GetDexFile().PrettyField(sset->GetFieldInfo().GetFieldIndex(), + /* with type */ false); + StartAttributeStream("field_type") << sset->GetFieldType(); + } + void VisitUnresolvedInstanceFieldGet(HUnresolvedInstanceFieldGet* field_access) OVERRIDE { StartAttributeStream("field_type") << field_access->GetFieldType(); } diff --git a/compiler/optimizing/induction_var_range.cc b/compiler/optimizing/induction_var_range.cc index f35aace3a9..089340e715 100644 --- a/compiler/optimizing/induction_var_range.cc +++ b/compiler/optimizing/induction_var_range.cc @@ -87,8 +87,10 @@ static bool IsGEZero(HInstruction* instruction) { IsGEZero(instruction->InputAt(1)); case Intrinsics::kMathAbsInt: case Intrinsics::kMathAbsLong: - // Instruction ABS(x) is >= 0. - return true; + // Instruction ABS(>=0) is >= 0. + // NOTE: ABS(minint) = minint prevents assuming + // >= 0 without looking at the argument. + return IsGEZero(instruction->InputAt(0)); default: break; } diff --git a/compiler/optimizing/intrinsics_arm_vixl.cc b/compiler/optimizing/intrinsics_arm_vixl.cc index 76c1410340..d2dc88a73b 100644 --- a/compiler/optimizing/intrinsics_arm_vixl.cc +++ b/compiler/optimizing/intrinsics_arm_vixl.cc @@ -331,7 +331,7 @@ static void CreateIntToIntLocations(ArenaAllocator* arena, HInvoke* invoke) { locations->SetOut(Location::RequiresRegister(), Location::kNoOutputOverlap); } -static void CreateIntToIntLocationsWithOverlap(ArenaAllocator* arena, HInvoke* invoke) { +static void CreateLongToLongLocationsWithOverlap(ArenaAllocator* arena, HInvoke* invoke) { LocationSummary* locations = new (arena) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); @@ -383,11 +383,7 @@ void IntrinsicCodeGeneratorARMVIXL::VisitIntegerNumberOfLeadingZeros(HInvoke* in } void IntrinsicLocationsBuilderARMVIXL::VisitLongNumberOfLeadingZeros(HInvoke* invoke) { - LocationSummary* locations = new (arena_) LocationSummary(invoke, - LocationSummary::kNoCall, - kIntrinsified); - locations->SetInAt(0, Location::RequiresRegister()); - locations->SetOut(Location::RequiresRegister(), Location::kOutputOverlap); + CreateLongToLongLocationsWithOverlap(arena_, invoke); } void IntrinsicCodeGeneratorARMVIXL::VisitLongNumberOfLeadingZeros(HInvoke* invoke) { @@ -425,11 +421,7 @@ static void GenNumberOfTrailingZeros(HInvoke* invoke, } void IntrinsicLocationsBuilderARMVIXL::VisitIntegerNumberOfTrailingZeros(HInvoke* invoke) { - LocationSummary* locations = new (arena_) LocationSummary(invoke, - LocationSummary::kNoCall, - kIntrinsified); - locations->SetInAt(0, Location::RequiresRegister()); - locations->SetOut(Location::RequiresRegister(), Location::kNoOutputOverlap); + CreateIntToIntLocations(arena_, invoke); } void IntrinsicCodeGeneratorARMVIXL::VisitIntegerNumberOfTrailingZeros(HInvoke* invoke) { @@ -437,11 +429,7 @@ void IntrinsicCodeGeneratorARMVIXL::VisitIntegerNumberOfTrailingZeros(HInvoke* i } void IntrinsicLocationsBuilderARMVIXL::VisitLongNumberOfTrailingZeros(HInvoke* invoke) { - LocationSummary* locations = new (arena_) LocationSummary(invoke, - LocationSummary::kNoCall, - kIntrinsified); - locations->SetInAt(0, Location::RequiresRegister()); - locations->SetOut(Location::RequiresRegister(), Location::kOutputOverlap); + CreateLongToLongLocationsWithOverlap(arena_, invoke); } void IntrinsicCodeGeneratorARMVIXL::VisitLongNumberOfTrailingZeros(HInvoke* invoke) { @@ -2819,11 +2807,7 @@ void IntrinsicCodeGeneratorARMVIXL::VisitIntegerReverse(HInvoke* invoke) { } void IntrinsicLocationsBuilderARMVIXL::VisitLongReverse(HInvoke* invoke) { - LocationSummary* locations = new (arena_) LocationSummary(invoke, - LocationSummary::kNoCall, - kIntrinsified); - locations->SetInAt(0, Location::RequiresRegister()); - locations->SetOut(Location::RequiresRegister(), Location::kOutputOverlap); + CreateLongToLongLocationsWithOverlap(arena_, invoke); } void IntrinsicCodeGeneratorARMVIXL::VisitLongReverse(HInvoke* invoke) { @@ -2849,11 +2833,7 @@ void IntrinsicCodeGeneratorARMVIXL::VisitIntegerReverseBytes(HInvoke* invoke) { } void IntrinsicLocationsBuilderARMVIXL::VisitLongReverseBytes(HInvoke* invoke) { - LocationSummary* locations = new (arena_) LocationSummary(invoke, - LocationSummary::kNoCall, - kIntrinsified); - locations->SetInAt(0, Location::RequiresRegister()); - locations->SetOut(Location::RequiresRegister(), Location::kOutputOverlap); + CreateLongToLongLocationsWithOverlap(arena_, invoke); } void IntrinsicCodeGeneratorARMVIXL::VisitLongReverseBytes(HInvoke* invoke) { @@ -2982,7 +2962,7 @@ void IntrinsicCodeGeneratorARMVIXL::VisitIntegerHighestOneBit(HInvoke* invoke) { } void IntrinsicLocationsBuilderARMVIXL::VisitLongHighestOneBit(HInvoke* invoke) { - CreateIntToIntLocationsWithOverlap(arena_, invoke); + CreateLongToLongLocationsWithOverlap(arena_, invoke); } void IntrinsicCodeGeneratorARMVIXL::VisitLongHighestOneBit(HInvoke* invoke) { @@ -3047,7 +3027,7 @@ void IntrinsicCodeGeneratorARMVIXL::VisitIntegerLowestOneBit(HInvoke* invoke) { } void IntrinsicLocationsBuilderARMVIXL::VisitLongLowestOneBit(HInvoke* invoke) { - CreateIntToIntLocationsWithOverlap(arena_, invoke); + CreateLongToLongLocationsWithOverlap(arena_, invoke); } void IntrinsicCodeGeneratorARMVIXL::VisitLongLowestOneBit(HInvoke* invoke) { diff --git a/compiler/optimizing/load_store_analysis.h b/compiler/optimizing/load_store_analysis.h index a2c17944f2..02bc254729 100644 --- a/compiler/optimizing/load_store_analysis.h +++ b/compiler/optimizing/load_store_analysis.h @@ -461,49 +461,15 @@ class HeapLocationCollector : public HGraphVisitor { has_heap_stores_ = true; } - void VisitNewInstance(HNewInstance* new_instance) OVERRIDE { - // Any references appearing in the ref_info_array_ so far cannot alias with new_instance. - CreateReferenceInfoForReferenceType(new_instance); - } - - void VisitNewArray(HNewArray* new_array) OVERRIDE { - // Any references appearing in the ref_info_array_ so far cannot alias with new_array. - CreateReferenceInfoForReferenceType(new_array); - } - - void VisitInvokeStaticOrDirect(HInvokeStaticOrDirect* instruction) OVERRIDE { - CreateReferenceInfoForReferenceType(instruction); - } - - void VisitInvokeVirtual(HInvokeVirtual* instruction) OVERRIDE { - CreateReferenceInfoForReferenceType(instruction); - } - - void VisitInvokeInterface(HInvokeInterface* instruction) OVERRIDE { - CreateReferenceInfoForReferenceType(instruction); - } - - void VisitInvokeUnresolved(HInvokeUnresolved* instruction) OVERRIDE { - CreateReferenceInfoForReferenceType(instruction); - } - - void VisitInvokePolymorphic(HInvokePolymorphic* instruction) OVERRIDE { - CreateReferenceInfoForReferenceType(instruction); - } - - void VisitLoadString(HLoadString* instruction) OVERRIDE { - CreateReferenceInfoForReferenceType(instruction); - } - - void VisitPhi(HPhi* instruction) OVERRIDE { - CreateReferenceInfoForReferenceType(instruction); - } - - void VisitParameterValue(HParameterValue* instruction) OVERRIDE { - CreateReferenceInfoForReferenceType(instruction); - } - - void VisitSelect(HSelect* instruction) OVERRIDE { + void VisitInstruction(HInstruction* instruction) OVERRIDE { + // Any new-instance or new-array cannot alias with references that + // pre-exist the new-instance/new-array. We append entries into + // ref_info_array_ which keeps track of the order of creation + // of reference values since we visit the blocks in reverse post order. + // + // By default, VisitXXX() (including VisitPhi()) calls VisitInstruction(), + // unless VisitXXX() is overridden. VisitInstanceFieldGet() etc. above + // also call CreateReferenceInfoForReferenceType() explicitly. CreateReferenceInfoForReferenceType(instruction); } diff --git a/compiler/verifier_deps_test.cc b/compiler/verifier_deps_test.cc index 65389252e2..5c097da16f 100644 --- a/compiler/verifier_deps_test.cc +++ b/compiler/verifier_deps_test.cc @@ -624,7 +624,7 @@ TEST_F(VerifierDepsTest, ConstClass_Resolved) { } TEST_F(VerifierDepsTest, ConstClass_Unresolved) { - ASSERT_TRUE(VerifyMethod("ConstClass_Unresolved")); + ASSERT_FALSE(VerifyMethod("ConstClass_Unresolved")); ASSERT_TRUE(HasClass("LUnresolvedClass;", false)); } @@ -634,7 +634,7 @@ TEST_F(VerifierDepsTest, CheckCast_Resolved) { } TEST_F(VerifierDepsTest, CheckCast_Unresolved) { - ASSERT_TRUE(VerifyMethod("CheckCast_Unresolved")); + ASSERT_FALSE(VerifyMethod("CheckCast_Unresolved")); ASSERT_TRUE(HasClass("LUnresolvedClass;", false)); } @@ -644,7 +644,7 @@ TEST_F(VerifierDepsTest, InstanceOf_Resolved) { } TEST_F(VerifierDepsTest, InstanceOf_Unresolved) { - ASSERT_TRUE(VerifyMethod("InstanceOf_Unresolved")); + ASSERT_FALSE(VerifyMethod("InstanceOf_Unresolved")); ASSERT_TRUE(HasClass("LUnresolvedClass;", false)); } @@ -654,12 +654,12 @@ TEST_F(VerifierDepsTest, NewInstance_Resolved) { } TEST_F(VerifierDepsTest, NewInstance_Unresolved) { - ASSERT_TRUE(VerifyMethod("NewInstance_Unresolved")); + ASSERT_FALSE(VerifyMethod("NewInstance_Unresolved")); ASSERT_TRUE(HasClass("LUnresolvedClass;", false)); } TEST_F(VerifierDepsTest, NewArray_Unresolved) { - ASSERT_TRUE(VerifyMethod("NewArray_Unresolved")); + ASSERT_FALSE(VerifyMethod("NewArray_Unresolved")); ASSERT_TRUE(HasClass("[LUnresolvedClass;", false)); } |