Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(152)

Unified Diff: runtime/vm/intermediate_language_arm.cc

Issue 254723003: Remember all deopt reasons in ic_data, not just the last one. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/intermediate_language.cc ('k') | runtime/vm/intermediate_language_ia32.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/intermediate_language_arm.cc
===================================================================
--- runtime/vm/intermediate_language_arm.cc (revision 35455)
+++ runtime/vm/intermediate_language_arm.cc (working copy)
@@ -710,7 +710,7 @@
Register cid_reg = locs()->temp(0).reg();
Label* deopt = CanDeoptimize() ?
- compiler->AddDeoptStub(deopt_id(), kDeoptTestCids) : NULL;
+ compiler->AddDeoptStub(deopt_id(), ICData::kDeoptTestCids) : NULL;
const intptr_t true_result = (kind() == Token::kIS) ? 1 : 0;
const ZoneGrowableArray<intptr_t>& data = cid_results();
@@ -1246,7 +1246,8 @@
__ SmiTag(result);
break;
case kTypedDataInt32ArrayCid: {
- Label* deopt = compiler->AddDeoptStub(deopt_id(), kDeoptInt32Load);
+ Label* deopt = compiler->AddDeoptStub(deopt_id(),
+ ICData::kDeoptInt32Load);
__ ldr(result, element_address);
// Verify that the signed value in 'result' can fit inside a Smi.
__ CompareImmediate(result, 0xC0000000);
@@ -1255,7 +1256,8 @@
}
break;
case kTypedDataUint32ArrayCid: {
- Label* deopt = compiler->AddDeoptStub(deopt_id(), kDeoptUint32Load);
+ Label* deopt = compiler->AddDeoptStub(deopt_id(),
+ ICData::kDeoptUint32Load);
__ ldr(result, element_address);
// Verify that the unsigned value in 'result' can fit inside a Smi.
__ TestImmediate(result, 0xC0000000);
@@ -1553,7 +1555,7 @@
Label ok, fail_label;
Label* deopt = compiler->is_optimizing() ?
- compiler->AddDeoptStub(deopt_id(), kDeoptGuardField) : NULL;
+ compiler->AddDeoptStub(deopt_id(), ICData::kDeoptGuardField) : NULL;
Label* fail = (deopt != NULL) ? deopt : &fail_label;
@@ -2747,7 +2749,8 @@
Register left = locs.in(0).reg();
Register result = locs.out(0).reg();
Label* deopt = shift_left->CanDeoptimize() ?
- compiler->AddDeoptStub(shift_left->deopt_id(), kDeoptBinarySmiOp) : NULL;
+ compiler->AddDeoptStub(shift_left->deopt_id(), ICData::kDeoptBinarySmiOp)
+ : NULL;
if (locs.in(1).IsConstant()) {
const Object& constant = locs.in(1).constant();
ASSERT(constant.IsSmi());
@@ -2902,7 +2905,7 @@
Register result = locs()->out(0).reg();
Label* deopt = NULL;
if (CanDeoptimize()) {
- deopt = compiler->AddDeoptStub(deopt_id(), kDeoptBinarySmiOp);
+ deopt = compiler->AddDeoptStub(deopt_id(), ICData::kDeoptBinarySmiOp);
}
if (locs()->in(1).IsConstant()) {
@@ -3197,7 +3200,8 @@
void CheckEitherNonSmiInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
- Label* deopt = compiler->AddDeoptStub(deopt_id(), kDeoptBinaryDoubleOp);
+ Label* deopt = compiler->AddDeoptStub(deopt_id(),
+ ICData::kDeoptBinaryDoubleOp);
intptr_t left_cid = left()->Type()->ToCid();
intptr_t right_cid = right()->Type()->ToCid();
Register left = locs()->in(0).reg();
@@ -3273,7 +3277,8 @@
__ vmovsr(STMP, value);
__ vcvtdi(result, STMP);
} else {
- Label* deopt = compiler->AddDeoptStub(deopt_id_, kDeoptBinaryDoubleOp);
+ Label* deopt = compiler->AddDeoptStub(deopt_id_,
+ ICData::kDeoptBinaryDoubleOp);
Register temp = locs()->temp(0).reg();
Label is_smi, done;
__ tst(value, ShifterOperand(kSmiTagMask));
@@ -3348,7 +3353,7 @@
if (value_cid != kFloat32x4Cid) {
const Register temp = locs()->temp(0).reg();
- Label* deopt = compiler->AddDeoptStub(deopt_id_, kDeoptCheckClass);
+ Label* deopt = compiler->AddDeoptStub(deopt_id_, ICData::kDeoptCheckClass);
__ tst(value, ShifterOperand(kSmiTagMask));
__ b(deopt, EQ);
__ CompareClassId(value, kFloat32x4Cid, temp);
@@ -3417,7 +3422,7 @@
if (value_cid != kFloat64x2Cid) {
const Register temp = locs()->temp(0).reg();
- Label* deopt = compiler->AddDeoptStub(deopt_id_, kDeoptCheckClass);
+ Label* deopt = compiler->AddDeoptStub(deopt_id_, ICData::kDeoptCheckClass);
__ tst(value, ShifterOperand(kSmiTagMask));
__ b(deopt, EQ);
__ CompareClassId(value, kFloat64x2Cid, temp);
@@ -3517,7 +3522,7 @@
if (value_cid != kInt32x4Cid) {
const Register temp = locs()->temp(0).reg();
- Label* deopt = compiler->AddDeoptStub(deopt_id_, kDeoptCheckClass);
+ Label* deopt = compiler->AddDeoptStub(deopt_id_, ICData::kDeoptCheckClass);
__ tst(value, ShifterOperand(kSmiTagMask));
__ b(deopt, EQ);
__ CompareClassId(value, kInt32x4Cid, temp);
@@ -4828,8 +4833,7 @@
Register result = locs()->out(0).reg();
switch (op_kind()) {
case Token::kNEGATE: {
- Label* deopt = compiler->AddDeoptStub(deopt_id(),
- kDeoptUnaryOp);
+ Label* deopt = compiler->AddDeoptStub(deopt_id(), ICData::kDeoptUnaryOp);
__ rsbs(result, value, ShifterOperand(0));
__ b(deopt, VS);
break;
@@ -4947,7 +4951,7 @@
void DoubleToSmiInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
- Label* deopt = compiler->AddDeoptStub(deopt_id(), kDeoptDoubleToSmi);
+ Label* deopt = compiler->AddDeoptStub(deopt_id(), ICData::kDeoptDoubleToSmi);
Register result = locs()->out(0).reg();
DRegister value = EvenDRegisterOf(locs()->in(0).fpu_reg());
// First check for NaN. Checking for minint after the conversion doesn't work
@@ -5209,7 +5213,7 @@
void MergedMathInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
Label* deopt = NULL;
if (CanDeoptimize()) {
- deopt = compiler->AddDeoptStub(deopt_id(), kDeoptBinarySmiOp);
+ deopt = compiler->AddDeoptStub(deopt_id(), ICData::kDeoptBinarySmiOp);
}
if (kind() == MergedMathInstr::kTruncDivMod) {
Register left = locs()->in(0).reg();
@@ -5275,13 +5279,13 @@
void PolymorphicInstanceCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
- Label* deopt = compiler->AddDeoptStub(deopt_id(),
- kDeoptPolymorphicInstanceCallTestFail);
+ Label* deopt = compiler->AddDeoptStub(
+ deopt_id(), ICData::kDeoptPolymorphicInstanceCallTestFail);
if (ic_data().NumberOfChecks() == 0) {
__ b(deopt);
return;
}
- ASSERT(ic_data().num_args_tested() == 1);
+ ASSERT(ic_data().NumArgsTested() == 1);
if (!with_checks()) {
ASSERT(ic_data().HasOneTarget());
const Function& target = Function::ZoneHandle(ic_data().GetTargetAt(0));
@@ -5339,8 +5343,8 @@
void CheckClassInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
- const DeoptReasonId deopt_reason =
- licm_hoisted_ ? kDeoptHoistedCheckClass : kDeoptCheckClass;
+ const ICData::DeoptReasonId deopt_reason = licm_hoisted_ ?
+ ICData::kDeoptHoistedCheckClass : ICData::kDeoptCheckClass;
if (IsNullCheck()) {
Label* deopt = compiler->AddDeoptStub(deopt_id(), deopt_reason);
__ CompareImmediate(locs()->in(0).reg(),
@@ -5391,8 +5395,7 @@
void CheckSmiInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
Register value = locs()->in(0).reg();
- Label* deopt = compiler->AddDeoptStub(deopt_id(),
- kDeoptCheckSmi);
+ Label* deopt = compiler->AddDeoptStub(deopt_id(), ICData::kDeoptCheckSmi);
__ tst(value, ShifterOperand(kSmiTagMask));
__ b(deopt, NE);
}
@@ -5410,7 +5413,8 @@
void CheckArrayBoundInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
- Label* deopt = compiler->AddDeoptStub(deopt_id(), kDeoptCheckArrayBound);
+ Label* deopt = compiler->AddDeoptStub(deopt_id(),
+ ICData::kDeoptCheckArrayBound);
Location length_loc = locs()->in(kLengthPos);
Location index_loc = locs()->in(kIndexPos);
@@ -5510,7 +5514,8 @@
__ vmovdrr(EvenDRegisterOf(result), value, temp);
} else {
Register temp = locs()->temp(0).reg();
- Label* deopt = compiler->AddDeoptStub(deopt_id_, kDeoptUnboxInteger);
+ Label* deopt = compiler->AddDeoptStub(deopt_id_,
+ ICData::kDeoptUnboxInteger);
Label is_smi, done;
__ tst(value, ShifterOperand(kSmiTagMask));
__ b(&is_smi, EQ);
@@ -5662,7 +5667,7 @@
Label* deopt = NULL;
if (FLAG_throw_on_javascript_int_overflow) {
- deopt = compiler->AddDeoptStub(deopt_id(), kDeoptBinaryMintOp);
+ deopt = compiler->AddDeoptStub(deopt_id(), ICData::kDeoptBinaryMintOp);
}
switch (op_kind()) {
case Token::kBIT_AND: __ vandq(out, left, right); break;
@@ -5675,7 +5680,7 @@
QRegister ro = locs()->temp(tmpidx + 1).fpu_reg();
ASSERT(ro == Q7);
if (!FLAG_throw_on_javascript_int_overflow) {
- deopt = compiler->AddDeoptStub(deopt_id(), kDeoptBinaryMintOp);
+ deopt = compiler->AddDeoptStub(deopt_id(), ICData::kDeoptBinaryMintOp);
}
if (op_kind() == Token::kADD) {
__ vaddqi(kWordPair, out, left, right);
@@ -5729,7 +5734,7 @@
SRegister stemp0 = EvenSRegisterOf(dtemp0);
SRegister stemp1 = OddSRegisterOf(dtemp0);
- Label* deopt = compiler->AddDeoptStub(deopt_id(), kDeoptShiftMintOp);
+ Label* deopt = compiler->AddDeoptStub(deopt_id(), ICData::kDeoptShiftMintOp);
Label done;
__ CompareImmediate(shift, 0);
@@ -5807,8 +5812,7 @@
QRegister out = locs()->out(0).fpu_reg();
Label* deopt = NULL;
if (FLAG_throw_on_javascript_int_overflow) {
- deopt = compiler->AddDeoptStub(deopt_id(),
- kDeoptUnaryMintOp);
+ deopt = compiler->AddDeoptStub(deopt_id(), ICData::kDeoptUnaryMintOp);
}
__ vmvnq(out, value);
if (FLAG_throw_on_javascript_int_overflow) {
« no previous file with comments | « runtime/vm/intermediate_language.cc ('k') | runtime/vm/intermediate_language_ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698