common-operator.cc revision bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8
1b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Copyright 2014 the V8 project authors. All rights reserved. 2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// found in the LICENSE file. 4b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 5b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/compiler/common-operator.h" 6b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 7b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/assembler.h" 8b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/base/lazy-instance.h" 9b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/compiler/linkage.h" 10958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#include "src/compiler/opcodes.h" 11958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#include "src/compiler/operator.h" 12014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/handles-inl.h" 13b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/zone.h" 14b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 15b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace v8 { 16b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace internal { 17b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace compiler { 18b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 19958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernierstd::ostream& operator<<(std::ostream& os, BranchHint hint) { 20958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier switch (hint) { 21958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier case BranchHint::kNone: 22958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return os << "None"; 23958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier case BranchHint::kTrue: 24958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return os << "True"; 25958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier case BranchHint::kFalse: 26958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return os << "False"; 27958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier } 28958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier UNREACHABLE(); 29958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return os; 30958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 31b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 32b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 33958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily BernierBranchHint BranchHintOf(const Operator* const op) { 34958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier DCHECK_EQ(IrOpcode::kBranch, op->opcode()); 35958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return OpParameter<BranchHint>(op); 36958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 37b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 38b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 39014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochsize_t hash_value(DeoptimizeKind kind) { return static_cast<size_t>(kind); } 40014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 41014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 42014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochstd::ostream& operator<<(std::ostream& os, DeoptimizeKind kind) { 43014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch switch (kind) { 44014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case DeoptimizeKind::kEager: 45014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os << "Eager"; 46014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case DeoptimizeKind::kSoft: 47014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os << "Soft"; 48014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 49014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch UNREACHABLE(); 50014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os; 51014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 52014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 53014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 54014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochDeoptimizeKind DeoptimizeKindOf(const Operator* const op) { 55014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch DCHECK_EQ(IrOpcode::kDeoptimize, op->opcode()); 56014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return OpParameter<DeoptimizeKind>(op); 57014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 58014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 59014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 60014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochsize_t hash_value(IfExceptionHint hint) { return static_cast<size_t>(hint); } 61014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 62014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 63014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochstd::ostream& operator<<(std::ostream& os, IfExceptionHint hint) { 64014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch switch (hint) { 65014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case IfExceptionHint::kLocallyCaught: 66014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os << "Caught"; 67014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case IfExceptionHint::kLocallyUncaught: 68014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os << "Uncaught"; 69014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 70014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch UNREACHABLE(); 71014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os; 72014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 73014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 74014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 75958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernierbool operator==(SelectParameters const& lhs, SelectParameters const& rhs) { 76014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return lhs.representation() == rhs.representation() && 77014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch lhs.hint() == rhs.hint(); 78958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 79b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 80958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 81958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernierbool operator!=(SelectParameters const& lhs, SelectParameters const& rhs) { 82958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return !(lhs == rhs); 83958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 84958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 85958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 86958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Berniersize_t hash_value(SelectParameters const& p) { 87014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return base::hash_combine(p.representation(), p.hint()); 88958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 89958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 90958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 91958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernierstd::ostream& operator<<(std::ostream& os, SelectParameters const& p) { 92014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os << p.representation() << "|" << p.hint(); 93958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 94958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 95958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 96958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily BernierSelectParameters const& SelectParametersOf(const Operator* const op) { 97958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier DCHECK_EQ(IrOpcode::kSelect, op->opcode()); 98958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return OpParameter<SelectParameters>(op); 99958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 100958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 101bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben MurdochCallDescriptor const* CallDescriptorOf(const Operator* const op) { 102bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch DCHECK(op->opcode() == IrOpcode::kCall || 103bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch op->opcode() == IrOpcode::kTailCall); 104bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch return OpParameter<CallDescriptor const*>(op); 105bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch} 106958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 107014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochsize_t ProjectionIndexOf(const Operator* const op) { 108014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch DCHECK_EQ(IrOpcode::kProjection, op->opcode()); 109014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return OpParameter<size_t>(op); 110958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 111958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 112958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 113014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochMachineRepresentation PhiRepresentationOf(const Operator* const op) { 114014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch DCHECK_EQ(IrOpcode::kPhi, op->opcode()); 115014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return OpParameter<MachineRepresentation>(op); 116958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 117b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 118b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 119014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochint ParameterIndexOf(const Operator* const op) { 120014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch DCHECK_EQ(IrOpcode::kParameter, op->opcode()); 121014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return OpParameter<ParameterInfo>(op).index(); 122958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 123b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 124b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 125014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst ParameterInfo& ParameterInfoOf(const Operator* const op) { 126014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch DCHECK_EQ(IrOpcode::kParameter, op->opcode()); 127014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return OpParameter<ParameterInfo>(op); 128014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 129014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 130014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 131014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochbool operator==(ParameterInfo const& lhs, ParameterInfo const& rhs) { 132014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return lhs.index() == rhs.index(); 133958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 134958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 135958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 136014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochbool operator!=(ParameterInfo const& lhs, ParameterInfo const& rhs) { 137014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return !(lhs == rhs); 138958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 139958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 140958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 141014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochsize_t hash_value(ParameterInfo const& p) { return p.index(); } 142014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 143014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 144014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochstd::ostream& operator<<(std::ostream& os, ParameterInfo const& i) { 145014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch if (i.debug_name()) os << i.debug_name() << '#'; 146014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch os << i.index(); 147014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os; 148958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 149b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 150bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdochbool operator==(RelocatablePtrConstantInfo const& lhs, 151bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch RelocatablePtrConstantInfo const& rhs) { 152bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch return lhs.rmode() == rhs.rmode() && lhs.value() == rhs.value() && 153bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch lhs.type() == rhs.type(); 154bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch} 155bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch 156bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdochbool operator!=(RelocatablePtrConstantInfo const& lhs, 157bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch RelocatablePtrConstantInfo const& rhs) { 158bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch return !(lhs == rhs); 159bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch} 160bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch 161bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdochsize_t hash_value(RelocatablePtrConstantInfo const& p) { 162bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch return base::hash_combine(p.value(), p.rmode(), p.type()); 163bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch} 164bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch 165bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdochstd::ostream& operator<<(std::ostream& os, 166bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch RelocatablePtrConstantInfo const& p) { 167bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch return os << p.value() << "|" << p.rmode() << "|" << p.type(); 168bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch} 169bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch 1703b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch#define CACHED_OP_LIST(V) \ 1713b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch V(Dead, Operator::kFoldable, 0, 0, 0, 1, 1, 1) \ 1723b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch V(DeoptimizeIf, Operator::kFoldable, 2, 1, 1, 0, 0, 1) \ 1733b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch V(DeoptimizeUnless, Operator::kFoldable, 2, 1, 1, 0, 0, 1) \ 1743b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch V(IfTrue, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \ 1753b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch V(IfFalse, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \ 1763b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch V(IfSuccess, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \ 1773b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch V(IfDefault, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \ 1783b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch V(Throw, Operator::kKontrol, 1, 1, 1, 0, 0, 1) \ 1793b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch V(Terminate, Operator::kKontrol, 0, 1, 1, 0, 0, 1) \ 1803b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch V(OsrNormalEntry, Operator::kFoldable, 0, 1, 1, 0, 1, 1) \ 1813b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch V(OsrLoopEntry, Operator::kFoldable, 0, 1, 1, 0, 1, 1) \ 182bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch V(CheckPoint, Operator::kKontrol, 1, 1, 1, 0, 1, 0) \ 1833b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch V(BeginRegion, Operator::kNoThrow, 0, 1, 0, 0, 1, 0) \ 184014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(FinishRegion, Operator::kNoThrow, 1, 1, 0, 1, 1, 0) 185014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 186014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define CACHED_RETURN_LIST(V) \ 187014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(1) \ 188014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(2) \ 189014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(3) 190014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 191014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 192014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define CACHED_END_LIST(V) \ 193014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(1) \ 194014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(2) \ 195014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(3) \ 196014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(4) \ 197014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(5) \ 198014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(6) \ 199014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(7) \ 200014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(8) 201014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 202014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 203014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define CACHED_EFFECT_PHI_LIST(V) \ 204014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(1) \ 205014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(2) \ 206014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(3) \ 207014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(4) \ 208014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(5) \ 209014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(6) 210958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 211958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 212958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#define CACHED_LOOP_LIST(V) \ 213958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier V(1) \ 214958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier V(2) 215958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 216958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 217958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#define CACHED_MERGE_LIST(V) \ 218958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier V(1) \ 219958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier V(2) \ 220958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier V(3) \ 221958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier V(4) \ 222958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier V(5) \ 223958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier V(6) \ 224958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier V(7) \ 225958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier V(8) 226958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 227958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 228958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#define CACHED_PARAMETER_LIST(V) \ 229958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier V(0) \ 230958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier V(1) \ 231958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier V(2) \ 232958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier V(3) \ 233958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier V(4) \ 234958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier V(5) \ 235958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier V(6) 236958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 237958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 238014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define CACHED_PHI_LIST(V) \ 239014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(kTagged, 1) \ 240014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(kTagged, 2) \ 241014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(kTagged, 3) \ 242014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(kTagged, 4) \ 243014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(kTagged, 5) \ 244014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(kTagged, 6) \ 245014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(kBit, 2) \ 246014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(kFloat64, 2) \ 247014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(kWord32, 2) 248014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 249014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 250014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define CACHED_PROJECTION_LIST(V) \ 251014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(0) \ 252014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(1) 253014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 254014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 255014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define CACHED_STATE_VALUES_LIST(V) \ 256014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(0) \ 257014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(1) \ 258014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(2) \ 259014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(3) \ 260014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(4) \ 261014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(5) \ 262014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(6) \ 263014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(7) \ 264014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(8) \ 265014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(10) \ 266014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(11) \ 267014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(12) \ 268014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(13) \ 269014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V(14) 270014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 271014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 272014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochstruct CommonOperatorGlobalCache final { 273014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define CACHED(Name, properties, value_input_count, effect_input_count, \ 274014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch control_input_count, value_output_count, effect_output_count, \ 275014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch control_output_count) \ 276014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch struct Name##Operator final : public Operator { \ 277014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Name##Operator() \ 278014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch : Operator(IrOpcode::k##Name, properties, #Name, value_input_count, \ 279014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch effect_input_count, control_input_count, \ 280014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch value_output_count, effect_output_count, \ 281014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch control_output_count) {} \ 282014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch }; \ 283958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier Name##Operator k##Name##Operator; 284958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier CACHED_OP_LIST(CACHED) 285958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#undef CACHED 286958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 287014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch template <DeoptimizeKind kKind> 288014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch struct DeoptimizeOperator final : public Operator1<DeoptimizeKind> { 289014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch DeoptimizeOperator() 290014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch : Operator1<DeoptimizeKind>( // -- 291014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kDeoptimize, Operator::kNoThrow, // opcode 292014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "Deoptimize", // name 293014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 1, 1, 1, 0, 0, 1, // counts 294014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch kKind) {} // parameter 295014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch }; 296014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch DeoptimizeOperator<DeoptimizeKind::kEager> kDeoptimizeEagerOperator; 297014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch DeoptimizeOperator<DeoptimizeKind::kSoft> kDeoptimizeSoftOperator; 298014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 299014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch template <IfExceptionHint kCaughtLocally> 300014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch struct IfExceptionOperator final : public Operator1<IfExceptionHint> { 301014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IfExceptionOperator() 302014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch : Operator1<IfExceptionHint>( // -- 303014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kIfException, Operator::kKontrol, // opcode 304014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "IfException", // name 305014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 0, 1, 1, 1, 1, 1, // counts 306014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch kCaughtLocally) {} // parameter 307014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch }; 308014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IfExceptionOperator<IfExceptionHint::kLocallyCaught> kIfExceptionCOperator; 309014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IfExceptionOperator<IfExceptionHint::kLocallyUncaught> kIfExceptionUOperator; 310014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 311014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch template <size_t kInputCount> 312014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch struct EndOperator final : public Operator { 313014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch EndOperator() 314014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch : Operator( // -- 315014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kEnd, Operator::kKontrol, // opcode 316014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "End", // name 317014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 0, 0, kInputCount, 0, 0, 0) {} // counts 318014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch }; 319014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define CACHED_END(input_count) \ 320014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch EndOperator<input_count> kEnd##input_count##Operator; 321014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CACHED_END_LIST(CACHED_END) 322014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#undef CACHED_END 323014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 324014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch template <size_t kInputCount> 325014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch struct ReturnOperator final : public Operator { 326014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch ReturnOperator() 327014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch : Operator( // -- 328014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kReturn, Operator::kNoThrow, // opcode 329014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "Return", // name 330014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch kInputCount, 1, 1, 0, 0, 1) {} // counts 331014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch }; 332014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define CACHED_RETURN(input_count) \ 333014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch ReturnOperator<input_count> kReturn##input_count##Operator; 334014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CACHED_RETURN_LIST(CACHED_RETURN) 335014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#undef CACHED_RETURN 336014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 337958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier template <BranchHint kBranchHint> 338014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch struct BranchOperator final : public Operator1<BranchHint> { 339958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier BranchOperator() 340014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch : Operator1<BranchHint>( // -- 341014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kBranch, Operator::kKontrol, // opcode 342014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "Branch", // name 343014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 1, 0, 1, 0, 0, 2, // counts 344014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch kBranchHint) {} // parameter 345958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier }; 346958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier BranchOperator<BranchHint::kNone> kBranchNoneOperator; 347958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier BranchOperator<BranchHint::kTrue> kBranchTrueOperator; 348958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier BranchOperator<BranchHint::kFalse> kBranchFalseOperator; 349958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 350014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch template <int kEffectInputCount> 351014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch struct EffectPhiOperator final : public Operator { 352014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch EffectPhiOperator() 353014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch : Operator( // -- 354014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kEffectPhi, Operator::kPure, // opcode 355014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "EffectPhi", // name 356014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 0, kEffectInputCount, 1, 0, 1, 0) {} // counts 357014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch }; 358014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define CACHED_EFFECT_PHI(input_count) \ 359014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch EffectPhiOperator<input_count> kEffectPhi##input_count##Operator; 360014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CACHED_EFFECT_PHI_LIST(CACHED_EFFECT_PHI) 361014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#undef CACHED_EFFECT_PHI 362014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 363958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier template <size_t kInputCount> 364014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch struct LoopOperator final : public Operator { 365958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier LoopOperator() 366014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch : Operator( // -- 367014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kLoop, Operator::kKontrol, // opcode 368014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "Loop", // name 369014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 0, 0, kInputCount, 0, 0, 1) {} // counts 370958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier }; 371958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#define CACHED_LOOP(input_count) \ 372958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier LoopOperator<input_count> kLoop##input_count##Operator; 373958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier CACHED_LOOP_LIST(CACHED_LOOP) 374958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#undef CACHED_LOOP 375958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 376958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier template <size_t kInputCount> 377014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch struct MergeOperator final : public Operator { 378958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier MergeOperator() 379014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch : Operator( // -- 380014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kMerge, Operator::kKontrol, // opcode 381014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "Merge", // name 382014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 0, 0, kInputCount, 0, 0, 1) {} // counts 383b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch }; 384958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#define CACHED_MERGE(input_count) \ 385958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier MergeOperator<input_count> kMerge##input_count##Operator; 386958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier CACHED_MERGE_LIST(CACHED_MERGE) 387958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#undef CACHED_MERGE 388958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 389014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch template <MachineRepresentation kRep, int kInputCount> 390014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch struct PhiOperator final : public Operator1<MachineRepresentation> { 391014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch PhiOperator() 392014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch : Operator1<MachineRepresentation>( //-- 393014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kPhi, Operator::kPure, // opcode 394014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "Phi", // name 395014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch kInputCount, 0, 1, 1, 0, 0, // counts 396014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch kRep) {} // parameter 397014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch }; 398014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define CACHED_PHI(rep, input_count) \ 399014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch PhiOperator<MachineRepresentation::rep, input_count> \ 400014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch kPhi##rep##input_count##Operator; 401014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CACHED_PHI_LIST(CACHED_PHI) 402014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#undef CACHED_PHI 403014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 404958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier template <int kIndex> 405014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch struct ParameterOperator final : public Operator1<ParameterInfo> { 406958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier ParameterOperator() 407014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch : Operator1<ParameterInfo>( // -- 408958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier IrOpcode::kParameter, Operator::kPure, // opcode 409958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier "Parameter", // name 410958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 1, 0, 0, 1, 0, 0, // counts, 411014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch ParameterInfo(kIndex, nullptr)) {} // parameter and name 412958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier }; 413958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#define CACHED_PARAMETER(index) \ 414958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier ParameterOperator<index> kParameter##index##Operator; 415958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier CACHED_PARAMETER_LIST(CACHED_PARAMETER) 416958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#undef CACHED_PARAMETER 417014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 418014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch template <size_t kIndex> 419014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch struct ProjectionOperator final : public Operator1<size_t> { 420014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch ProjectionOperator() 421014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch : Operator1<size_t>( // -- 422014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kProjection, // opcode 423014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Operator::kPure, // flags 424014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "Projection", // name 425014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 1, 0, 0, 1, 0, 0, // counts, 426014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch kIndex) {} // parameter 427014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch }; 428014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define CACHED_PROJECTION(index) \ 429014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch ProjectionOperator<index> kProjection##index##Operator; 430014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CACHED_PROJECTION_LIST(CACHED_PROJECTION) 431014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#undef CACHED_PROJECTION 432014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 433014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch template <int kInputCount> 434014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch struct StateValuesOperator final : public Operator { 435014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch StateValuesOperator() 436014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch : Operator( // -- 437014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kStateValues, // opcode 438014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Operator::kPure, // flags 439014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "StateValues", // name 440014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch kInputCount, 0, 0, 1, 0, 0) {} // counts 441014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch }; 442014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define CACHED_STATE_VALUES(input_count) \ 443014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch StateValuesOperator<input_count> kStateValues##input_count##Operator; 444014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CACHED_STATE_VALUES_LIST(CACHED_STATE_VALUES) 445014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#undef CACHED_STATE_VALUES 446b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 447b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 448b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 449958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernierstatic base::LazyInstance<CommonOperatorGlobalCache>::type kCache = 450b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LAZY_INSTANCE_INITIALIZER; 451b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 452b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 453b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochCommonOperatorBuilder::CommonOperatorBuilder(Zone* zone) 454958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier : cache_(kCache.Get()), zone_(zone) {} 455b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 456b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 457014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define CACHED(Name, properties, value_input_count, effect_input_count, \ 458014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch control_input_count, value_output_count, effect_output_count, \ 459014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch control_output_count) \ 460014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch const Operator* CommonOperatorBuilder::Name() { \ 461014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return &cache_.k##Name##Operator; \ 462958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier } 463958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily BernierCACHED_OP_LIST(CACHED) 464958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#undef CACHED 465958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 466958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 467014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Operator* CommonOperatorBuilder::End(size_t control_input_count) { 468014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch switch (control_input_count) { 469014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define CACHED_END(input_count) \ 470014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case input_count: \ 471014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return &cache_.kEnd##input_count##Operator; 472014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CACHED_END_LIST(CACHED_END) 473014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#undef CACHED_END 474014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch default: 475014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch break; 476014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 477014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Uncached. 478014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new (zone()) Operator( //-- 479014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kEnd, Operator::kKontrol, // opcode 480014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "End", // name 481014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 0, 0, control_input_count, 0, 0, 0); // counts 482014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 483014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 484014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 485014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Operator* CommonOperatorBuilder::Return(int value_input_count) { 486014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch switch (value_input_count) { 487014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define CACHED_RETURN(input_count) \ 488014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case input_count: \ 489014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return &cache_.kReturn##input_count##Operator; 490014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CACHED_RETURN_LIST(CACHED_RETURN) 491014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#undef CACHED_RETURN 492014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch default: 493014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch break; 494014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 495014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Uncached. 496014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new (zone()) Operator( //-- 497014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kReturn, Operator::kNoThrow, // opcode 498014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "Return", // name 499014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch value_input_count, 1, 1, 0, 0, 1); // counts 500014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 501014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 502014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 503958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernierconst Operator* CommonOperatorBuilder::Branch(BranchHint hint) { 504958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier switch (hint) { 505958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier case BranchHint::kNone: 506958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return &cache_.kBranchNoneOperator; 507958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier case BranchHint::kTrue: 508958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return &cache_.kBranchTrueOperator; 509958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier case BranchHint::kFalse: 510958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return &cache_.kBranchFalseOperator; 511b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 512958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier UNREACHABLE(); 513958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return nullptr; 514958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 515b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 516b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 517014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Operator* CommonOperatorBuilder::Deoptimize(DeoptimizeKind kind) { 518014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch switch (kind) { 519014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case DeoptimizeKind::kEager: 520014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return &cache_.kDeoptimizeEagerOperator; 521014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case DeoptimizeKind::kSoft: 522014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return &cache_.kDeoptimizeSoftOperator; 523014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 524014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch UNREACHABLE(); 525014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return nullptr; 526014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 527014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 528014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 529014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Operator* CommonOperatorBuilder::IfException(IfExceptionHint hint) { 530014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch switch (hint) { 531014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case IfExceptionHint::kLocallyCaught: 532014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return &cache_.kIfExceptionCOperator; 533014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case IfExceptionHint::kLocallyUncaught: 534014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return &cache_.kIfExceptionUOperator; 535014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 536014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch UNREACHABLE(); 537014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return nullptr; 538014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 539014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 540014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 541014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Operator* CommonOperatorBuilder::Switch(size_t control_output_count) { 542014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new (zone()) Operator( // -- 543014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kSwitch, Operator::kKontrol, // opcode 544014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "Switch", // name 545014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 1, 0, 1, 0, 0, control_output_count); // counts 546014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 547014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 548014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 549014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Operator* CommonOperatorBuilder::IfValue(int32_t index) { 550014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new (zone()) Operator1<int32_t>( // -- 551014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kIfValue, Operator::kKontrol, // opcode 552014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "IfValue", // name 553014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 0, 0, 1, 0, 0, 1, // counts 554014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch index); // parameter 555014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 556014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 557014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 558014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Operator* CommonOperatorBuilder::Start(int value_output_count) { 559958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return new (zone()) Operator( // -- 560958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier IrOpcode::kStart, Operator::kFoldable, // opcode 561958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier "Start", // name 562958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 0, 0, 0, value_output_count, 1, 1); // counts 563b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 564b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 565b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 566958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernierconst Operator* CommonOperatorBuilder::Loop(int control_input_count) { 567958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier switch (control_input_count) { 568958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#define CACHED_LOOP(input_count) \ 569958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier case input_count: \ 570958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return &cache_.kLoop##input_count##Operator; 571958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier CACHED_LOOP_LIST(CACHED_LOOP) 572958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#undef CACHED_LOOP 573958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier default: 574958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier break; 575958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier } 576958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier // Uncached. 577014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new (zone()) Operator( // -- 578014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kLoop, Operator::kKontrol, // opcode 579014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "Loop", // name 580014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 0, 0, control_input_count, 0, 0, 1); // counts 581b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 582b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 583b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 584958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernierconst Operator* CommonOperatorBuilder::Merge(int control_input_count) { 585958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier switch (control_input_count) { 586958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#define CACHED_MERGE(input_count) \ 587958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier case input_count: \ 588958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return &cache_.kMerge##input_count##Operator; 589958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier CACHED_MERGE_LIST(CACHED_MERGE) 590958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#undef CACHED_MERGE 591958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier default: 592958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier break; 593958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier } 594958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier // Uncached. 595014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new (zone()) Operator( // -- 596014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kMerge, Operator::kKontrol, // opcode 597014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "Merge", // name 598014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 0, 0, control_input_count, 0, 0, 1); // counts 599b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 600b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 601b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 602014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Operator* CommonOperatorBuilder::Parameter(int index, 603014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch const char* debug_name) { 604014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch if (!debug_name) { 605014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch switch (index) { 606958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#define CACHED_PARAMETER(index) \ 607958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier case index: \ 608958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return &cache_.kParameter##index##Operator; 609014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CACHED_PARAMETER_LIST(CACHED_PARAMETER) 610958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#undef CACHED_PARAMETER 611014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch default: 612014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch break; 613014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 614958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier } 615958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier // Uncached. 616014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new (zone()) Operator1<ParameterInfo>( // -- 617014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kParameter, Operator::kPure, // opcode 618014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "Parameter", // name 619014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 1, 0, 0, 1, 0, 0, // counts 620014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch ParameterInfo(index, debug_name)); // parameter info 621014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 622014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 623014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 624014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Operator* CommonOperatorBuilder::OsrValue(int index) { 625014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new (zone()) Operator1<int>( // -- 626014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kOsrValue, Operator::kNoProperties, // opcode 627014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "OsrValue", // name 628014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 0, 0, 1, 1, 0, 0, // counts 629014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch index); // parameter 630b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 631b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 632b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 633b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst Operator* CommonOperatorBuilder::Int32Constant(int32_t value) { 634958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return new (zone()) Operator1<int32_t>( // -- 635958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier IrOpcode::kInt32Constant, Operator::kPure, // opcode 636958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier "Int32Constant", // name 637958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 0, 0, 0, 1, 0, 0, // counts 638958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier value); // parameter 639b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 640b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 641b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 642b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst Operator* CommonOperatorBuilder::Int64Constant(int64_t value) { 643958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return new (zone()) Operator1<int64_t>( // -- 644958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier IrOpcode::kInt64Constant, Operator::kPure, // opcode 645958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier "Int64Constant", // name 646958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 0, 0, 0, 1, 0, 0, // counts 647958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier value); // parameter 648b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 649b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 650b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 651b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst Operator* CommonOperatorBuilder::Float32Constant(volatile float value) { 652014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new (zone()) Operator1<float>( // -- 653014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kFloat32Constant, Operator::kPure, // opcode 654014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "Float32Constant", // name 655014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 0, 0, 0, 1, 0, 0, // counts 656014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch value); // parameter 657b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 658b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 659b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 660b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst Operator* CommonOperatorBuilder::Float64Constant(volatile double value) { 661014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new (zone()) Operator1<double>( // -- 662014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kFloat64Constant, Operator::kPure, // opcode 663014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "Float64Constant", // name 664014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 0, 0, 0, 1, 0, 0, // counts 665014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch value); // parameter 666b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 667b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 668b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 669b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst Operator* CommonOperatorBuilder::ExternalConstant( 670b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch const ExternalReference& value) { 671958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return new (zone()) Operator1<ExternalReference>( // -- 672958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier IrOpcode::kExternalConstant, Operator::kPure, // opcode 673958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier "ExternalConstant", // name 674958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 0, 0, 0, 1, 0, 0, // counts 675958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier value); // parameter 676b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 677b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 678b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 679b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst Operator* CommonOperatorBuilder::NumberConstant(volatile double value) { 680014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new (zone()) Operator1<double>( // -- 681014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kNumberConstant, Operator::kPure, // opcode 682014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "NumberConstant", // name 683014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 0, 0, 0, 1, 0, 0, // counts 684014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch value); // parameter 685b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 686b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 687b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 688b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst Operator* CommonOperatorBuilder::HeapConstant( 689014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch const Handle<HeapObject>& value) { 690014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new (zone()) Operator1<Handle<HeapObject>>( // -- 691958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier IrOpcode::kHeapConstant, Operator::kPure, // opcode 692958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier "HeapConstant", // name 693958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 0, 0, 0, 1, 0, 0, // counts 694958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier value); // parameter 695b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 696b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 697bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdochconst Operator* CommonOperatorBuilder::RelocatableInt32Constant( 698bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch int32_t value, RelocInfo::Mode rmode) { 699bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch return new (zone()) Operator1<RelocatablePtrConstantInfo>( // -- 700bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch IrOpcode::kRelocatableInt32Constant, Operator::kPure, // opcode 701bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch "RelocatableInt32Constant", // name 702bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch 0, 0, 0, 1, 0, 0, // counts 703bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch RelocatablePtrConstantInfo(value, rmode)); // parameter 704bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch} 705bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch 706bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdochconst Operator* CommonOperatorBuilder::RelocatableInt64Constant( 707bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch int64_t value, RelocInfo::Mode rmode) { 708bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch return new (zone()) Operator1<RelocatablePtrConstantInfo>( // -- 709bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch IrOpcode::kRelocatableInt64Constant, Operator::kPure, // opcode 710bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch "RelocatableInt64Constant", // name 711bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch 0, 0, 0, 1, 0, 0, // counts 712bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch RelocatablePtrConstantInfo(value, rmode)); // parameter 713bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch} 714b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 715014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Operator* CommonOperatorBuilder::Select(MachineRepresentation rep, 716958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier BranchHint hint) { 717958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return new (zone()) Operator1<SelectParameters>( // -- 718958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier IrOpcode::kSelect, Operator::kPure, // opcode 719958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier "Select", // name 720958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 3, 0, 0, 1, 0, 0, // counts 721014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch SelectParameters(rep, hint)); // parameter 722b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 723b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 724b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 725014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Operator* CommonOperatorBuilder::Phi(MachineRepresentation rep, 726014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch int value_input_count) { 727014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch DCHECK(value_input_count > 0); // Disallow empty phis. 728014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define CACHED_PHI(kRep, kValueInputCount) \ 729014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch if (MachineRepresentation::kRep == rep && \ 730014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch kValueInputCount == value_input_count) { \ 731014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return &cache_.kPhi##kRep##kValueInputCount##Operator; \ 732014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 733014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CACHED_PHI_LIST(CACHED_PHI) 734014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#undef CACHED_PHI 735014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Uncached. 736014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new (zone()) Operator1<MachineRepresentation>( // -- 737014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kPhi, Operator::kPure, // opcode 738014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "Phi", // name 739014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch value_input_count, 0, 1, 1, 0, 0, // counts 740014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch rep); // parameter 741014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 742014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 743014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 744014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Operator* CommonOperatorBuilder::EffectPhi(int effect_input_count) { 745014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch DCHECK(effect_input_count > 0); // Disallow empty effect phis. 746014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch switch (effect_input_count) { 747014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define CACHED_EFFECT_PHI(input_count) \ 748014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case input_count: \ 749014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return &cache_.kEffectPhi##input_count##Operator; 750014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CACHED_EFFECT_PHI_LIST(CACHED_EFFECT_PHI) 751014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#undef CACHED_EFFECT_PHI 752014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch default: 753014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch break; 754014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 755014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Uncached. 756958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return new (zone()) Operator( // -- 757958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier IrOpcode::kEffectPhi, Operator::kPure, // opcode 758958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier "EffectPhi", // name 759014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 0, effect_input_count, 1, 0, 1, 0); // counts 760b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 761b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 762b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 763b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst Operator* CommonOperatorBuilder::StateValues(int arguments) { 764014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch switch (arguments) { 765014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define CACHED_STATE_VALUES(arguments) \ 766014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case arguments: \ 767014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return &cache_.kStateValues##arguments##Operator; 768014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CACHED_STATE_VALUES_LIST(CACHED_STATE_VALUES) 769014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#undef CACHED_STATE_VALUES 770014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch default: 771014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch break; 772014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 773014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Uncached. 774958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return new (zone()) Operator( // -- 775958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier IrOpcode::kStateValues, Operator::kPure, // opcode 776958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier "StateValues", // name 777958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier arguments, 0, 0, 1, 0, 0); // counts 778b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 779b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 780b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 781014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Operator* CommonOperatorBuilder::ObjectState(int pointer_slots, int id) { 782014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new (zone()) Operator1<int>( // -- 783014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kObjectState, Operator::kPure, // opcode 784014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "ObjectState", // name 785014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch pointer_slots, 0, 0, 1, 0, 0, id); // counts 786014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 787014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 788014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 789014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Operator* CommonOperatorBuilder::TypedStateValues( 790014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch const ZoneVector<MachineType>* types) { 791014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new (zone()) Operator1<const ZoneVector<MachineType>*>( // -- 792014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kTypedStateValues, Operator::kPure, // opcode 793014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "TypedStateValues", // name 794014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch static_cast<int>(types->size()), 0, 0, 1, 0, 0, types); // counts 795014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 796014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 797014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 798b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst Operator* CommonOperatorBuilder::FrameState( 799014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch BailoutId bailout_id, OutputFrameStateCombine state_combine, 800014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch const FrameStateFunctionInfo* function_info) { 801014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch FrameStateInfo state_info(bailout_id, state_combine, function_info); 802014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new (zone()) Operator1<FrameStateInfo>( // -- 803014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kFrameState, Operator::kPure, // opcode 804014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "FrameState", // name 805014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 5, 0, 0, 1, 0, 0, // counts 806014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch state_info); // parameter 807b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 808b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 809b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 810b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst Operator* CommonOperatorBuilder::Call(const CallDescriptor* descriptor) { 811014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch class CallOperator final : public Operator1<const CallDescriptor*> { 812b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 813014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch explicit CallOperator(const CallDescriptor* descriptor) 814b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch : Operator1<const CallDescriptor*>( 815014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kCall, descriptor->properties(), "Call", 816958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier descriptor->InputCount() + descriptor->FrameStateCount(), 817958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier Operator::ZeroIfPure(descriptor->properties()), 818014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Operator::ZeroIfEliminatable(descriptor->properties()), 819958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier descriptor->ReturnCount(), 820014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Operator::ZeroIfPure(descriptor->properties()), 821014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Operator::ZeroIfNoThrow(descriptor->properties()), descriptor) {} 822958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 823014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintParameter(std::ostream& os) const override { 824958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier os << "[" << *parameter() << "]"; 825b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 826b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch }; 827014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new (zone()) CallOperator(descriptor); 828014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 829014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 830014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 831014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Operator* CommonOperatorBuilder::TailCall( 832014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch const CallDescriptor* descriptor) { 833014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch class TailCallOperator final : public Operator1<const CallDescriptor*> { 834014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch public: 835014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch explicit TailCallOperator(const CallDescriptor* descriptor) 836014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch : Operator1<const CallDescriptor*>( 837014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kTailCall, descriptor->properties(), "TailCall", 838014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch descriptor->InputCount() + descriptor->FrameStateCount(), 1, 1, 0, 839014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 0, 1, descriptor) {} 840014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 841014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void PrintParameter(std::ostream& os) const override { 842014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch os << "[" << *parameter() << "]"; 843014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 844014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch }; 845014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new (zone()) TailCallOperator(descriptor); 846b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 847b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 848b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 849b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst Operator* CommonOperatorBuilder::Projection(size_t index) { 850014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch switch (index) { 851014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define CACHED_PROJECTION(index) \ 852014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case index: \ 853014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return &cache_.kProjection##index##Operator; 854014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CACHED_PROJECTION_LIST(CACHED_PROJECTION) 855014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#undef CACHED_PROJECTION 856014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch default: 857014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch break; 858014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 859014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Uncached. 860014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new (zone()) Operator1<size_t>( // -- 861014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IrOpcode::kProjection, // opcode 862014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Operator::kFoldable | Operator::kNoThrow, // flags 863014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "Projection", // name 864014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 1, 0, 0, 1, 0, 0, // counts 865014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch index); // parameter 866014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 867014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 868014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 869014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Operator* CommonOperatorBuilder::ResizeMergeOrPhi(const Operator* op, 870014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch int size) { 871014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch if (op->opcode() == IrOpcode::kPhi) { 872014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return Phi(PhiRepresentationOf(op), size); 873014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } else if (op->opcode() == IrOpcode::kEffectPhi) { 874014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return EffectPhi(size); 875014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } else if (op->opcode() == IrOpcode::kMerge) { 876014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return Merge(size); 877014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } else if (op->opcode() == IrOpcode::kLoop) { 878014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return Loop(size); 879014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } else { 880014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch UNREACHABLE(); 881014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return nullptr; 882014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 883014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 884014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 885014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 886014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst FrameStateFunctionInfo* 887014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochCommonOperatorBuilder::CreateFrameStateFunctionInfo( 888014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch FrameStateType type, int parameter_count, int local_count, 889109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch Handle<SharedFunctionInfo> shared_info) { 890014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new (zone()->New(sizeof(FrameStateFunctionInfo))) 891109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch FrameStateFunctionInfo(type, parameter_count, local_count, shared_info); 892b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 893b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 894b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} // namespace compiler 895b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} // namespace internal 896b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} // namespace v8 897