summaryrefslogtreecommitdiffstats
path: root/compiler/optimizing/dead_code_elimination.cc
diff options
context:
space:
mode:
authorRoland Levillain <rpl@google.com>2014-10-03 12:45:18 +0100
committerRoland Levillain <rpl@google.com>2014-10-14 14:44:16 +0100
commite161a2a60c0325793f04be42a0f05228955ecfdd (patch)
tree426167496f383ec4343902f01ce0745d4dd1874d /compiler/optimizing/dead_code_elimination.cc
parent3a3fd0f8d3981691aa2331077a8fae5feee08dd1 (diff)
downloadandroid_art-e161a2a60c0325793f04be42a0f05228955ecfdd.tar.gz
android_art-e161a2a60c0325793f04be42a0f05228955ecfdd.tar.bz2
android_art-e161a2a60c0325793f04be42a0f05228955ecfdd.zip
Do not remove NullChecks & BoundsChecks in HDeadCodeElimination.
Removing a NullCheck or a BoundsCheck instruction may change the behavior of a program. Change-Id: Ib2c9beff0cc98c382210e7cc88b1fa9af3c61887
Diffstat (limited to 'compiler/optimizing/dead_code_elimination.cc')
-rw-r--r--compiler/optimizing/dead_code_elimination.cc5
1 files changed, 4 insertions, 1 deletions
diff --git a/compiler/optimizing/dead_code_elimination.cc b/compiler/optimizing/dead_code_elimination.cc
index fe2adc77d0..5655544427 100644
--- a/compiler/optimizing/dead_code_elimination.cc
+++ b/compiler/optimizing/dead_code_elimination.cc
@@ -35,7 +35,10 @@ void DeadCodeElimination::Run() {
for (i.Advance(); !i.Done(); i.Advance()) {
HInstruction* inst = i.Current();
DCHECK(!inst->IsControlFlow());
- if (!inst->HasSideEffects() && !inst->HasUses() && !inst->IsSuspendCheck()) {
+ if (!inst->HasSideEffects()
+ && !inst->CanThrow()
+ && !inst->IsSuspendCheck()
+ && !inst->HasUses()) {
block->RemoveInstruction(inst);
}
}