Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(372)

Unified Diff: src/hydrogen.cc

Issue 130613003: Eliminatable CheckMaps replaced with if(true) or if(false). (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Review notes applied Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/hydrogen.cc
diff --git a/src/hydrogen.cc b/src/hydrogen.cc
index 90f9c3496b2b4c6853419d218ae96fab4c637820..b1d28b0f0407745c775789e95310eaf3191084d3 100644
--- a/src/hydrogen.cc
+++ b/src/hydrogen.cc
@@ -313,6 +313,34 @@ int HBasicBlock::LoopNestingDepth() const {
}
+void HBasicBlock::ReplaceControlWithGotoSuccessor(int succ) {
+ ASSERT(IsFinished());
+ ASSERT(end()->SuccessorCount() == 2); // Only this case is supported yet.
+ ASSERT(succ < end()->SuccessorCount());
+
+ // Replace control instruction with if(true) or if(false).
+ HConstant* value = (succ == 0)
+ ? graph()->GetConstantTrue()
+ : graph()->GetConstantFalse();
+
+ HBranch* new_branch = HBranch::New(
+ zone(),
+ NULL,
+ value,
titzer 2014/01/14 13:40:32 Why not always if(true) {succ} else {1 - succ}?
Igor Sheludko 2014/01/14 15:28:00 Done.
+ ToBooleanStub::Types(ToBooleanStub::BOOLEAN),
+ end()->SuccessorAt(0),
+ end()->SuccessorAt(1));
+
+ int unreachable_succ = 1 - succ;
+
+ MarkSuccEdgeUnreachable(unreachable_succ);
+
+ end()->DeleteAndReplaceWith(end()->ActualValue());
+ new_branch->InsertAfter(last());
+ end_ = new_branch;
+}
+
+
void HBasicBlock::PostProcessLoopHeader(IterationStatement* stmt) {
ASSERT(IsLoopHeader());
@@ -331,6 +359,15 @@ void HBasicBlock::PostProcessLoopHeader(IterationStatement* stmt) {
}
+void HBasicBlock::MarkSuccEdgeUnreachable(int succ) {
+ ASSERT(IsFinished());
+ HBasicBlock* succ_block = end()->SuccessorAt(succ);
+
+ ASSERT(succ_block->predecessors()->length() == 1);
+ succ_block->MarkUnreachable();
+}
+
+
void HBasicBlock::RegisterPredecessor(HBasicBlock* pred) {
if (HasPredecessor()) {
// Only loop header blocks can have a predecessor added after
« no previous file with comments | « src/hydrogen.h ('k') | src/hydrogen-check-elimination.cc » ('j') | src/hydrogen-flow-engine.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698