Index: src/compiler/wasm-compiler.cc |
diff --git a/src/compiler/wasm-compiler.cc b/src/compiler/wasm-compiler.cc |
index f3c1c5819bf606f97230ba1dc6983d66b31b94ee..b6dc62be9394dc3cd98372021721a3ab96853a1f 100644 |
--- a/src/compiler/wasm-compiler.cc |
+++ b/src/compiler/wasm-compiler.cc |
@@ -990,16 +990,36 @@ Node* WasmGraphBuilder::HeapConstant(Handle<HeapObject> value) { |
return jsgraph()->HeapConstant(value); |
} |
-Node* WasmGraphBuilder::Branch(Node* cond, Node** true_node, |
- Node** false_node) { |
+namespace { |
+Node* Branch(JSGraph* jsgraph, Node* cond, Node** true_node, Node** false_node, |
+ Node* control, BranchHint hint) { |
DCHECK_NOT_NULL(cond); |
- DCHECK_NOT_NULL(*control_); |
+ DCHECK_NOT_NULL(control); |
Node* branch = |
- graph()->NewNode(jsgraph()->common()->Branch(), cond, *control_); |
- *true_node = graph()->NewNode(jsgraph()->common()->IfTrue(), branch); |
- *false_node = graph()->NewNode(jsgraph()->common()->IfFalse(), branch); |
+ jsgraph->graph()->NewNode(jsgraph->common()->Branch(hint), cond, control); |
+ *true_node = jsgraph->graph()->NewNode(jsgraph->common()->IfTrue(), branch); |
+ *false_node = jsgraph->graph()->NewNode(jsgraph->common()->IfFalse(), branch); |
return branch; |
} |
+} // namespace |
+ |
+Node* WasmGraphBuilder::BranchNoHint(Node* cond, Node** true_node, |
+ Node** false_node) { |
+ return Branch(jsgraph(), cond, true_node, false_node, *control_, |
+ BranchHint::kNone); |
+} |
+ |
+Node* WasmGraphBuilder::BranchExpectTrue(Node* cond, Node** true_node, |
+ Node** false_node) { |
+ return Branch(jsgraph(), cond, true_node, false_node, *control_, |
+ BranchHint::kTrue); |
+} |
+ |
+Node* WasmGraphBuilder::BranchExpectFalse(Node* cond, Node** true_node, |
+ Node** false_node) { |
+ return Branch(jsgraph(), cond, true_node, false_node, *control_, |
+ BranchHint::kFalse); |
+} |
Node* WasmGraphBuilder::Switch(unsigned count, Node* key) { |
return graph()->NewNode(jsgraph()->common()->Switch(count), key, *control_); |
@@ -1758,7 +1778,7 @@ Node* WasmGraphBuilder::Catch(Node* input, wasm::WasmCodePosition position) { |
Node* is_smi; |
Node* is_heap; |
- Branch(BuildTestNotSmi(value), &is_heap, &is_smi); |
+ BranchExpectFalse(BuildTestNotSmi(value), &is_heap, &is_smi); |
// is_smi |
Node* smi_i32 = BuildChangeSmiToInt32(value); |
@@ -1798,7 +1818,7 @@ Node* WasmGraphBuilder::BuildI32DivS(Node* left, Node* right, |
Node* before = *control_; |
Node* denom_is_m1; |
Node* denom_is_not_m1; |
- Branch( |
+ BranchExpectFalse( |
graph()->NewNode(m->Word32Equal(), right, jsgraph()->Int32Constant(-1)), |
&denom_is_m1, &denom_is_not_m1); |
*control_ = denom_is_m1; |
@@ -1940,9 +1960,9 @@ Node* WasmGraphBuilder::BuildI64DivS(Node* left, Node* right, |
Node* before = *control_; |
Node* denom_is_m1; |
Node* denom_is_not_m1; |
- Branch(graph()->NewNode(jsgraph()->machine()->Word64Equal(), right, |
- jsgraph()->Int64Constant(-1)), |
- &denom_is_m1, &denom_is_not_m1); |
+ BranchExpectFalse(graph()->NewNode(jsgraph()->machine()->Word64Equal(), right, |
+ jsgraph()->Int64Constant(-1)), |
+ &denom_is_m1, &denom_is_not_m1); |
*control_ = denom_is_m1; |
trap_->TrapIfEq64(wasm::kTrapDivUnrepresentable, left, |
std::numeric_limits<int64_t>::min(), position); |