blob: b1a230962fd511aca828838a198cbf60df21ff97 [file] [log] [blame]
Emily Bernierd0a1eb72015-03-24 16:35:39 -04001// Copyright 2014 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "src/compiler/select-lowering.h"
6
7#include "src/compiler/common-operator.h"
8#include "src/compiler/diamond.h"
9#include "src/compiler/graph.h"
10#include "src/compiler/node.h"
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000011#include "src/compiler/node-properties.h"
Emily Bernierd0a1eb72015-03-24 16:35:39 -040012
13namespace v8 {
14namespace internal {
15namespace compiler {
16
17SelectLowering::SelectLowering(Graph* graph, CommonOperatorBuilder* common)
Ben Murdochda12d292016-06-02 14:46:10 +010018 : common_(common), graph_(graph) {}
Emily Bernierd0a1eb72015-03-24 16:35:39 -040019
20SelectLowering::~SelectLowering() {}
21
22
23Reduction SelectLowering::Reduce(Node* node) {
24 if (node->opcode() != IrOpcode::kSelect) return NoChange();
25 SelectParameters const p = SelectParametersOf(node->op());
26
27 Node* cond = node->InputAt(0);
28 Node* vthen = node->InputAt(1);
29 Node* velse = node->InputAt(2);
Emily Bernierd0a1eb72015-03-24 16:35:39 -040030
Ben Murdochda12d292016-06-02 14:46:10 +010031 // Create a diamond and a phi.
32 Diamond d(graph(), common(), cond, p.hint());
Emily Bernierd0a1eb72015-03-24 16:35:39 -040033 node->ReplaceInput(0, vthen);
34 node->ReplaceInput(1, velse);
Ben Murdochda12d292016-06-02 14:46:10 +010035 node->ReplaceInput(2, d.merge);
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000036 NodeProperties::ChangeOp(node, common()->Phi(p.representation(), 2));
Emily Bernierd0a1eb72015-03-24 16:35:39 -040037 return Changed(node);
38}
39
Emily Bernierd0a1eb72015-03-24 16:35:39 -040040} // namespace compiler
41} // namespace internal
42} // namespace v8