зеркало из https://github.com/mozilla/gecko-dev.git
Bug 825599 - Specialize type of switch's conditions. r=h4writer
This commit is contained in:
Родитель
1e2c5f46c8
Коммит
4345e13559
|
@ -2376,6 +2376,8 @@ IonBuilder::processCondSwitchCase(CFGState &state)
|
|||
MDefinition *caseOperand = current->pop();
|
||||
MDefinition *switchOperand = current->peek(-1);
|
||||
MCompare *cmpResult = MCompare::New(switchOperand, caseOperand, JSOP_STRICTEQ);
|
||||
TypeOracle::BinaryTypes b = oracle->binaryTypes(script(), pc);
|
||||
cmpResult->infer(b, cx);
|
||||
JS_ASSERT(!cmpResult->isEffectful());
|
||||
current->add(cmpResult);
|
||||
current->end(MTest::New(cmpResult, bodyBlock, caseBlock));
|
||||
|
|
|
@ -133,7 +133,7 @@ IonSpewer::beginFunction(MIRGraph *graph, HandleScript function)
|
|||
return;
|
||||
|
||||
if (!FilterContainsLocation(function->filename, function->lineno)) {
|
||||
JS_ASSERT(!this->function);
|
||||
JS_ASSERT(!this->graph);
|
||||
// filter out logs during the compilation.
|
||||
filteredOutCompilations++;
|
||||
return;
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
var typedSwitch0 = function (a) {
|
||||
switch (a) {
|
||||
case null:
|
||||
return 0;
|
||||
case 1.1:
|
||||
return 1;
|
||||
case "2":
|
||||
return 2;
|
||||
case 3:
|
||||
return 3;
|
||||
}
|
||||
return 4;
|
||||
};
|
||||
|
||||
// reuse the same function for testing with different inputs & type.
|
||||
var typedSwitch1 = eval(typedSwitch0.toSource());
|
||||
var typedSwitch2 = eval(typedSwitch0.toSource());
|
||||
var typedSwitch3 = eval(typedSwitch0.toSource());
|
||||
var typedSwitch4 = eval(typedSwitch0.toSource());
|
||||
|
||||
for (var i = 0; i < 100; i++) {
|
||||
assertEq(typedSwitch0(null), 0);
|
||||
assertEq(typedSwitch1(1.1), 1);
|
||||
assertEq(typedSwitch2("2"), 2);
|
||||
assertEq(typedSwitch3(3), 3);
|
||||
assertEq(typedSwitch4(undefined), 4);
|
||||
}
|
Загрузка…
Ссылка в новой задаче