diff options
author | 2016-04-05 11:18:49 +0100 | |
---|---|---|
committer | 2016-04-05 12:27:58 +0100 | |
commit | ace7a000a433ce4ecf94f30adea39c01a76fa936 (patch) | |
tree | 9d41d8974c1feda1af134a536eee8064028d670f /compiler/optimizing/nodes.h | |
parent | 75563e34a4e64a8e805e6810b13e07f1cafec137 (diff) |
Optimizing: LoadString may not have any side effects.
LoadString does not have any side effects if the string is
known to be in the dex cache or it's a boot image string
referenced directly, as specified by the string load kind.
We need to clear the side effects for these cases to avoid
a DCHECK() failure when such LoadString instruction ends up
between a ClinitCheck and an instruction to which we want to
merge that ClinitCheck. This may happen as a consequence of
inlining, LICM and DCE as shown by a regression test.
Bug: 27929914
Change-Id: I7b3bddf7d8c79ce1828a4a751f1270cf2e3d61f0
Diffstat (limited to 'compiler/optimizing/nodes.h')
-rw-r--r-- | compiler/optimizing/nodes.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/compiler/optimizing/nodes.h b/compiler/optimizing/nodes.h index 8a2e83a9ef..bb28b84dab 100644 --- a/compiler/optimizing/nodes.h +++ b/compiler/optimizing/nodes.h @@ -5674,6 +5674,7 @@ class HLoadString : public HExpression<1> { SetPackedFlag<kFlagIsInDexCache>(true); DCHECK(!NeedsEnvironment()); RemoveEnvironment(); + SetSideEffects(SideEffects::None()); } size_t InputCount() const OVERRIDE { |