Index: src/compiler/representation-change.h |
diff --git a/src/compiler/representation-change.h b/src/compiler/representation-change.h |
index 909ca62b45ae52e496ff0439082adc6f721cc3aa..5c41f03abdaef2daf700348f6f5dff6614603505 100644 |
--- a/src/compiler/representation-change.h |
+++ b/src/compiler/representation-change.h |
@@ -27,9 +27,6 @@ class RepresentationChanger { |
: jsgraph_(jsgraph), |
simplified_(simplified), |
isolate_(isolate), |
- bit_range_(Type::Range(isolate->factory()->NewNumber(0), |
- isolate->factory()->NewNumber(1), |
- jsgraph->zone())), |
testing_type_errors_(false), |
type_error_(false) {} |
@@ -266,7 +263,7 @@ class RepresentationChanger { |
// Select the correct X -> Word32 operator. |
const Operator* op; |
if (output_type & kRepBit) { |
- return node; // No change necessary. |
+ return node; // Sloppy comparison -> word32 |
} else if (output_type & kRepFloat64) { |
if (output_type & kTypeUint32 || use_unsigned) { |
op = machine()->ChangeFloat64ToUint32(); |
@@ -295,48 +292,24 @@ class RepresentationChanger { |
Node* GetBitRepresentationFor(Node* node, MachineTypeUnion output_type) { |
// Eagerly fold representation changes for constants. |
switch (node->opcode()) { |
- case IrOpcode::kInt32Constant: { |
- int32_t value = OpParameter<int32_t>(node); |
- if (value == 0 || value == 1) return node; |
- return jsgraph()->Int32Constant(1); // value != 0 |
- } |
- case IrOpcode::kNumberConstant: { |
- double value = OpParameter<double>(node); |
- if (value == 0 || std::isnan(value)) return jsgraph()->Int32Constant(0); |
- return jsgraph()->Int32Constant(1); // value != +0.0, -0.0, NaN |
- } |
case IrOpcode::kHeapConstant: { |
- Handle<Object> object = OpParameter<Unique<Object>>(node).handle(); |
- return jsgraph()->Int32Constant(object->BooleanValue() ? 1 : 0); |
+ Handle<Object> value = OpParameter<Unique<Object> >(node).handle(); |
+ DCHECK(value.is_identical_to(factory()->true_value()) || |
+ value.is_identical_to(factory()->false_value())); |
+ return jsgraph()->Int32Constant( |
+ value.is_identical_to(factory()->true_value()) ? 1 : 0); |
} |
default: |
break; |
} |
// Select the correct X -> Bit operator. |
const Operator* op; |
- if (output_type & rWord) { |
- op = simplified()->ChangeWord32ToBit(); |
- } else if (output_type & kRepWord64) { |
- op = simplified()->ChangeWord64ToBit(); |
- } else if (output_type & kRepTagged) { |
- Type* upper = NodeProperties::GetBounds(node).upper; |
- if (upper->Is(Type::Boolean())) { |
- op = simplified()->ChangeBoolToBit(); |
- } else if (upper->Is(Type::Signed32())) { |
- // Tagged -> Int32 -> Bit |
- node = InsertChangeTaggedToInt32(node); |
- op = simplified()->ChangeWord32ToBit(); |
- } else if (upper->Is(Type::Unsigned32())) { |
- // Tagged -> Uint32 -> Bit |
- node = InsertChangeTaggedToUint32(node); |
- op = simplified()->ChangeWord32ToBit(); |
- } else { |
- return TypeError(node, output_type, kRepBit); |
- } |
+ if (output_type & kRepTagged) { |
+ op = simplified()->ChangeBoolToBit(); |
} else { |
return TypeError(node, output_type, kRepBit); |
} |
- return graph()->NewNode(op, node); |
+ return jsgraph()->graph()->NewNode(op, node); |
} |
Node* GetWord64RepresentationFor(Node* node, MachineTypeUnion output_type) { |
@@ -441,7 +414,6 @@ class RepresentationChanger { |
JSGraph* jsgraph_; |
SimplifiedOperatorBuilder* simplified_; |
Isolate* isolate_; |
- Type* bit_range_; |
friend class RepresentationChangerTester; // accesses the below fields. |
@@ -468,26 +440,20 @@ class RepresentationChanger { |
} |
Node* InsertChangeFloat32ToFloat64(Node* node) { |
- return graph()->NewNode(machine()->ChangeFloat32ToFloat64(), node); |
+ return jsgraph()->graph()->NewNode(machine()->ChangeFloat32ToFloat64(), |
+ node); |
} |
Node* InsertChangeTaggedToFloat64(Node* node) { |
- return graph()->NewNode(simplified()->ChangeTaggedToFloat64(), node); |
- } |
- |
- Node* InsertChangeTaggedToInt32(Node* node) { |
- return graph()->NewNode(simplified()->ChangeTaggedToInt32(), node); |
- } |
- |
- Node* InsertChangeTaggedToUint32(Node* node) { |
- return graph()->NewNode(simplified()->ChangeTaggedToUint32(), node); |
+ return jsgraph()->graph()->NewNode(simplified()->ChangeTaggedToFloat64(), |
+ node); |
} |
- Graph* graph() const { return jsgraph()->graph(); } |
JSGraph* jsgraph() const { return jsgraph_; } |
Isolate* isolate() const { return isolate_; } |
- SimplifiedOperatorBuilder* simplified() const { return simplified_; } |
- MachineOperatorBuilder* machine() const { return jsgraph()->machine(); } |
+ Factory* factory() const { return isolate()->factory(); } |
+ SimplifiedOperatorBuilder* simplified() { return simplified_; } |
+ MachineOperatorBuilder* machine() { return jsgraph()->machine(); } |
}; |
} // namespace compiler |