Don't ignore the actual input representation in UnaryMathOperations
authorverwaest@chromium.org <verwaest@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 7 Jun 2013 09:11:33 +0000 (09:11 +0000)
committerverwaest@chromium.org <verwaest@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 7 Jun 2013 09:11:33 +0000 (09:11 +0000)
R=jkummerow@chromium.org

Review URL: https://chromiumcodereview.appspot.com/16035014

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14997 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/hydrogen-instructions.cc
src/hydrogen-instructions.h

index d6a3f99..ff0791b 100644 (file)
@@ -3092,6 +3092,16 @@ HType HUnaryMathOperation::CalculateInferredType() {
 }
 
 
+Representation HUnaryMathOperation::RepresentationFromInputs() {
+  Representation rep = representation();
+  // If any of the actual input representation is more general than what we
+  // have so far but not Tagged, use that representation instead.
+  Representation input_rep = value()->representation();
+  if (!input_rep.IsTagged()) rep = rep.generalize(input_rep);
+  return rep;
+}
+
+
 HType HStringCharFromCode::CalculateInferredType() {
   return HType::String();
 }
index 73c075e..ee87024 100644 (file)
@@ -2651,6 +2651,7 @@ class HUnaryMathOperation: public HTemplateInstruction<2> {
   virtual Range* InferRange(Zone* zone);
 
   virtual HValue* Canonicalize();
+  virtual Representation RepresentationFromInputs();
 
   BuiltinFunctionId op() const { return op_; }
   const char* OpName() const;