Reviewers: Igor Sheludko,
Message:
PTAL.
It's a bit hairy, and I'd be fine with scrapping this change if you don't
like
it.
Description:
Reduce impact of HParameter inputs on HPhi representation selection
This is a follow-up to r25153.
BUG=v8:3766
LOG=n
Please review this at https://codereview.chromium.org/807273003/
Base URL: https://chromium.googlesource.com/v8/v8.git@master
Affected files (+15, -4 lines):
M src/hydrogen-instructions.h
M src/hydrogen-instructions.cc
Index: src/hydrogen-instructions.cc
diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc
index
1c3e1f3956d3e7cba96055054d8a2321a54998f2..dc2b6b8276735a2fb9b60cb2a15f52489fa2fc61
100644
--- a/src/hydrogen-instructions.cc
+++ b/src/hydrogen-instructions.cc
@@ -4497,18 +4497,24 @@ void HPhi::SimplifyConstantInputs() {
void HPhi::InferRepresentation(HInferRepresentationPhase* h_infer) {
DCHECK(CheckFlag(kFlexibleRepresentation));
- Representation new_rep = RepresentationFromInputs();
- UpdateRepresentation(new_rep, h_infer, "inputs");
- new_rep = RepresentationFromUses();
+ Representation new_rep = RepresentationFromUses();
UpdateRepresentation(new_rep, h_infer, "uses");
+ new_rep = RepresentationFromInputs();
+ UpdateRepresentation(new_rep, h_infer, "inputs");
new_rep = RepresentationFromUseRequirements();
UpdateRepresentation(new_rep, h_infer, "use requirements");
}
Representation HPhi::RepresentationFromInputs() {
- Representation r = Representation::None();
+ bool has_type_feedback =
+ smi_non_phi_uses() + int32_non_phi_uses() + double_non_phi_uses() >
0;
+ Representation r = representation();
for (int i = 0; i < OperandCount(); ++i) {
+ // Ignore conservative Tagged assumption of parameters if we have
+ // reason to believe that it's too conservative.
+ if (has_type_feedback && OperandAt(i)->IsParameter()) continue;
+
r = r.generalize(OperandAt(i)->KnownOptimalRepresentation());
}
return r;
Index: src/hydrogen-instructions.h
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
index
b933f10ba80f266d67f3ead95ca21a42ee43f216..800fa49a326d9b730ecd7d17c39ddaaa68b1c684
100644
--- a/src/hydrogen-instructions.h
+++ b/src/hydrogen-instructions.h
@@ -1641,6 +1641,11 @@ class HForceRepresentation FINAL : public
HTemplateInstruction<1> {
HValue* value() const { return OperandAt(0); }
+ Representation observed_input_representation(int index) OVERRIDE {
+ // We haven't actually *observed* this, but it's closer to the truth
+ // than 'None'.
+ return representation(); // Same as the output representation.
+ }
Representation RequiredInputRepresentation(int index) OVERRIDE {
return representation(); // Same as the output representation.
}
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.