Index: src/hydrogen-representation-changes.cc |
diff --git a/src/hydrogen-representation-changes.cc b/src/hydrogen-representation-changes.cc |
index 07fc8be38c0437951b05ea4210db9e5b196f1d0a..95a1515a6f2a5ac82054113264284e77ea90544e 100644 |
--- a/src/hydrogen-representation-changes.cc |
+++ b/src/hydrogen-representation-changes.cc |
@@ -59,8 +59,18 @@ void HRepresentationChangesPhase::InsertRepresentationChangeForUse( |
} |
if (new_value == NULL) { |
- new_value = new(graph()->zone()) HChange( |
- value, to, is_truncating_to_smi, is_truncating_to_int); |
+ if (((to.IsFloat32x4() || to.IsInt32x4()) && |
+ !value->representation().IsTagged()) || |
+ ((value->representation().IsFloat32x4() || |
+ value->representation().IsInt32x4()) && |
+ !to.IsTagged())) { |
+ new_value = HUnarySIMDOperation::New(graph()->zone(), |
+ graph()->entry_block()->last_environment()->context(), |
+ value, kFloat32x4OrInt32x4Change, to); |
+ } else { |
+ new_value = new(graph()->zone()) HChange( |
+ value, to, is_truncating_to_smi, is_truncating_to_int); |
+ } |
if (use_value->operand_position(use_index) != RelocInfo::kNoPosition) { |
new_value->set_position(use_value->operand_position(use_index)); |
} else { |