Bug 922134 - Remove unused JSContext parameter from MIR infer() operations, r=jandem.
--- a/js/src/jit/IonBuilder.cpp
+++ b/js/src/jit/IonBuilder.cpp
@@ -3097,17 +3097,17 @@ IonBuilder::processCondSwitchCase(CFGSta
return ControlStatus_Error;
// Terminate the last case condition block by emitting the code
// corresponding to JSOP_CASE bytecode.
if (bodyBlock != caseBlock) {
MDefinition *caseOperand = current->pop();
MDefinition *switchOperand = current->peek(-1);
MCompare *cmpResult = MCompare::New(switchOperand, caseOperand, JSOP_STRICTEQ);
- cmpResult->infer(cx, inspector, pc);
+ cmpResult->infer(inspector, pc);
JS_ASSERT(!cmpResult->isEffectful());
current->add(cmpResult);
current->end(MTest::New(cmpResult, bodyBlock, caseBlock));
// Add last case as predecessor of the body if the body is aliasing
// the previous case body.
if (!bodyIsNew && !bodyBlock->addPredecessorPopN(current, 1))
return ControlStatus_Error;
@@ -3210,17 +3210,17 @@ IonBuilder::jsop_andor(JSOp op)
MBasicBlock *evalRhs = newBlock(current, rhsStart);
MBasicBlock *join = newBlock(current, joinStart);
if (!evalRhs || !join)
return false;
MTest *test = (op == JSOP_AND)
? MTest::New(lhs, evalRhs, join)
: MTest::New(lhs, join, evalRhs);
- test->infer(cx);
+ test->infer();
current->end(test);
if (!cfgStack_.append(CFGState::AndOr(joinStart, join)))
return false;
setCurrentAndSpecializePhis(evalRhs);
return true;
}
@@ -5327,17 +5327,17 @@ IonBuilder::jsop_compare(JSOp op)
{
MDefinition *right = current->pop();
MDefinition *left = current->pop();
MCompare *ins = MCompare::New(left, right, op);
current->add(ins);
current->push(ins);
- ins->infer(cx, inspector, pc);
+ ins->infer(inspector, pc);
if (ins->isEffectful() && !resumeAfter(ins))
return false;
return true;
}
JSObject *
IonBuilder::getNewArrayTemplateObject(uint32_t count)
@@ -7671,17 +7671,17 @@ IonBuilder::jsop_runonce()
bool
IonBuilder::jsop_not()
{
MDefinition *value = current->pop();
MNot *ins = new MNot(value);
current->add(ins);
current->push(ins);
- ins->infer(cx);
+ ins->infer();
return true;
}
inline bool
TestClassHasAccessorHook(const Class *clasp, bool isGetter)
{
if (isGetter && clasp->ops.getGeneric)
return true;
@@ -9189,17 +9189,17 @@ IonBuilder::jsop_this()
}
bool
IonBuilder::jsop_typeof()
{
MDefinition *input = current->pop();
MTypeOf *ins = MTypeOf::New(input, input->type());
- ins->infer(cx);
+ ins->infer();
current->add(ins);
current->push(ins);
return true;
}
bool
--- a/js/src/jit/MIR.cpp
+++ b/js/src/jit/MIR.cpp
@@ -193,47 +193,47 @@ MDefinition::analyzeEdgeCasesForward()
}
void
MDefinition::analyzeEdgeCasesBackward()
{
}
static bool
-MaybeEmulatesUndefined(JSContext *cx, MDefinition *op)
+MaybeEmulatesUndefined(MDefinition *op)
{
if (!op->mightBeType(MIRType_Object))
return false;
types::TemporaryTypeSet *types = op->resultTypeSet();
if (!types)
return true;
return types->maybeEmulatesUndefined();
}
static bool
-MaybeCallable(JSContext *cx, MDefinition *op)
+MaybeCallable(MDefinition *op)
{
if (!op->mightBeType(MIRType_Object))
return false;
types::TemporaryTypeSet *types = op->resultTypeSet();
if (!types)
return true;
return types->maybeCallable();
}
void
-MTest::infer(JSContext *cx)
+MTest::infer()
{
JS_ASSERT(operandMightEmulateUndefined());
- if (!MaybeEmulatesUndefined(cx, getOperand(0)))
+ if (!MaybeEmulatesUndefined(getOperand(0)))
markOperandCantEmulateUndefined();
}
MDefinition *
MTest::foldsTo(bool useValueNumbers)
{
MDefinition *op = getOperand(0);
@@ -1550,25 +1550,25 @@ ObjectOrSimplePrimitive(MDefinition *op)
{
// Return true if op is either undefined/null/bolean/int32 or an object.
return !op->mightBeType(MIRType_String)
&& !op->mightBeType(MIRType_Double)
&& !op->mightBeType(MIRType_Magic);
}
static bool
-CanDoValueBitwiseCmp(JSContext *cx, MDefinition *lhs, MDefinition *rhs, bool looseEq)
+CanDoValueBitwiseCmp(MDefinition *lhs, MDefinition *rhs, bool looseEq)
{
// Only primitive (not double/string) or objects are supported.
// I.e. Undefined/Null/Boolean/Int32 and Object
if (!ObjectOrSimplePrimitive(lhs) || !ObjectOrSimplePrimitive(rhs))
return false;
// Objects that emulate undefined are not supported.
- if (MaybeEmulatesUndefined(cx, lhs) || MaybeEmulatesUndefined(cx, rhs))
+ if (MaybeEmulatesUndefined(lhs) || MaybeEmulatesUndefined(rhs))
return false;
// In the loose comparison more values could be the same,
// but value comparison reporting otherwise.
if (looseEq) {
// Undefined compared loosy to Null is not supported,
// because tag is different, but value can be the same (undefined == null).
@@ -1666,21 +1666,21 @@ MBinaryInstruction::tryUseUnsignedOperan
replaceOperand(1, newrhs);
}
return true;
}
return false;
}
void
-MCompare::infer(JSContext *cx, BaselineInspector *inspector, jsbytecode *pc)
+MCompare::infer(BaselineInspector *inspector, jsbytecode *pc)
{
JS_ASSERT(operandMightEmulateUndefined());
- if (!MaybeEmulatesUndefined(cx, getOperand(0)) && !MaybeEmulatesUndefined(cx, getOperand(1)))
+ if (!MaybeEmulatesUndefined(getOperand(0)) && !MaybeEmulatesUndefined(getOperand(1)))
markNoOperandEmulatesUndefined();
MIRType lhs = getOperand(0)->type();
MIRType rhs = getOperand(1)->type();
bool looseEq = jsop() == JSOP_EQ || jsop() == JSOP_NE;
bool strictEq = jsop() == JSOP_STRICTEQ || jsop() == JSOP_STRICTNE;
bool relationalEq = !(looseEq || strictEq);
@@ -1775,17 +1775,17 @@ MCompare::infer(JSContext *cx, BaselineI
if (lhs == MIRType_Boolean)
swapOperands();
compareType_ = Compare_Boolean;
return;
}
// Determine if we can do the compare based on a quick value check.
- if (!relationalEq && CanDoValueBitwiseCmp(cx, getOperand(0), getOperand(1), looseEq)) {
+ if (!relationalEq && CanDoValueBitwiseCmp(getOperand(0), getOperand(1), looseEq)) {
compareType_ = Compare_Value;
return;
}
// Type information is not good enough to pick out a particular type of
// comparison we can do here. Try to specialize based on any baseline
// caches that have been generated for the opcode. These will cause the
// instruction's type policy to insert fallible unboxes to the appropriate
@@ -1869,21 +1869,21 @@ MTypeOf::foldsTo(bool useValueNumbers)
return this;
}
JSRuntime *rt = GetIonContext()->runtime;
return MConstant::New(StringValue(TypeName(type, rt)));
}
void
-MTypeOf::infer(JSContext *cx)
+MTypeOf::infer()
{
JS_ASSERT(inputMaybeCallableOrEmulatesUndefined());
- if (!MaybeEmulatesUndefined(cx, input()) && !MaybeCallable(cx, input()))
+ if (!MaybeEmulatesUndefined(input()) && !MaybeCallable(input()))
markInputNotCallableOrEmulatesUndefined();
}
MBitAnd *
MBitAnd::New(MDefinition *left, MDefinition *right)
{
return new MBitAnd(left, right);
}
@@ -2316,21 +2316,21 @@ MCompare::foldsTo(bool useValueNumbers)
JS_ASSERT(type() == MIRType_Boolean);
return MConstant::New(BooleanValue(result));
}
return this;
}
void
-MNot::infer(JSContext *cx)
+MNot::infer()
{
JS_ASSERT(operandMightEmulateUndefined());
- if (!MaybeEmulatesUndefined(cx, getOperand(0)))
+ if (!MaybeEmulatesUndefined(getOperand(0)))
markOperandCantEmulateUndefined();
}
MDefinition *
MNot::foldsTo(bool useValueNumbers)
{
// Fold if the input is constant
if (operand()->isConstant()) {
--- a/js/src/jit/MIR.h
+++ b/js/src/jit/MIR.h
@@ -1275,17 +1275,17 @@ class MTest
}
TypePolicy *typePolicy() {
return this;
}
AliasSet getAliasSet() const {
return AliasSet::None();
}
- void infer(JSContext *cx);
+ void infer();
MDefinition *foldsTo(bool useValueNumbers);
void markOperandCantEmulateUndefined() {
operandMightEmulateUndefined_ = false;
}
bool operandMightEmulateUndefined() const {
return operandMightEmulateUndefined_;
}
@@ -2133,17 +2133,17 @@ class MCompare
INSTRUCTION_HEADER(Compare)
static MCompare *New(MDefinition *left, MDefinition *right, JSOp op);
static MCompare *NewAsmJS(MDefinition *left, MDefinition *right, JSOp op, CompareType compareType);
bool tryFold(bool *result);
bool evaluateConstantOperands(bool *result);
MDefinition *foldsTo(bool useValueNumbers);
- void infer(JSContext *cx, BaselineInspector *inspector, jsbytecode *pc);
+ void infer(BaselineInspector *inspector, jsbytecode *pc);
CompareType compareType() const {
return compareType_;
}
bool isDoubleComparison() const {
return compareType() == Compare_Double ||
compareType() == Compare_DoubleMaybeCoerceLHS ||
compareType() == Compare_DoubleMaybeCoerceRHS;
}
@@ -3013,17 +3013,17 @@ class MTypeOf
TypePolicy *typePolicy() {
return this;
}
MIRType inputType() const {
return inputType_;
}
MDefinition *foldsTo(bool useValueNumbers);
- void infer(JSContext *cx);
+ void infer();
bool inputMaybeCallableOrEmulatesUndefined() const {
return inputMaybeCallableOrEmulatesUndefined_;
}
void markInputNotCallableOrEmulatesUndefined() {
inputMaybeCallableOrEmulatesUndefined_ = false;
}
@@ -5027,17 +5027,17 @@ class MNot
static MNot *NewAsmJS(MDefinition *elements) {
MNot *ins = new MNot(elements);
ins->setResultType(MIRType_Int32);
return ins;
}
INSTRUCTION_HEADER(Not);
- void infer(JSContext *cx);
+ void infer();
MDefinition *foldsTo(bool useValueNumbers);
void markOperandCantEmulateUndefined() {
operandMightEmulateUndefined_ = false;
}
bool operandMightEmulateUndefined() const {
return operandMightEmulateUndefined_;
}