1958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier// Copyright 2014 the V8 project authors. All rights reserved. 2958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier// Use of this source code is governed by a BSD-style license that can be 3958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier// found in the LICENSE file. 4958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 5958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#include "src/compiler/select-lowering.h" 6958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 7958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#include "src/compiler/common-operator.h" 8958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#include "src/compiler/diamond.h" 9958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#include "src/compiler/graph.h" 10958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#include "src/compiler/node.h" 11014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/compiler/node-properties.h" 12958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 13958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Berniernamespace v8 { 14958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Berniernamespace internal { 15958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Berniernamespace compiler { 16958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 17958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily BernierSelectLowering::SelectLowering(Graph* graph, CommonOperatorBuilder* common) 183b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch : common_(common), graph_(graph) {} 19958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 20958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily BernierSelectLowering::~SelectLowering() {} 21958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 22958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 23958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily BernierReduction SelectLowering::Reduce(Node* node) { 24958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier if (node->opcode() != IrOpcode::kSelect) return NoChange(); 25958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier SelectParameters const p = SelectParametersOf(node->op()); 26958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 27958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier Node* cond = node->InputAt(0); 28958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier Node* vthen = node->InputAt(1); 29958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier Node* velse = node->InputAt(2); 30958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 313b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // Create a diamond and a phi. 323b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Diamond d(graph(), common(), cond, p.hint()); 33958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier node->ReplaceInput(0, vthen); 34958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier node->ReplaceInput(1, velse); 353b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch node->ReplaceInput(2, d.merge); 36014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch NodeProperties::ChangeOp(node, common()->Phi(p.representation(), 2)); 37958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return Changed(node); 38958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 39958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 40958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} // namespace compiler 41958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} // namespace internal 42958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} // namespace v8 43