simplification to HClampToUint8

* src/hydrogen-instructions.h (HClampToUint8): Don't mark as having
  flexible representation; instead the output is always an Integer32.
  There is no input representation restriction, so we can still perform
  input-specific truncation.

I tested by looking at the --print-code of

var a = PixelArray(1000000)
function fill(a,x) { for (var i=0; i<a.len; i++) a[i] = x; }

Seems to optimize fine both for double and integer inputs.  But perhaps
there is a better test, for which the original code does better, and
this is a bogus patch.

Review URL: http://codereview.chromium.org/7357003
Patch from Andy Wingo <wingo@igalia.com>.

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@8650 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
danno@chromium.org 2011-07-14 09:51:52 +00:00
parent 5d024ca5d2
commit dbf0aee6ae

View File

@ -1123,40 +1123,19 @@ class HChange: public HUnaryOperation {
class HClampToUint8: public HUnaryOperation {
public:
explicit HClampToUint8(HValue* value)
: HUnaryOperation(value),
input_rep_(Representation::None()) {
SetFlag(kFlexibleRepresentation);
set_representation(Representation::Tagged());
: HUnaryOperation(value) {
set_representation(Representation::Integer32());
SetFlag(kUseGVN);
}
virtual Representation RequiredInputRepresentation(int index) const {
return input_rep_;
}
virtual Representation InferredRepresentation() {
// TODO(danno): Inference on input types should happen separately from
// return representation.
Representation new_rep = value()->representation();
if (input_rep_.IsNone()) {
if (!new_rep.IsNone()) {
input_rep_ = new_rep;
return Representation::Integer32();
} else {
return Representation::None();
}
} else {
return Representation::Integer32();
}
return Representation::None();
}
DECLARE_CONCRETE_INSTRUCTION(ClampToUint8)
protected:
virtual bool DataEquals(HValue* other) { return true; }
private:
Representation input_rep_;
};