Bug 1635958 - Warp: Transpile GuardIsNull/Undefined. r=jandem

Differential Revision: https://phabricator.services.mozilla.com/D74460
This commit is contained in:
Tom Schuster 2020-05-11 08:51:22 +00:00
Родитель e6422e2afd
Коммит c585c049dc
2 изменённых файлов: 28 добавлений и 13 удалений

Просмотреть файл

@ -70,13 +70,13 @@
- name: GuardIsNull
shared: true
transpile: false
transpile: true
args:
input: ValId
- name: GuardIsUndefined
shared: true
transpile: false
transpile: true
args:
input: ValId

Просмотреть файл

@ -215,17 +215,10 @@ bool WarpCacheIRTranspiler::emitGuardType(ValOperandId inputId,
case ValueType::Double:
case ValueType::Boolean:
return emitGuardTo(inputId, MIRTypeFromValueType(JSValueType(type)));
case ValueType::Undefined: {
auto* ins =
MGuardValue::New(alloc(), getOperand(inputId), UndefinedValue());
add(ins);
return true;
}
case ValueType::Null: {
auto* ins = MGuardValue::New(alloc(), getOperand(inputId), NullValue());
add(ins);
return true;
}
case ValueType::Undefined:
return emitGuardIsUndefined(inputId);
case ValueType::Null:
return emitGuardIsNull(inputId);
case ValueType::Magic:
case ValueType::PrivateGCThing:
case ValueType::Object:
@ -306,6 +299,28 @@ bool WarpCacheIRTranspiler::emitGuardIsNullOrUndefined(ValOperandId inputId) {
return true;
}
bool WarpCacheIRTranspiler::emitGuardIsNull(ValOperandId inputId) {
MDefinition* input = getOperand(inputId);
if (input->type() == MIRType::Null) {
return true;
}
auto* ins = MGuardValue::New(alloc(), input, NullValue());
add(ins);
return true;
}
bool WarpCacheIRTranspiler::emitGuardIsUndefined(ValOperandId inputId) {
MDefinition* input = getOperand(inputId);
if (input->type() == MIRType::Undefined) {
return true;
}
auto* ins = MGuardValue::New(alloc(), input, UndefinedValue());
add(ins);
return true;
}
bool WarpCacheIRTranspiler::emitGuardToInt32Index(ValOperandId inputId,
Int32OperandId resultId) {
MDefinition* input = getOperand(inputId);