summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2015-02-18 14:06:43 +0000
committer Vladimir Marko <vmarko@google.com> 2015-02-18 14:31:56 +0000
commit37e05bf384e21a031455c00b5fec668c187acd8d (patch)
treece0aa5a654476bf3f2078db64f51b6dcb2ce8be4
parent35757740da77220dc51d5cff3bc3a779f2eea9ef (diff)
Quick: Disable DCE until we fix FP/Core reg mismatches.
GVN and TypeInference can miss some FP/Core register mismatch: const v0, #X ; marked as float invoke-virtual v0, void foo(float) const v0, #X ; marked as core aput v0, v1, v2 ; float[] not used The second const is eliminated by the DCE because it writes the same value to the same dalvik reg. We replace the SSA register name defined by the first const and used by the invoke-virtual with the one defined by the second const. When we generate code for the invoke-virtual, we get a core location and may need a temporary to set up the FP argument and we may not have an available temporary. This may affect the bug below (more investigation needed). Bug: 19419671 Change-Id: I44abd390706b980c346b36c9828a3bcb4e96726d
-rw-r--r--compiler/dex/quick/quick_compiler.cc2
1 files changed, 1 insertions, 1 deletions
diff --git a/compiler/dex/quick/quick_compiler.cc b/compiler/dex/quick/quick_compiler.cc
index f39942973a..19c2a5a3a3 100644
--- a/compiler/dex/quick/quick_compiler.cc
+++ b/compiler/dex/quick/quick_compiler.cc
@@ -560,7 +560,7 @@ static uint32_t kCompilerOptimizerDisableFlags = 0 | // Disable specific optimi
// (1 << kNullCheckElimination) |
// (1 << kClassInitCheckElimination) |
// (1 << kGlobalValueNumbering) |
- // (1 << kGvnDeadCodeElimination) |
+ (1 << kGvnDeadCodeElimination) |
// (1 << kLocalValueNumbering) |
// (1 << kPromoteRegs) |
// (1 << kTrackLiveTemps) |