Merge V8 5.3.332.45. DO NOT MERGE
Test: Manual
FPIIM-449
Change-Id: Id3254828b068abdea3cb10442e0172a8c9a98e03
(cherry picked from commit 13e2dadd00298019ed862f2b2fc5068bba730bcf)
diff --git a/src/compiler/common-operator.cc b/src/compiler/common-operator.cc
index d3f6972..4f5ead8 100644
--- a/src/compiler/common-operator.cc
+++ b/src/compiler/common-operator.cc
@@ -167,10 +167,44 @@
return os << p.value() << "|" << p.rmode() << "|" << p.type();
}
+size_t hash_value(RegionObservability observability) {
+ return static_cast<size_t>(observability);
+}
+
+std::ostream& operator<<(std::ostream& os, RegionObservability observability) {
+ switch (observability) {
+ case RegionObservability::kObservable:
+ return os << "observable";
+ case RegionObservability::kNotObservable:
+ return os << "not-observable";
+ }
+ UNREACHABLE();
+ return os;
+}
+
+RegionObservability RegionObservabilityOf(Operator const* op) {
+ DCHECK_EQ(IrOpcode::kBeginRegion, op->opcode());
+ return OpParameter<RegionObservability>(op);
+}
+
+std::ostream& operator<<(std::ostream& os,
+ const ZoneVector<MachineType>* types) {
+ // Print all the MachineTypes, separated by commas.
+ bool first = true;
+ for (MachineType elem : *types) {
+ if (!first) {
+ os << ", ";
+ }
+ first = false;
+ os << elem;
+ }
+ return os;
+}
+
#define CACHED_OP_LIST(V) \
V(Dead, Operator::kFoldable, 0, 0, 0, 1, 1, 1) \
- V(DeoptimizeIf, Operator::kFoldable, 2, 1, 1, 0, 0, 1) \
- V(DeoptimizeUnless, Operator::kFoldable, 2, 1, 1, 0, 0, 1) \
+ V(DeoptimizeIf, Operator::kFoldable, 2, 1, 1, 0, 1, 1) \
+ V(DeoptimizeUnless, Operator::kFoldable, 2, 1, 1, 0, 1, 1) \
V(IfTrue, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \
V(IfFalse, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \
V(IfSuccess, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \
@@ -179,9 +213,8 @@
V(Terminate, Operator::kKontrol, 0, 1, 1, 0, 0, 1) \
V(OsrNormalEntry, Operator::kFoldable, 0, 1, 1, 0, 1, 1) \
V(OsrLoopEntry, Operator::kFoldable, 0, 1, 1, 0, 1, 1) \
- V(CheckPoint, Operator::kKontrol, 1, 1, 1, 0, 1, 0) \
- V(BeginRegion, Operator::kNoThrow, 0, 1, 0, 0, 1, 0) \
- V(FinishRegion, Operator::kNoThrow, 1, 1, 0, 1, 1, 0)
+ V(Checkpoint, Operator::kKontrol, 0, 1, 1, 0, 1, 0) \
+ V(FinishRegion, Operator::kKontrol, 1, 1, 0, 1, 1, 0)
#define CACHED_RETURN_LIST(V) \
V(1) \
@@ -360,6 +393,20 @@
CACHED_EFFECT_PHI_LIST(CACHED_EFFECT_PHI)
#undef CACHED_EFFECT_PHI
+ template <RegionObservability kRegionObservability>
+ struct BeginRegionOperator final : public Operator1<RegionObservability> {
+ BeginRegionOperator()
+ : Operator1<RegionObservability>( // --
+ IrOpcode::kBeginRegion, Operator::kKontrol, // opcode
+ "BeginRegion", // name
+ 0, 1, 0, 0, 1, 0, // counts
+ kRegionObservability) {} // parameter
+ };
+ BeginRegionOperator<RegionObservability::kObservable>
+ kBeginRegionObservableOperator;
+ BeginRegionOperator<RegionObservability::kNotObservable>
+ kBeginRegionNotObservableOperator;
+
template <size_t kInputCount>
struct LoopOperator final : public Operator {
LoopOperator()
@@ -422,7 +469,7 @@
IrOpcode::kProjection, // opcode
Operator::kPure, // flags
"Projection", // name
- 1, 0, 0, 1, 0, 0, // counts,
+ 1, 0, 1, 1, 0, 0, // counts,
kIndex) {} // parameter
};
#define CACHED_PROJECTION(index) \
@@ -759,6 +806,17 @@
0, effect_input_count, 1, 0, 1, 0); // counts
}
+const Operator* CommonOperatorBuilder::BeginRegion(
+ RegionObservability region_observability) {
+ switch (region_observability) {
+ case RegionObservability::kObservable:
+ return &cache_.kBeginRegionObservableOperator;
+ case RegionObservability::kNotObservable:
+ return &cache_.kBeginRegionNotObservableOperator;
+ }
+ UNREACHABLE();
+ return nullptr;
+}
const Operator* CommonOperatorBuilder::StateValues(int arguments) {
switch (arguments) {
@@ -857,12 +915,12 @@
break;
}
// Uncached.
- return new (zone()) Operator1<size_t>( // --
- IrOpcode::kProjection, // opcode
- Operator::kFoldable | Operator::kNoThrow, // flags
- "Projection", // name
- 1, 0, 0, 1, 0, 0, // counts
- index); // parameter
+ return new (zone()) Operator1<size_t>( // --
+ IrOpcode::kProjection, // opcode
+ Operator::kPure, // flags
+ "Projection", // name
+ 1, 0, 1, 1, 0, 0, // counts
+ index); // parameter
}