Chromium Code Reviews| Index: runtime/vm/intermediate_language.cc |
| diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc |
| index 69fcda120b6c1c19473811a09e8d286b39e5c86d..6909bde834ac696ce9d1ab9911c1ff3313c3700f 100644 |
| --- a/runtime/vm/intermediate_language.cc |
| +++ b/runtime/vm/intermediate_language.cc |
| @@ -17,6 +17,7 @@ |
| #include "vm/object.h" |
| #include "vm/object_store.h" |
| #include "vm/os.h" |
| +#include "vm/regexp_assembler.h" |
| #include "vm/resolver.h" |
| #include "vm/scopes.h" |
| #include "vm/stub_code.h" |
| @@ -370,6 +371,14 @@ bool LoadIndexedInstr::AttributesEqual(Instruction* other) const { |
| } |
| +bool LoadCodeUnitsInstr::AttributesEqual(Instruction* other) const { |
| + LoadCodeUnitsInstr* other_load = other->AsLoadCodeUnits(); |
| + ASSERT(other_load != NULL); |
| + return (class_id() == other_load->class_id() && |
| + element_count() == other_load->element_count()); |
| +} |
| + |
| + |
| ConstantInstr::ConstantInstr(const Object& value) : value_(value) { |
| // Check that the value is not an incorrect Integer representation. |
| ASSERT(!value.IsBigint() || !Bigint::Cast(value).FitsIntoSmi()); |
| @@ -460,6 +469,7 @@ GraphEntryInstr::GraphEntryInstr(const ParsedFunction* parsed_function, |
| parsed_function_(parsed_function), |
| normal_entry_(normal_entry), |
| catch_entries_(), |
| + indirect_entries_(), |
| initial_definitions_(), |
| osr_id_(osr_id), |
| entry_count_(0), |
| @@ -1123,8 +1133,12 @@ intptr_t GraphEntryInstr::SuccessorCount() const { |
| BlockEntryInstr* GraphEntryInstr::SuccessorAt(intptr_t index) const { |
| - if (index == 0) return normal_entry_; |
| - return catch_entries_[index - 1]; |
| + if (index == 0) { |
| + return normal_entry_; |
| + } else { |
| + ASSERT(index < catch_entries_.length() + 1); |
|
srdjan
2014/09/22 22:34:07
Add parentheses.
jgruber1
2014/09/23 10:58:46
Reverted this change since it was functionally ide
|
| + return catch_entries_[index - 1]; |
| + } |
| } |
| @@ -1776,6 +1790,12 @@ Definition* MathUnaryInstr::Canonicalize(FlowGraph* flow_graph) { |
| } |
| +Definition* CaseInsensitiveCompareUC16Instr::Canonicalize( |
| + FlowGraph* flow_graph) { |
| + return this; |
| +} |
| + |
| + |
| Definition* LoadFieldInstr::Canonicalize(FlowGraph* flow_graph) { |
| if (!HasUses()) return NULL; |
| if (!IsImmutableLengthLoad()) return this; |
| @@ -2508,6 +2528,13 @@ void TargetEntryInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| } |
| +LocationSummary* IndirectEntryInstr::MakeLocationSummary( |
| + Isolate* isolate, bool optimizing) const { |
| + UNREACHABLE(); |
| + return NULL; |
| +} |
| + |
| + |
| LocationSummary* PhiInstr::MakeLocationSummary(Isolate* isolate, |
| bool optimizing) const { |
| UNREACHABLE(); |
| @@ -3288,6 +3315,23 @@ const char* MathUnaryInstr::KindToCString(MathUnaryKind kind) { |
| return ""; |
| } |
| +typedef RawBool* (*CaseInsensitiveCompareUC16Function) ( |
| + RawString* string_raw, |
| + RawSmi* lhs_index_raw, |
| + RawSmi* rhs_index_raw, |
| + RawSmi* length_raw); |
| + |
| + |
| +extern const RuntimeEntry kCaseInsensitiveCompareUC16RuntimeEntry( |
| + "CaseInsensitiveCompareUC16", reinterpret_cast<RuntimeFunction>( |
| + static_cast<CaseInsensitiveCompareUC16Function>( |
| + &IRRegExpMacroAssembler::CaseInsensitiveCompareUC16)), 4, true, false); |
| + |
| + |
| +const RuntimeEntry& CaseInsensitiveCompareUC16Instr::TargetFunction() const { |
| + return kCaseInsensitiveCompareUC16RuntimeEntry; |
| +} |
| + |
| MergedMathInstr::MergedMathInstr(ZoneGrowableArray<Value*>* inputs, |
| intptr_t original_deopt_id, |