| Index: src/compiler/simplified-lowering.cc
|
| diff --git a/src/compiler/simplified-lowering.cc b/src/compiler/simplified-lowering.cc
|
| index 9d00d44e329a39d0e60ebd22722a85d33ef81b72..bdc47879961e62fbcf8b730226b8d993789cb816 100644
|
| --- a/src/compiler/simplified-lowering.cc
|
| +++ b/src/compiler/simplified-lowering.cc
|
| @@ -73,75 +73,80 @@ namespace {
|
| // need the signedness information to produce the correct value.
|
| class UseInfo {
|
| public:
|
| - UseInfo(MachineType preferred, Truncation truncation)
|
| - : preferred_(preferred), truncation_(truncation) {
|
| - DCHECK(preferred == (preferred & kRepMask));
|
| - }
|
| + UseInfo(MachineRepresentation preferred, Truncation truncation)
|
| + : preferred_(preferred), truncation_(truncation) {}
|
| static UseInfo TruncatingWord32() {
|
| - return UseInfo(kRepWord32, Truncation::Word32());
|
| + return UseInfo(MachineRepresentation::kWord32, Truncation::Word32());
|
| }
|
| static UseInfo TruncatingWord64() {
|
| - return UseInfo(kRepWord64, Truncation::Word64());
|
| + return UseInfo(MachineRepresentation::kWord64, Truncation::Word64());
|
| + }
|
| + static UseInfo Bool() {
|
| + return UseInfo(MachineRepresentation::kBit, Truncation::Bool());
|
| }
|
| - static UseInfo Bool() { return UseInfo(kRepBit, Truncation::Bool()); }
|
| static UseInfo Float32() {
|
| - return UseInfo(kRepFloat32, Truncation::Float32());
|
| + return UseInfo(MachineRepresentation::kFloat32, Truncation::Float32());
|
| }
|
| static UseInfo Float64() {
|
| - return UseInfo(kRepFloat64, Truncation::Float64());
|
| + return UseInfo(MachineRepresentation::kFloat64, Truncation::Float64());
|
| }
|
| static UseInfo PointerInt() {
|
| return kPointerSize == 4 ? TruncatingWord32() : TruncatingWord64();
|
| }
|
| - static UseInfo AnyTagged() { return UseInfo(kRepTagged, Truncation::Any()); }
|
| + static UseInfo AnyTagged() {
|
| + return UseInfo(MachineRepresentation::kTagged, Truncation::Any());
|
| + }
|
|
|
| // Undetermined representation.
|
| - static UseInfo Any() { return UseInfo(kMachNone, Truncation::Any()); }
|
| - static UseInfo None() { return UseInfo(kMachNone, Truncation::None()); }
|
| + static UseInfo Any() {
|
| + return UseInfo(MachineRepresentation::kNone, Truncation::Any());
|
| + }
|
| + static UseInfo None() {
|
| + return UseInfo(MachineRepresentation::kNone, Truncation::None());
|
| + }
|
|
|
| // Truncation to a representation that is smaller than the preferred
|
| // one.
|
| static UseInfo Float64TruncatingToWord32() {
|
| - return UseInfo(kRepFloat64, Truncation::Word32());
|
| + return UseInfo(MachineRepresentation::kFloat64, Truncation::Word32());
|
| }
|
| static UseInfo Word64TruncatingToWord32() {
|
| - return UseInfo(kRepWord64, Truncation::Word32());
|
| + return UseInfo(MachineRepresentation::kWord64, Truncation::Word32());
|
| }
|
| static UseInfo AnyTruncatingToBool() {
|
| - return UseInfo(kMachNone, Truncation::Bool());
|
| + return UseInfo(MachineRepresentation::kNone, Truncation::Bool());
|
| }
|
|
|
| - MachineType preferred() const { return preferred_; }
|
| + MachineRepresentation preferred() const { return preferred_; }
|
| Truncation truncation() const { return truncation_; }
|
|
|
| private:
|
| - MachineType preferred_;
|
| + MachineRepresentation preferred_;
|
| Truncation truncation_;
|
| };
|
|
|
|
|
| -UseInfo UseInfoFromMachineType(MachineType type) {
|
| - MachineTypeUnion rep = RepresentationOf(type);
|
| - DCHECK((rep & kTypeMask) == 0);
|
| -
|
| - if (rep & kRepTagged) return UseInfo::AnyTagged();
|
| - if (rep & kRepFloat64) {
|
| - DCHECK((rep & kRepWord64) == 0);
|
| +UseInfo TruncatingUseInfoFromRepresentation(MachineRepresentation rep) {
|
| + switch (rep) {
|
| + case MachineRepresentation::kTagged:
|
| + return UseInfo::AnyTagged();
|
| + case MachineRepresentation::kFloat64:
|
| return UseInfo::Float64();
|
| - }
|
| - if (rep & kRepFloat32) {
|
| - if (rep == kRepFloat32) return UseInfo::Float32();
|
| - return UseInfo::AnyTagged();
|
| - }
|
| - if (rep & kRepWord64) {
|
| + case MachineRepresentation::kFloat32:
|
| + return UseInfo::Float32();
|
| + case MachineRepresentation::kWord64:
|
| return UseInfo::TruncatingWord64();
|
| - }
|
| - if (rep & (kRepWord32 | kRepWord16 | kRepWord8)) {
|
| - CHECK(!(rep & kRepBit));
|
| + case MachineRepresentation::kWord8:
|
| + case MachineRepresentation::kWord16:
|
| + case MachineRepresentation::kWord32:
|
| return UseInfo::TruncatingWord32();
|
| + case MachineRepresentation::kBit:
|
| + return UseInfo::Bool();
|
| + case MachineRepresentation::kNone:
|
| + break;
|
| }
|
| - DCHECK(rep & kRepBit);
|
| - return UseInfo::Bool();
|
| + UNREACHABLE();
|
| + return UseInfo::None();
|
| }
|
|
|
|
|
| @@ -158,24 +163,27 @@ UseInfo UseInfoForBasePointer(const ElementAccess& access) {
|
| #ifdef DEBUG
|
| // Helpers for monotonicity checking.
|
|
|
| -bool MachineTypeIsSubtype(MachineType t1, MachineType t2) {
|
| +bool MachineTypeIsSubtype(MachineSemantic t1, MachineSemantic t2) {
|
| switch (t1) {
|
| - case kMachNone:
|
| + case MachineSemantic::kNone:
|
| return true;
|
| - case kTypeBool:
|
| - return t2 == kTypeBool || t2 == kTypeNumber || t2 == kTypeAny;
|
| - case kTypeInt32:
|
| - return t2 == kTypeInt32 || t2 == kTypeNumber || t2 == kTypeAny;
|
| - case kTypeUint32:
|
| - return t2 == kTypeUint32 || t2 == kTypeNumber || t2 == kTypeAny;
|
| - case kTypeInt64:
|
| - return t2 == kTypeInt64;
|
| - case kTypeUint64:
|
| - return t2 == kTypeUint64;
|
| - case kTypeNumber:
|
| - return t2 == kTypeNumber || t2 == kTypeAny;
|
| - case kTypeAny:
|
| - return t2 == kTypeAny;
|
| + case MachineSemantic::kBool:
|
| + return t2 == MachineSemantic::kBool || t2 == MachineSemantic::kNumber ||
|
| + t2 == MachineSemantic::kAny;
|
| + case MachineSemantic::kInt32:
|
| + return t2 == MachineSemantic::kInt32 || t2 == MachineSemantic::kNumber ||
|
| + t2 == MachineSemantic::kAny;
|
| + case MachineSemantic::kUint32:
|
| + return t2 == MachineSemantic::kUint32 || t2 == MachineSemantic::kNumber ||
|
| + t2 == MachineSemantic::kAny;
|
| + case MachineSemantic::kInt64:
|
| + return t2 == MachineSemantic::kInt64;
|
| + case MachineSemantic::kUint64:
|
| + return t2 == MachineSemantic::kUint64;
|
| + case MachineSemantic::kNumber:
|
| + return t2 == MachineSemantic::kNumber || t2 == MachineSemantic::kAny;
|
| + case MachineSemantic::kAny:
|
| + return t2 == MachineSemantic::kAny;
|
| default:
|
| break;
|
| }
|
| @@ -184,30 +192,45 @@ bool MachineTypeIsSubtype(MachineType t1, MachineType t2) {
|
| }
|
|
|
|
|
| -bool MachineRepresentationIsSubtype(MachineType r1, MachineType r2) {
|
| +bool MachineRepresentationIsSubtype(MachineRepresentation r1,
|
| + MachineRepresentation r2) {
|
| switch (r1) {
|
| - case kMachNone:
|
| + case MachineRepresentation::kNone:
|
| return true;
|
| - case kRepBit:
|
| - return r2 == kRepBit || r2 == kRepTagged;
|
| - case kRepWord8:
|
| - return r2 == kRepWord8 || r2 == kRepWord16 || r2 == kRepWord32 ||
|
| - r2 == kRepWord64 || r2 == kRepFloat32 || r2 == kRepFloat64 ||
|
| - r2 == kRepTagged;
|
| - case kRepWord16:
|
| - return r2 == kRepWord16 || r2 == kRepWord32 || r2 == kRepWord64 ||
|
| - r2 == kRepFloat32 || r2 == kRepFloat64 || r2 == kRepTagged;
|
| - case kRepWord32:
|
| - return r2 == kRepWord32 || r2 == kRepWord64 || r2 == kRepFloat64 ||
|
| - r2 == kRepTagged;
|
| - case kRepWord64:
|
| - return r2 == kRepWord64;
|
| - case kRepFloat32:
|
| - return r2 == kRepFloat32 || r2 == kRepFloat64 || r2 == kRepTagged;
|
| - case kRepFloat64:
|
| - return r2 == kRepFloat64 || r2 == kRepTagged;
|
| - case kRepTagged:
|
| - return r2 == kRepTagged;
|
| + case MachineRepresentation::kBit:
|
| + return r2 == MachineRepresentation::kBit ||
|
| + r2 == MachineRepresentation::kTagged;
|
| + case MachineRepresentation::kWord8:
|
| + return r2 == MachineRepresentation::kWord8 ||
|
| + r2 == MachineRepresentation::kWord16 ||
|
| + r2 == MachineRepresentation::kWord32 ||
|
| + r2 == MachineRepresentation::kWord64 ||
|
| + r2 == MachineRepresentation::kFloat32 ||
|
| + r2 == MachineRepresentation::kFloat64 ||
|
| + r2 == MachineRepresentation::kTagged;
|
| + case MachineRepresentation::kWord16:
|
| + return r2 == MachineRepresentation::kWord16 ||
|
| + r2 == MachineRepresentation::kWord32 ||
|
| + r2 == MachineRepresentation::kWord64 ||
|
| + r2 == MachineRepresentation::kFloat32 ||
|
| + r2 == MachineRepresentation::kFloat64 ||
|
| + r2 == MachineRepresentation::kTagged;
|
| + case MachineRepresentation::kWord32:
|
| + return r2 == MachineRepresentation::kWord32 ||
|
| + r2 == MachineRepresentation::kWord64 ||
|
| + r2 == MachineRepresentation::kFloat64 ||
|
| + r2 == MachineRepresentation::kTagged;
|
| + case MachineRepresentation::kWord64:
|
| + return r2 == MachineRepresentation::kWord64;
|
| + case MachineRepresentation::kFloat32:
|
| + return r2 == MachineRepresentation::kFloat32 ||
|
| + r2 == MachineRepresentation::kFloat64 ||
|
| + r2 == MachineRepresentation::kTagged;
|
| + case MachineRepresentation::kFloat64:
|
| + return r2 == MachineRepresentation::kFloat64 ||
|
| + r2 == MachineRepresentation::kTagged;
|
| + case MachineRepresentation::kTagged:
|
| + return r2 == MachineRepresentation::kTagged;
|
| default:
|
| break;
|
| }
|
| @@ -216,12 +239,10 @@ bool MachineRepresentationIsSubtype(MachineType r1, MachineType r2) {
|
| }
|
|
|
|
|
| -bool MachineTypeRepIsSubtype(MachineTypeUnion m1, MachineTypeUnion m2) {
|
| - return MachineTypeIsSubtype(static_cast<MachineType>(m1 & kTypeMask),
|
| - static_cast<MachineType>(m2 & kTypeMask)) &&
|
| - MachineRepresentationIsSubtype(
|
| - static_cast<MachineType>(m1 & kRepMask),
|
| - static_cast<MachineType>(m2 & kRepMask));
|
| +bool MachineTypeRepIsSubtype(MachineType m1, MachineType m2) {
|
| + return MachineTypeIsSubtype(m1.semantic(), m2.semantic()) &&
|
| + MachineRepresentationIsSubtype(m1.representation(),
|
| + m2.representation());
|
| }
|
|
|
|
|
| @@ -271,13 +292,13 @@ class RepresentationSelector {
|
| void set_visited() { visited_ = true; }
|
| bool visited() const { return visited_; }
|
| Truncation truncation() const { return truncation_; }
|
| - void set_output_type(MachineTypeUnion type) { output_ = type; }
|
| - MachineTypeUnion output_type() const { return output_; }
|
| + void set_output_type(MachineType type) { output_ = type; }
|
| + MachineType output_type() const { return output_; }
|
|
|
| private:
|
| bool queued_ = false; // Bookkeeping for the traversal.
|
| bool visited_ = false; // Bookkeeping for the traversal.
|
| - MachineTypeUnion output_ = kMachNone; // Output type of the node.
|
| + MachineType output_ = MachineType::None(); // Output type of the node.
|
| Truncation truncation_ = Truncation::None(); // Information about uses.
|
| };
|
|
|
| @@ -394,12 +415,10 @@ class RepresentationSelector {
|
|
|
| bool lower() { return phase_ == LOWER; }
|
|
|
| - void SetOutput(Node* node, MachineTypeUnion output) {
|
| + void SetOutput(Node* node, MachineType output) {
|
| // Every node should have at most one output representation. Note that
|
| // phis can have 0, if they have not been used in a representation-inducing
|
| // instruction.
|
| - DCHECK((output & kRepMask) == 0 ||
|
| - base::bits::IsPowerOfTwo32(output & kRepMask));
|
| NodeInfo* info = GetInfo(node);
|
| DCHECK(MachineTypeRepIsSubtype(info->output_type(), output));
|
| info->set_output_type(output);
|
| @@ -414,10 +433,10 @@ class RepresentationSelector {
|
| void ConvertInput(Node* node, int index, UseInfo use) {
|
| Node* input = node->InputAt(index);
|
| // In the change phase, insert a change before the use if necessary.
|
| - if (use.preferred() == kMachNone)
|
| + if (use.preferred() == MachineRepresentation::kNone)
|
| return; // No input requirement on the use.
|
| - MachineTypeUnion output = GetInfo(input)->output_type();
|
| - if ((output & kRepMask) != use.preferred()) {
|
| + MachineType output = GetInfo(input)->output_type();
|
| + if (output.representation() != use.preferred()) {
|
| // Output representation doesn't match usage.
|
| TRACE(" change: #%d:%s(@%d #%d:%s) ", node->id(), node->op()->mnemonic(),
|
| index, input->id(), input->op()->mnemonic());
|
| @@ -472,7 +491,7 @@ class RepresentationSelector {
|
|
|
| // Helper for binops of the R x L -> O variety.
|
| void VisitBinop(Node* node, UseInfo left_use, UseInfo right_use,
|
| - MachineTypeUnion output) {
|
| + MachineType output) {
|
| DCHECK_EQ(2, node->op()->ValueInputCount());
|
| ProcessInput(node, 0, left_use);
|
| ProcessInput(node, 1, right_use);
|
| @@ -483,95 +502,95 @@ class RepresentationSelector {
|
| }
|
|
|
| // Helper for binops of the I x I -> O variety.
|
| - void VisitBinop(Node* node, UseInfo input_use, MachineTypeUnion output) {
|
| + void VisitBinop(Node* node, UseInfo input_use, MachineType output) {
|
| VisitBinop(node, input_use, input_use, output);
|
| }
|
|
|
| // Helper for unops of the I -> O variety.
|
| - void VisitUnop(Node* node, UseInfo input_use, MachineTypeUnion output) {
|
| + void VisitUnop(Node* node, UseInfo input_use, MachineType output) {
|
| DCHECK_EQ(1, node->InputCount());
|
| ProcessInput(node, 0, input_use);
|
| SetOutput(node, output);
|
| }
|
|
|
| // Helper for leaf nodes.
|
| - void VisitLeaf(Node* node, MachineTypeUnion output) {
|
| + void VisitLeaf(Node* node, MachineType output) {
|
| DCHECK_EQ(0, node->InputCount());
|
| SetOutput(node, output);
|
| }
|
|
|
| // Helpers for specific types of binops.
|
| void VisitFloat64Binop(Node* node) {
|
| - VisitBinop(node, UseInfo::Float64(), kMachFloat64);
|
| + VisitBinop(node, UseInfo::Float64(), MachineType::Float64());
|
| }
|
| void VisitInt32Binop(Node* node) {
|
| - VisitBinop(node, UseInfo::TruncatingWord32(), kMachInt32);
|
| + VisitBinop(node, UseInfo::TruncatingWord32(), MachineType::Int32());
|
| }
|
| void VisitUint32Binop(Node* node) {
|
| - VisitBinop(node, UseInfo::TruncatingWord32(), kMachUint32);
|
| + VisitBinop(node, UseInfo::TruncatingWord32(), MachineType::Uint32());
|
| }
|
| void VisitInt64Binop(Node* node) {
|
| - VisitBinop(node, UseInfo::TruncatingWord64(), kMachInt64);
|
| + VisitBinop(node, UseInfo::TruncatingWord64(), MachineType::Int64());
|
| }
|
| void VisitUint64Binop(Node* node) {
|
| - VisitBinop(node, UseInfo::TruncatingWord64(), kMachUint64);
|
| + VisitBinop(node, UseInfo::TruncatingWord64(), MachineType::Uint64());
|
| }
|
| void VisitFloat64Cmp(Node* node) {
|
| - VisitBinop(node, UseInfo::Float64(), kMachBool);
|
| + VisitBinop(node, UseInfo::Float64(), MachineType::Bool());
|
| }
|
| void VisitInt32Cmp(Node* node) {
|
| - VisitBinop(node, UseInfo::TruncatingWord32(), kMachBool);
|
| + VisitBinop(node, UseInfo::TruncatingWord32(), MachineType::Bool());
|
| }
|
| void VisitUint32Cmp(Node* node) {
|
| - VisitBinop(node, UseInfo::TruncatingWord32(), kMachBool);
|
| + VisitBinop(node, UseInfo::TruncatingWord32(), MachineType::Bool());
|
| }
|
| void VisitInt64Cmp(Node* node) {
|
| - VisitBinop(node, UseInfo::TruncatingWord64(), kMachBool);
|
| + VisitBinop(node, UseInfo::TruncatingWord64(), MachineType::Bool());
|
| }
|
| void VisitUint64Cmp(Node* node) {
|
| - VisitBinop(node, UseInfo::TruncatingWord64(), kMachBool);
|
| + VisitBinop(node, UseInfo::TruncatingWord64(), MachineType::Bool());
|
| }
|
|
|
| // Infer representation for phi-like nodes.
|
| - static MachineType GetRepresentationForPhi(Node* node, Truncation use) {
|
| + static MachineRepresentation GetRepresentationForPhi(Node* node,
|
| + Truncation use) {
|
| // Phis adapt to the output representation their uses demand.
|
| Type* upper = NodeProperties::GetType(node);
|
| if (upper->Is(Type::Signed32()) || upper->Is(Type::Unsigned32())) {
|
| // We are within 32 bits range => pick kRepWord32.
|
| - return kRepWord32;
|
| + return MachineRepresentation::kWord32;
|
| } else if (use.TruncatesToWord32()) {
|
| // We only use 32 bits.
|
| - return kRepWord32;
|
| + return MachineRepresentation::kWord32;
|
| } else if (upper->Is(Type::Boolean())) {
|
| // multiple uses => pick kRepBit.
|
| - return kRepBit;
|
| + return MachineRepresentation::kBit;
|
| } else if (upper->Is(Type::Number())) {
|
| // multiple uses => pick kRepFloat64.
|
| - return kRepFloat64;
|
| + return MachineRepresentation::kFloat64;
|
| } else if (upper->Is(Type::Internal())) {
|
| - return kMachPtr;
|
| + return MachineType::PointerRepresentation();
|
| }
|
| - return kRepTagged;
|
| + return MachineRepresentation::kTagged;
|
| }
|
|
|
| // Helper for handling selects.
|
| void VisitSelect(Node* node, Truncation truncation,
|
| SimplifiedLowering* lowering) {
|
| ProcessInput(node, 0, UseInfo::Bool());
|
| - MachineType output = GetRepresentationForPhi(node, truncation);
|
| + MachineRepresentation output = GetRepresentationForPhi(node, truncation);
|
|
|
| Type* upper = NodeProperties::GetType(node);
|
| MachineType output_type =
|
| - static_cast<MachineType>(changer_->TypeFromUpperBound(upper) | output);
|
| + MachineType(output, changer_->TypeFromUpperBound(upper));
|
| SetOutput(node, output_type);
|
|
|
| if (lower()) {
|
| // Update the select operator.
|
| SelectParameters p = SelectParametersOf(node->op());
|
| - MachineType type = static_cast<MachineType>(output_type);
|
| - if (type != p.type()) {
|
| + if (output != p.representation()) {
|
| NodeProperties::ChangeOp(node,
|
| - lowering->common()->Select(type, p.hint()));
|
| + lowering->common()->Select(output, p.hint()));
|
| }
|
| }
|
| // Convert inputs to the output representation of this phi, pass the
|
| @@ -584,20 +603,19 @@ class RepresentationSelector {
|
| // Helper for handling phis.
|
| void VisitPhi(Node* node, Truncation truncation,
|
| SimplifiedLowering* lowering) {
|
| - MachineType output = GetRepresentationForPhi(node, truncation);
|
| + MachineRepresentation output = GetRepresentationForPhi(node, truncation);
|
|
|
| Type* upper = NodeProperties::GetType(node);
|
| MachineType output_type =
|
| - static_cast<MachineType>(changer_->TypeFromUpperBound(upper) | output);
|
| + MachineType(output, changer_->TypeFromUpperBound(upper));
|
| SetOutput(node, output_type);
|
|
|
| int values = node->op()->ValueInputCount();
|
|
|
| if (lower()) {
|
| // Update the phi operator.
|
| - MachineType type = static_cast<MachineType>(output_type);
|
| - if (type != OpParameter<MachineType>(node)) {
|
| - NodeProperties::ChangeOp(node, lowering->common()->Phi(type, values));
|
| + if (output != PhiRepresentationOf(node->op())) {
|
| + NodeProperties::ChangeOp(node, lowering->common()->Phi(output, values));
|
| }
|
| }
|
|
|
| @@ -619,7 +637,8 @@ class RepresentationSelector {
|
| // The target of the call.
|
| ProcessInput(node, i, UseInfo::None());
|
| } else if ((i - 1) < params) {
|
| - ProcessInput(node, i, UseInfoFromMachineType(sig->GetParam(i - 1)));
|
| + ProcessInput(node, i, TruncatingUseInfoFromRepresentation(
|
| + sig->GetParam(i - 1).representation()));
|
| } else {
|
| ProcessInput(node, i, UseInfo::None());
|
| }
|
| @@ -628,7 +647,7 @@ class RepresentationSelector {
|
| if (sig->return_count() > 0) {
|
| SetOutput(node, desc->GetMachineSignature()->GetReturn());
|
| } else {
|
| - SetOutput(node, kMachAnyTagged);
|
| + SetOutput(node, MachineType::AnyTagged());
|
| }
|
| }
|
|
|
| @@ -643,13 +662,13 @@ class RepresentationSelector {
|
| new (zone->New(sizeof(ZoneVector<MachineType>)))
|
| ZoneVector<MachineType>(node->InputCount(), zone);
|
| for (int i = 0; i < node->InputCount(); i++) {
|
| - MachineTypeUnion input_type = GetInfo(node->InputAt(i))->output_type();
|
| - (*types)[i] = static_cast<MachineType>(input_type);
|
| + MachineType input_type = GetInfo(node->InputAt(i))->output_type();
|
| + (*types)[i] = input_type;
|
| }
|
| NodeProperties::ChangeOp(node,
|
| jsgraph_->common()->TypedStateValues(types));
|
| }
|
| - SetOutput(node, kMachAnyTagged);
|
| + SetOutput(node, MachineType::AnyTagged());
|
| }
|
|
|
| const Operator* Int32Op(Node* node) {
|
| @@ -700,28 +719,29 @@ class RepresentationSelector {
|
| //------------------------------------------------------------------
|
| case IrOpcode::kStart:
|
| case IrOpcode::kDead:
|
| - return VisitLeaf(node, 0);
|
| + return VisitLeaf(node, MachineType::None());
|
| case IrOpcode::kParameter: {
|
| // TODO(titzer): use representation from linkage.
|
| Type* upper = NodeProperties::GetType(node);
|
| ProcessInput(node, 0, UseInfo::None());
|
| - SetOutput(node, kRepTagged | changer_->TypeFromUpperBound(upper));
|
| + SetOutput(node, MachineType(MachineRepresentation::kTagged,
|
| + changer_->TypeFromUpperBound(upper)));
|
| return;
|
| }
|
| case IrOpcode::kInt32Constant:
|
| - return VisitLeaf(node, kRepWord32);
|
| + return VisitLeaf(node, MachineType::RepWord32());
|
| case IrOpcode::kInt64Constant:
|
| - return VisitLeaf(node, kRepWord64);
|
| + return VisitLeaf(node, MachineType::RepWord64());
|
| case IrOpcode::kFloat32Constant:
|
| - return VisitLeaf(node, kRepFloat32);
|
| + return VisitLeaf(node, MachineType::RepFloat32());
|
| case IrOpcode::kFloat64Constant:
|
| - return VisitLeaf(node, kRepFloat64);
|
| + return VisitLeaf(node, MachineType::RepFloat64());
|
| case IrOpcode::kExternalConstant:
|
| - return VisitLeaf(node, kMachPtr);
|
| + return VisitLeaf(node, MachineType::Pointer());
|
| case IrOpcode::kNumberConstant:
|
| - return VisitLeaf(node, kRepTagged);
|
| + return VisitLeaf(node, MachineType::RepTagged());
|
| case IrOpcode::kHeapConstant:
|
| - return VisitLeaf(node, kRepTagged);
|
| + return VisitLeaf(node, MachineType::RepTagged());
|
|
|
| case IrOpcode::kBranch:
|
| ProcessInput(node, 0, UseInfo::Bool());
|
| @@ -750,15 +770,15 @@ class RepresentationSelector {
|
| JS_OP_LIST(DEFINE_JS_CASE)
|
| #undef DEFINE_JS_CASE
|
| VisitInputs(node);
|
| - return SetOutput(node, kRepTagged);
|
| + return SetOutput(node, MachineType::RepTagged());
|
|
|
| //------------------------------------------------------------------
|
| // Simplified operators.
|
| //------------------------------------------------------------------
|
| case IrOpcode::kBooleanNot: {
|
| if (lower()) {
|
| - MachineTypeUnion input = GetInfo(node->InputAt(0))->output_type();
|
| - if (input & kRepBit) {
|
| + MachineType input = GetInfo(node->InputAt(0))->output_type();
|
| + if (input.representation() == MachineRepresentation::kBit) {
|
| // BooleanNot(x: kRepBit) => Word32Equal(x, #0)
|
| node->AppendInput(jsgraph_->zone(), jsgraph_->Int32Constant(0));
|
| NodeProperties::ChangeOp(node, lowering->machine()->Word32Equal());
|
| @@ -770,14 +790,14 @@ class RepresentationSelector {
|
| } else {
|
| // No input representation requirement; adapt during lowering.
|
| ProcessInput(node, 0, UseInfo::AnyTruncatingToBool());
|
| - SetOutput(node, kRepBit);
|
| + SetOutput(node, MachineType::RepBit());
|
| }
|
| break;
|
| }
|
| case IrOpcode::kBooleanToNumber: {
|
| if (lower()) {
|
| - MachineTypeUnion input = GetInfo(node->InputAt(0))->output_type();
|
| - if (input & kRepBit) {
|
| + MachineType input = GetInfo(node->InputAt(0))->output_type();
|
| + if (input.representation() == MachineRepresentation::kBit) {
|
| // BooleanToNumber(x: kRepBit) => x
|
| DeferReplacement(node, node->InputAt(0));
|
| } else {
|
| @@ -788,7 +808,7 @@ class RepresentationSelector {
|
| } else {
|
| // No input representation requirement; adapt during lowering.
|
| ProcessInput(node, 0, UseInfo::AnyTruncatingToBool());
|
| - SetOutput(node, kMachInt32);
|
| + SetOutput(node, MachineType::Int32());
|
| }
|
| break;
|
| }
|
| @@ -887,36 +907,36 @@ class RepresentationSelector {
|
| }
|
| case IrOpcode::kNumberShiftLeft: {
|
| VisitBinop(node, UseInfo::TruncatingWord32(),
|
| - UseInfo::TruncatingWord32(), kMachInt32);
|
| + UseInfo::TruncatingWord32(), MachineType::Int32());
|
| if (lower()) lowering->DoShift(node, lowering->machine()->Word32Shl());
|
| break;
|
| }
|
| case IrOpcode::kNumberShiftRight: {
|
| VisitBinop(node, UseInfo::TruncatingWord32(),
|
| - UseInfo::TruncatingWord32(), kMachInt32);
|
| + UseInfo::TruncatingWord32(), MachineType::Int32());
|
| if (lower()) lowering->DoShift(node, lowering->machine()->Word32Sar());
|
| break;
|
| }
|
| case IrOpcode::kNumberShiftRightLogical: {
|
| VisitBinop(node, UseInfo::TruncatingWord32(),
|
| - UseInfo::TruncatingWord32(), kMachUint32);
|
| + UseInfo::TruncatingWord32(), MachineType::Uint32());
|
| if (lower()) lowering->DoShift(node, lowering->machine()->Word32Shr());
|
| break;
|
| }
|
| case IrOpcode::kNumberToInt32: {
|
| // Just change representation if necessary.
|
| - VisitUnop(node, UseInfo::TruncatingWord32(), kMachInt32);
|
| + VisitUnop(node, UseInfo::TruncatingWord32(), MachineType::Int32());
|
| if (lower()) DeferReplacement(node, node->InputAt(0));
|
| break;
|
| }
|
| case IrOpcode::kNumberToUint32: {
|
| // Just change representation if necessary.
|
| - VisitUnop(node, UseInfo::TruncatingWord32(), kMachUint32);
|
| + VisitUnop(node, UseInfo::TruncatingWord32(), MachineType::Uint32());
|
| if (lower()) DeferReplacement(node, node->InputAt(0));
|
| break;
|
| }
|
| case IrOpcode::kNumberIsHoleNaN: {
|
| - VisitUnop(node, UseInfo::Float64(), kMachBool);
|
| + VisitUnop(node, UseInfo::Float64(), MachineType::Bool());
|
| if (lower()) {
|
| // NumberIsHoleNaN(x) => Word32Equal(Float64ExtractLowWord32(x),
|
| // #HoleNaNLower32)
|
| @@ -931,7 +951,9 @@ class RepresentationSelector {
|
| break;
|
| }
|
| case IrOpcode::kPlainPrimitiveToNumber: {
|
| - VisitUnop(node, UseInfo::AnyTagged(), kTypeNumber | kRepTagged);
|
| + VisitUnop(node, UseInfo::AnyTagged(),
|
| + MachineType(MachineRepresentation::kTagged,
|
| + MachineSemantic::kNumber));
|
| if (lower()) {
|
| // PlainPrimitiveToNumber(x) => Call(ToNumberStub, x, no-context)
|
| Operator::Properties properties = node->op()->properties();
|
| @@ -948,31 +970,31 @@ class RepresentationSelector {
|
| break;
|
| }
|
| case IrOpcode::kReferenceEqual: {
|
| - VisitBinop(node, UseInfo::AnyTagged(), kMachBool);
|
| + VisitBinop(node, UseInfo::AnyTagged(), MachineType::Bool());
|
| if (lower()) {
|
| NodeProperties::ChangeOp(node, lowering->machine()->WordEqual());
|
| }
|
| break;
|
| }
|
| case IrOpcode::kStringEqual: {
|
| - VisitBinop(node, UseInfo::AnyTagged(), kMachBool);
|
| + VisitBinop(node, UseInfo::AnyTagged(), MachineType::Bool());
|
| if (lower()) lowering->DoStringEqual(node);
|
| break;
|
| }
|
| case IrOpcode::kStringLessThan: {
|
| - VisitBinop(node, UseInfo::AnyTagged(), kMachBool);
|
| + VisitBinop(node, UseInfo::AnyTagged(), MachineType::Bool());
|
| if (lower()) lowering->DoStringLessThan(node);
|
| break;
|
| }
|
| case IrOpcode::kStringLessThanOrEqual: {
|
| - VisitBinop(node, UseInfo::AnyTagged(), kMachBool);
|
| + VisitBinop(node, UseInfo::AnyTagged(), MachineType::Bool());
|
| if (lower()) lowering->DoStringLessThanOrEqual(node);
|
| break;
|
| }
|
| case IrOpcode::kAllocate: {
|
| ProcessInput(node, 0, UseInfo::AnyTagged());
|
| ProcessRemainingInputs(node, 1);
|
| - SetOutput(node, kMachAnyTagged);
|
| + SetOutput(node, MachineType::AnyTagged());
|
| break;
|
| }
|
| case IrOpcode::kLoadField: {
|
| @@ -985,9 +1007,10 @@ class RepresentationSelector {
|
| case IrOpcode::kStoreField: {
|
| FieldAccess access = FieldAccessOf(node->op());
|
| ProcessInput(node, 0, UseInfoForBasePointer(access));
|
| - ProcessInput(node, 1, UseInfoFromMachineType(access.machine_type));
|
| + ProcessInput(node, 1, TruncatingUseInfoFromRepresentation(
|
| + access.machine_type.representation()));
|
| ProcessRemainingInputs(node, 2);
|
| - SetOutput(node, 0);
|
| + SetOutput(node, MachineType::None());
|
| break;
|
| }
|
| case IrOpcode::kLoadBuffer: {
|
| @@ -1007,16 +1030,17 @@ class RepresentationSelector {
|
| // If undefined is truncated to a number, but the use can
|
| // observe NaN, we need to output at least the float32
|
| // representation.
|
| - if (access.machine_type() & kRepFloat32) {
|
| + if (access.machine_type().representation() ==
|
| + MachineRepresentation::kFloat32) {
|
| output_type = access.machine_type();
|
| } else {
|
| - output_type = kMachFloat64;
|
| + output_type = MachineType::Float64();
|
| }
|
| }
|
| } else {
|
| // If undefined is not truncated away, we need to have the tagged
|
| // representation.
|
| - output_type = kMachAnyTagged;
|
| + output_type = MachineType::AnyTagged();
|
| }
|
| SetOutput(node, output_type);
|
| if (lower()) lowering->DoLoadBuffer(node, output_type, changer_);
|
| @@ -1028,9 +1052,10 @@ class RepresentationSelector {
|
| ProcessInput(node, 1, UseInfo::TruncatingWord32()); // offset
|
| ProcessInput(node, 2, UseInfo::TruncatingWord32()); // length
|
| ProcessInput(node, 3,
|
| - UseInfoFromMachineType(access.machine_type())); // value
|
| + TruncatingUseInfoFromRepresentation(
|
| + access.machine_type().representation())); // value
|
| ProcessRemainingInputs(node, 4);
|
| - SetOutput(node, 0);
|
| + SetOutput(node, MachineType::None());
|
| if (lower()) lowering->DoStoreBuffer(node);
|
| break;
|
| }
|
| @@ -1047,20 +1072,21 @@ class RepresentationSelector {
|
| ProcessInput(node, 0, UseInfoForBasePointer(access)); // base
|
| ProcessInput(node, 1, UseInfo::TruncatingWord32()); // index
|
| ProcessInput(node, 2,
|
| - UseInfoFromMachineType(access.machine_type)); // value
|
| + TruncatingUseInfoFromRepresentation(
|
| + access.machine_type.representation())); // value
|
| ProcessRemainingInputs(node, 3);
|
| - SetOutput(node, 0);
|
| + SetOutput(node, MachineType::None());
|
| break;
|
| }
|
| case IrOpcode::kObjectIsNumber: {
|
| ProcessInput(node, 0, UseInfo::AnyTagged());
|
| - SetOutput(node, kMachBool);
|
| + SetOutput(node, MachineType::Bool());
|
| if (lower()) lowering->DoObjectIsNumber(node);
|
| break;
|
| }
|
| case IrOpcode::kObjectIsSmi: {
|
| ProcessInput(node, 0, UseInfo::AnyTagged());
|
| - SetOutput(node, kMachBool);
|
| + SetOutput(node, MachineType::Bool());
|
| if (lower()) lowering->DoObjectIsSmi(node);
|
| break;
|
| }
|
| @@ -1071,7 +1097,7 @@ class RepresentationSelector {
|
| case IrOpcode::kLoad: {
|
| // TODO(jarin) Eventually, we should get rid of all machine stores
|
| // from the high-level phases, then this becomes UNREACHABLE.
|
| - LoadRepresentation rep = OpParameter<LoadRepresentation>(node);
|
| + LoadRepresentation rep = LoadRepresentationOf(node->op());
|
| ProcessInput(node, 0, UseInfo::AnyTagged()); // tagged pointer
|
| ProcessInput(node, 1, UseInfo::PointerInt()); // index
|
| ProcessRemainingInputs(node, 2);
|
| @@ -1081,17 +1107,19 @@ class RepresentationSelector {
|
| case IrOpcode::kStore: {
|
| // TODO(jarin) Eventually, we should get rid of all machine stores
|
| // from the high-level phases, then this becomes UNREACHABLE.
|
| - StoreRepresentation rep = OpParameter<StoreRepresentation>(node);
|
| + StoreRepresentation rep = StoreRepresentationOf(node->op());
|
| ProcessInput(node, 0, UseInfo::AnyTagged()); // tagged pointer
|
| ProcessInput(node, 1, UseInfo::PointerInt()); // index
|
| - ProcessInput(node, 2, UseInfoFromMachineType(rep.machine_type()));
|
| + ProcessInput(node, 2, TruncatingUseInfoFromRepresentation(
|
| + rep.machine_type().representation()));
|
| ProcessRemainingInputs(node, 3);
|
| - SetOutput(node, 0);
|
| + SetOutput(node, MachineType::None());
|
| break;
|
| }
|
| case IrOpcode::kWord32Shr:
|
| // We output unsigned int32 for shift right because JavaScript.
|
| - return VisitBinop(node, UseInfo::TruncatingWord32(), kMachUint32);
|
| + return VisitBinop(node, UseInfo::TruncatingWord32(),
|
| + MachineType::Uint32());
|
| case IrOpcode::kWord32And:
|
| case IrOpcode::kWord32Or:
|
| case IrOpcode::kWord32Xor:
|
| @@ -1101,12 +1129,14 @@ class RepresentationSelector {
|
| // though the machine bits are the same for either signed or unsigned,
|
| // because JavaScript considers the result from these operations signed.
|
| return VisitBinop(node, UseInfo::TruncatingWord32(),
|
| - kRepWord32 | kTypeInt32);
|
| + MachineType::Int32());
|
| case IrOpcode::kWord32Equal:
|
| - return VisitBinop(node, UseInfo::TruncatingWord32(), kMachBool);
|
| + return VisitBinop(node, UseInfo::TruncatingWord32(),
|
| + MachineType::Bool());
|
|
|
| case IrOpcode::kWord32Clz:
|
| - return VisitUnop(node, UseInfo::TruncatingWord32(), kMachUint32);
|
| + return VisitUnop(node, UseInfo::TruncatingWord32(),
|
| + MachineType::Uint32());
|
|
|
| case IrOpcode::kInt32Add:
|
| case IrOpcode::kInt32Sub:
|
| @@ -1150,39 +1180,46 @@ class RepresentationSelector {
|
| case IrOpcode::kWord64Shl:
|
| case IrOpcode::kWord64Shr:
|
| case IrOpcode::kWord64Sar:
|
| - return VisitBinop(node, UseInfo::TruncatingWord64(), kRepWord64);
|
| + return VisitBinop(node, UseInfo::TruncatingWord64(),
|
| + MachineType(MachineRepresentation::kWord64,
|
| + MachineSemantic::kNone));
|
| case IrOpcode::kWord64Equal:
|
| - return VisitBinop(node, UseInfo::TruncatingWord64(), kMachBool);
|
| + return VisitBinop(node, UseInfo::TruncatingWord64(),
|
| + MachineType::Bool());
|
|
|
| case IrOpcode::kChangeInt32ToInt64:
|
| return VisitUnop(node, UseInfo::TruncatingWord32(),
|
| - kTypeInt32 | kRepWord64);
|
| + MachineType(MachineRepresentation::kWord64,
|
| + MachineSemantic::kInt32));
|
| case IrOpcode::kChangeUint32ToUint64:
|
| return VisitUnop(node, UseInfo::TruncatingWord32(),
|
| - kTypeUint32 | kRepWord64);
|
| + MachineType(MachineRepresentation::kWord64,
|
| + MachineSemantic::kUint32));
|
| case IrOpcode::kTruncateFloat64ToFloat32:
|
| - return VisitUnop(node, UseInfo::Float64(), kTypeNumber | kRepFloat32);
|
| + return VisitUnop(node, UseInfo::Float64(), MachineType::Float32());
|
| case IrOpcode::kTruncateFloat64ToInt32:
|
| - return VisitUnop(node, UseInfo::Float64(), kTypeInt32 | kRepWord32);
|
| + return VisitUnop(node, UseInfo::Float64(), MachineType::Int32());
|
| case IrOpcode::kTruncateInt64ToInt32:
|
| // TODO(titzer): Is kTypeInt32 correct here?
|
| return VisitUnop(node, UseInfo::Word64TruncatingToWord32(),
|
| - kTypeInt32 | kRepWord32);
|
| + MachineType::Int32());
|
|
|
| case IrOpcode::kChangeFloat32ToFloat64:
|
| - return VisitUnop(node, UseInfo::Float32(), kTypeNumber | kRepFloat64);
|
| + return VisitUnop(node, UseInfo::Float32(), MachineType::Float64());
|
| case IrOpcode::kChangeInt32ToFloat64:
|
| return VisitUnop(node, UseInfo::TruncatingWord32(),
|
| - kTypeInt32 | kRepFloat64);
|
| + MachineType(MachineRepresentation::kFloat64,
|
| + MachineSemantic::kInt32));
|
| case IrOpcode::kChangeUint32ToFloat64:
|
| return VisitUnop(node, UseInfo::TruncatingWord32(),
|
| - kTypeUint32 | kRepFloat64);
|
| + MachineType(MachineRepresentation::kFloat64,
|
| + MachineSemantic::kUint32));
|
| case IrOpcode::kChangeFloat64ToInt32:
|
| return VisitUnop(node, UseInfo::Float64TruncatingToWord32(),
|
| - kTypeInt32 | kRepWord32);
|
| + MachineType::Int32());
|
| case IrOpcode::kChangeFloat64ToUint32:
|
| return VisitUnop(node, UseInfo::Float64TruncatingToWord32(),
|
| - kTypeUint32 | kRepWord32);
|
| + MachineType::Uint32());
|
|
|
| case IrOpcode::kFloat64Add:
|
| case IrOpcode::kFloat64Sub:
|
| @@ -1196,28 +1233,28 @@ class RepresentationSelector {
|
| case IrOpcode::kFloat64RoundDown:
|
| case IrOpcode::kFloat64RoundTruncate:
|
| case IrOpcode::kFloat64RoundTiesAway:
|
| - return VisitUnop(node, UseInfo::Float64(), kMachFloat64);
|
| + return VisitUnop(node, UseInfo::Float64(), MachineType::Float64());
|
| case IrOpcode::kFloat64Equal:
|
| case IrOpcode::kFloat64LessThan:
|
| case IrOpcode::kFloat64LessThanOrEqual:
|
| return VisitFloat64Cmp(node);
|
| case IrOpcode::kFloat64ExtractLowWord32:
|
| case IrOpcode::kFloat64ExtractHighWord32:
|
| - return VisitUnop(node, UseInfo::Float64(), kMachInt32);
|
| + return VisitUnop(node, UseInfo::Float64(), MachineType::Int32());
|
| case IrOpcode::kFloat64InsertLowWord32:
|
| case IrOpcode::kFloat64InsertHighWord32:
|
| return VisitBinop(node, UseInfo::Float64(), UseInfo::TruncatingWord32(),
|
| - kMachFloat64);
|
| + MachineType::Float64());
|
| case IrOpcode::kLoadStackPointer:
|
| case IrOpcode::kLoadFramePointer:
|
| - return VisitLeaf(node, kMachPtr);
|
| + return VisitLeaf(node, MachineType::Pointer());
|
| case IrOpcode::kStateValues:
|
| VisitStateValues(node);
|
| break;
|
| default:
|
| VisitInputs(node);
|
| // Assume the output is tagged.
|
| - SetOutput(node, kMachAnyTagged);
|
| + SetOutput(node, MachineType::AnyTagged());
|
| break;
|
| }
|
| }
|
| @@ -1243,10 +1280,10 @@ class RepresentationSelector {
|
| node->NullAllInputs(); // Node is now dead.
|
| }
|
|
|
| - void PrintInfo(MachineTypeUnion info) {
|
| + void PrintInfo(MachineType info) {
|
| if (FLAG_trace_representation) {
|
| OFStream os(stdout);
|
| - os << static_cast<MachineType>(info);
|
| + os << info;
|
| }
|
| }
|
|
|
| @@ -1312,7 +1349,7 @@ void SimplifiedLowering::LowerAllNodes() {
|
| void SimplifiedLowering::DoLoadBuffer(Node* node, MachineType output_type,
|
| RepresentationChanger* changer) {
|
| DCHECK_EQ(IrOpcode::kLoadBuffer, node->opcode());
|
| - DCHECK_NE(kMachNone, RepresentationOf(output_type));
|
| + DCHECK_NE(MachineRepresentation::kNone, output_type.representation());
|
| MachineType const type = BufferAccessOf(node->op()).machine_type();
|
| if (output_type != type) {
|
| Node* const buffer = node->InputAt(0);
|
| @@ -1333,17 +1370,19 @@ void SimplifiedLowering::DoLoadBuffer(Node* node, MachineType output_type,
|
| Node* etrue =
|
| graph()->NewNode(machine()->Load(type), buffer, index, effect, if_true);
|
| Node* vtrue = changer->GetRepresentationFor(
|
| - etrue, type, RepresentationOf(output_type), Truncation::None());
|
| + etrue, type, output_type.representation(), Truncation::None());
|
|
|
| Node* if_false = graph()->NewNode(common()->IfFalse(), branch);
|
| Node* efalse = effect;
|
| Node* vfalse;
|
| - if (output_type & kRepTagged) {
|
| + if (output_type.representation() == MachineRepresentation::kTagged) {
|
| vfalse = jsgraph()->UndefinedConstant();
|
| - } else if (output_type & kRepFloat64) {
|
| + } else if (output_type.representation() ==
|
| + MachineRepresentation::kFloat64) {
|
| vfalse =
|
| jsgraph()->Float64Constant(std::numeric_limits<double>::quiet_NaN());
|
| - } else if (output_type & kRepFloat32) {
|
| + } else if (output_type.representation() ==
|
| + MachineRepresentation::kFloat32) {
|
| vfalse =
|
| jsgraph()->Float32Constant(std::numeric_limits<float>::quiet_NaN());
|
| } else {
|
| @@ -1361,7 +1400,8 @@ void SimplifiedLowering::DoLoadBuffer(Node* node, MachineType output_type,
|
| node->ReplaceInput(1, vfalse);
|
| node->ReplaceInput(2, merge);
|
| node->TrimInputCount(3);
|
| - NodeProperties::ChangeOp(node, common()->Phi(output_type, 2));
|
| + NodeProperties::ChangeOp(node,
|
| + common()->Phi(output_type.representation(), 2));
|
| } else {
|
| NodeProperties::ChangeOp(node, machine()->CheckedLoad(type));
|
| }
|
| @@ -1390,7 +1430,7 @@ void SimplifiedLowering::DoObjectIsNumber(Node* node) {
|
| Node* vfalse = graph()->NewNode(
|
| machine()->WordEqual(),
|
| graph()->NewNode(
|
| - machine()->Load(kMachAnyTagged), input,
|
| + machine()->Load(MachineType::AnyTagged()), input,
|
| jsgraph()->IntPtrConstant(HeapObject::kMapOffset - kHeapObjectTag),
|
| graph()->start(), if_false),
|
| jsgraph()->HeapConstant(isolate()->factory()->heap_number_map()));
|
| @@ -1398,7 +1438,7 @@ void SimplifiedLowering::DoObjectIsNumber(Node* node) {
|
| node->ReplaceInput(0, vtrue);
|
| node->AppendInput(graph()->zone(), vfalse);
|
| node->AppendInput(graph()->zone(), control);
|
| - NodeProperties::ChangeOp(node, common()->Phi(kMachBool, 2));
|
| + NodeProperties::ChangeOp(node, common()->Phi(MachineRepresentation::kBit, 2));
|
| }
|
|
|
|
|
| @@ -1456,7 +1496,8 @@ Node* SimplifiedLowering::Int32Div(Node* const node) {
|
| // Note: We do not use the Diamond helper class here, because it really hurts
|
| // readability with nested diamonds.
|
| const Operator* const merge_op = common()->Merge(2);
|
| - const Operator* const phi_op = common()->Phi(kMachInt32, 2);
|
| + const Operator* const phi_op =
|
| + common()->Phi(MachineRepresentation::kWord32, 2);
|
|
|
| Node* check0 = graph()->NewNode(machine()->Int32LessThan(), zero, rhs);
|
| Node* branch0 = graph()->NewNode(common()->Branch(BranchHint::kTrue), check0,
|
| @@ -1533,7 +1574,8 @@ Node* SimplifiedLowering::Int32Mod(Node* const node) {
|
| // Note: We do not use the Diamond helper class here, because it really hurts
|
| // readability with nested diamonds.
|
| const Operator* const merge_op = common()->Merge(2);
|
| - const Operator* const phi_op = common()->Phi(kMachInt32, 2);
|
| + const Operator* const phi_op =
|
| + common()->Phi(MachineRepresentation::kWord32, 2);
|
|
|
| Node* check0 = graph()->NewNode(machine()->Int32LessThan(), zero, rhs);
|
| Node* branch0 = graph()->NewNode(common()->Branch(BranchHint::kTrue), check0,
|
| @@ -1612,7 +1654,7 @@ Node* SimplifiedLowering::Uint32Div(Node* const node) {
|
| Node* check = graph()->NewNode(machine()->Word32Equal(), rhs, zero);
|
| Diamond d(graph(), common(), check, BranchHint::kFalse);
|
| Node* div = graph()->NewNode(machine()->Uint32Div(), lhs, rhs, d.if_false);
|
| - return d.Phi(kMachUint32, zero, div);
|
| + return d.Phi(MachineRepresentation::kWord32, zero, div);
|
| }
|
|
|
|
|
| @@ -1644,7 +1686,8 @@ Node* SimplifiedLowering::Uint32Mod(Node* const node) {
|
| // Note: We do not use the Diamond helper class here, because it really hurts
|
| // readability with nested diamonds.
|
| const Operator* const merge_op = common()->Merge(2);
|
| - const Operator* const phi_op = common()->Phi(kMachInt32, 2);
|
| + const Operator* const phi_op =
|
| + common()->Phi(MachineRepresentation::kWord32, 2);
|
|
|
| Node* branch0 = graph()->NewNode(common()->Branch(BranchHint::kTrue), rhs,
|
| graph()->start());
|
|
|