mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-20 16:55:40 +00:00
Bug 1635958 - Warp: Transpile GuardIsNull/Undefined. r=jandem
Differential Revision: https://phabricator.services.mozilla.com/D74460
This commit is contained in:
parent
e6422e2afd
commit
c585c049dc
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user