Index: runtime/vm/intermediate_language.h |
diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h |
index 731fecafea9e5ff468c11fafe74c19b467a1ec55..b0705d4e801c76cdb841e1f82c4d87130a752500 100644 |
--- a/runtime/vm/intermediate_language.h |
+++ b/runtime/vm/intermediate_language.h |
@@ -1558,12 +1558,14 @@ class CatchBlockEntryInstr : public BlockEntryInstr { |
public: |
CatchBlockEntryInstr(intptr_t block_id, |
intptr_t try_index, |
+ GraphEntryInstr* graph_entry, |
const Array& handler_types, |
intptr_t catch_try_index, |
const LocalVariable& exception_var, |
const LocalVariable& stacktrace_var, |
bool needs_stacktrace) |
: BlockEntryInstr(block_id, try_index), |
+ graph_entry_(graph_entry), |
predecessor_(NULL), |
catch_handler_types_(Array::ZoneHandle(handler_types.raw())), |
catch_try_index_(catch_try_index), |
@@ -1581,6 +1583,8 @@ class CatchBlockEntryInstr : public BlockEntryInstr { |
return predecessor_; |
} |
+ GraphEntryInstr* graph_entry() const { return graph_entry_; } |
+ |
const LocalVariable& exception_var() const { return exception_var_; } |
const LocalVariable& stacktrace_var() const { return stacktrace_var_; } |
@@ -1606,6 +1610,7 @@ class CatchBlockEntryInstr : public BlockEntryInstr { |
predecessor_ = predecessor; |
} |
+ GraphEntryInstr* graph_entry_; |
BlockEntryInstr* predecessor_; |
const Array& catch_handler_types_; |
const intptr_t catch_try_index_; |
@@ -1912,10 +1917,11 @@ class PhiInstr : public Definition { |
PhiInstr(JoinEntryInstr* block, intptr_t num_inputs) |
: block_(block), |
inputs_(num_inputs), |
- is_alive_(false), |
representation_(kTagged), |
reaching_defs_(NULL), |
- loop_variable_info_(NULL) { |
+ loop_variable_info_(NULL), |
+ is_alive_(false), |
+ is_receiver_(kUnknownReceiver) { |
for (intptr_t i = 0; i < num_inputs; ++i) { |
inputs_.Add(NULL); |
} |
@@ -1985,6 +1991,21 @@ class PhiInstr : public Definition { |
PRINT_TO_SUPPORT |
+ enum ReceiverType { |
+ kUnknownReceiver = -1, |
+ kNotReceiver = 0, |
+ kReceiver = 1 |
+ }; |
+ |
+ ReceiverType is_receiver() const { |
+ return static_cast<ReceiverType>(is_receiver_); |
+ } |
+ |
+ void set_is_receiver(ReceiverType is_receiver) { |
+ ASSERT(is_receiver_ == kUnknownReceiver); |
+ is_receiver_ = is_receiver; |
+ } |
+ |
private: |
// Direct access to inputs_ in order to resize it due to unreachable |
// predecessors. |
@@ -1994,11 +2015,11 @@ class PhiInstr : public Definition { |
JoinEntryInstr* block_; |
GrowableArray<Value*> inputs_; |
- bool is_alive_; |
Representation representation_; |
- |
BitVector* reaching_defs_; |
InductionVariableInfo* loop_variable_info_; |
+ bool is_alive_; |
+ int8_t is_receiver_; |
DISALLOW_COPY_AND_ASSIGN(PhiInstr); |
}; |