Revert "Dynamic BCE (based on induction range analysis)"

This reverts commit 0b5849be045c5683d4a6b6b6c306abadba5f0fcc.


Change-Id: Id33f5da42bbdfb1aff7e2281417c8a7aa492df05
Rationale: so close :-( but bullhead-userdebug (linux) build in git_mnc-dr-dev-plus-aosp reported a breakage with a type inconsistency (long vs int in probably the codegen of dynamic bce); no time to investigate and fix this fully before my trip, so rolling back for now
diff --git a/compiler/optimizing/nodes.cc b/compiler/optimizing/nodes.cc
index b76bce4..0a39ff3 100644
--- a/compiler/optimizing/nodes.cc
+++ b/compiler/optimizing/nodes.cc
@@ -1890,7 +1890,7 @@
  *             |
  *          if_block
  *           /    \
- *  true_block   false_block
+ *  dummy_block   deopt_block
  *           \    /
  *       new_pre_header
  *             |
@@ -1898,73 +1898,62 @@
  */
 void HGraph::TransformLoopHeaderForBCE(HBasicBlock* header) {
   DCHECK(header->IsLoopHeader());
-  HBasicBlock* old_pre_header = header->GetDominator();
+  HBasicBlock* pre_header = header->GetDominator();
 
-  // Need extra block to avoid critical edge.
+  // Need this to avoid critical edge.
   HBasicBlock* if_block = new (arena_) HBasicBlock(this, header->GetDexPc());
-  HBasicBlock* true_block = new (arena_) HBasicBlock(this, header->GetDexPc());
-  HBasicBlock* false_block = new (arena_) HBasicBlock(this, header->GetDexPc());
+  // Need this to avoid critical edge.
+  HBasicBlock* dummy_block = new (arena_) HBasicBlock(this, header->GetDexPc());
+  HBasicBlock* deopt_block = new (arena_) HBasicBlock(this, header->GetDexPc());
   HBasicBlock* new_pre_header = new (arena_) HBasicBlock(this, header->GetDexPc());
   AddBlock(if_block);
-  AddBlock(true_block);
-  AddBlock(false_block);
+  AddBlock(dummy_block);
+  AddBlock(deopt_block);
   AddBlock(new_pre_header);
 
-  header->ReplacePredecessor(old_pre_header, new_pre_header);
-  old_pre_header->successors_.clear();
-  old_pre_header->dominated_blocks_.clear();
+  header->ReplacePredecessor(pre_header, new_pre_header);
+  pre_header->successors_.clear();
+  pre_header->dominated_blocks_.clear();
 
-  old_pre_header->AddSuccessor(if_block);
-  if_block->AddSuccessor(true_block);  // True successor
-  if_block->AddSuccessor(false_block);  // False successor
-  true_block->AddSuccessor(new_pre_header);
-  false_block->AddSuccessor(new_pre_header);
+  pre_header->AddSuccessor(if_block);
+  if_block->AddSuccessor(dummy_block);  // True successor
+  if_block->AddSuccessor(deopt_block);  // False successor
+  dummy_block->AddSuccessor(new_pre_header);
+  deopt_block->AddSuccessor(new_pre_header);
 
-  old_pre_header->dominated_blocks_.push_back(if_block);
-  if_block->SetDominator(old_pre_header);
-  if_block->dominated_blocks_.push_back(true_block);
-  true_block->SetDominator(if_block);
-  if_block->dominated_blocks_.push_back(false_block);
-  false_block->SetDominator(if_block);
+  pre_header->dominated_blocks_.push_back(if_block);
+  if_block->SetDominator(pre_header);
+  if_block->dominated_blocks_.push_back(dummy_block);
+  dummy_block->SetDominator(if_block);
+  if_block->dominated_blocks_.push_back(deopt_block);
+  deopt_block->SetDominator(if_block);
   if_block->dominated_blocks_.push_back(new_pre_header);
   new_pre_header->SetDominator(if_block);
   new_pre_header->dominated_blocks_.push_back(header);
   header->SetDominator(new_pre_header);
 
-  // Fix reverse post order.
   size_t index_of_header = IndexOfElement(reverse_post_order_, header);
   MakeRoomFor(&reverse_post_order_, 4, index_of_header - 1);
   reverse_post_order_[index_of_header++] = if_block;
-  reverse_post_order_[index_of_header++] = true_block;
-  reverse_post_order_[index_of_header++] = false_block;
+  reverse_post_order_[index_of_header++] = dummy_block;
+  reverse_post_order_[index_of_header++] = deopt_block;
   reverse_post_order_[index_of_header++] = new_pre_header;
 
-  // Fix loop information.
-  HLoopInformation* loop_info = old_pre_header->GetLoopInformation();
-  if (loop_info != nullptr) {
-    if_block->SetLoopInformation(loop_info);
-    true_block->SetLoopInformation(loop_info);
-    false_block->SetLoopInformation(loop_info);
-    new_pre_header->SetLoopInformation(loop_info);
-    // Add blocks to all enveloping loops.
-    for (HLoopInformationOutwardIterator loop_it(*old_pre_header);
+  HLoopInformation* info = pre_header->GetLoopInformation();
+  if (info != nullptr) {
+    if_block->SetLoopInformation(info);
+    dummy_block->SetLoopInformation(info);
+    deopt_block->SetLoopInformation(info);
+    new_pre_header->SetLoopInformation(info);
+    for (HLoopInformationOutwardIterator loop_it(*pre_header);
          !loop_it.Done();
          loop_it.Advance()) {
       loop_it.Current()->Add(if_block);
-      loop_it.Current()->Add(true_block);
-      loop_it.Current()->Add(false_block);
+      loop_it.Current()->Add(dummy_block);
+      loop_it.Current()->Add(deopt_block);
       loop_it.Current()->Add(new_pre_header);
     }
   }
-
-  // Fix try/catch information.
-  TryCatchInformation* try_catch_info = old_pre_header->IsTryBlock()
-      ? old_pre_header->GetTryCatchInformation()
-      : nullptr;
-  if_block->SetTryCatchInformation(try_catch_info);
-  true_block->SetTryCatchInformation(try_catch_info);
-  false_block->SetTryCatchInformation(try_catch_info);
-  new_pre_header->SetTryCatchInformation(try_catch_info);
 }
 
 void HInstruction::SetReferenceTypeInfo(ReferenceTypeInfo rti) {