From 8a62a4c9570b345b715a022d33d443413a634392 Mon Sep 17 00:00:00 2001 From: Nicolas Geoffray Date: Tue, 3 Jul 2018 09:39:07 +0100 Subject: Handle String. with a phi input. We wrongly assumed only irreducible loops could lead to this situation, but any loop can actually be in between a String NewInstance and a String.. bug: 109666561 Test: 563-checker-fakestring Change-Id: I018a22f7e22c15e140252544415f51d544f7cc13 --- compiler/optimizing/ssa_builder.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'compiler/optimizing/ssa_builder.h') diff --git a/compiler/optimizing/ssa_builder.h b/compiler/optimizing/ssa_builder.h index 60831a9e6a..765544508e 100644 --- a/compiler/optimizing/ssa_builder.h +++ b/compiler/optimizing/ssa_builder.h @@ -61,7 +61,8 @@ class SsaBuilder : public ValueObject { local_allocator_(local_allocator), ambiguous_agets_(local_allocator->Adapter(kArenaAllocGraphBuilder)), ambiguous_asets_(local_allocator->Adapter(kArenaAllocGraphBuilder)), - uninitialized_strings_(local_allocator->Adapter(kArenaAllocGraphBuilder)) { + uninitialized_strings_(local_allocator->Adapter(kArenaAllocGraphBuilder)), + uninitialized_string_phis_(local_allocator->Adapter(kArenaAllocGraphBuilder)) { graph_->InitializeInexactObjectRTI(handles); } @@ -96,6 +97,10 @@ class SsaBuilder : public ValueObject { } } + void AddUninitializedStringPhi(HPhi* phi, HInvoke* invoke) { + uninitialized_string_phis_.push_back(std::make_pair(phi, invoke)); + } + private: void SetLoopHeaderPhiInputs(); void FixEnvironmentPhis(); @@ -118,6 +123,7 @@ class SsaBuilder : public ValueObject { HArrayGet* GetFloatOrDoubleEquivalentOfArrayGet(HArrayGet* aget); void RemoveRedundantUninitializedStrings(); + void ReplaceUninitializedStringPhis(); HGraph* const graph_; Handle class_loader_; @@ -131,6 +137,7 @@ class SsaBuilder : public ValueObject { ScopedArenaVector ambiguous_agets_; ScopedArenaVector ambiguous_asets_; ScopedArenaVector uninitialized_strings_; + ScopedArenaVector> uninitialized_string_phis_; DISALLOW_COPY_AND_ASSIGN(SsaBuilder); }; -- cgit v1.2.3-59-g8ed1b