Closed
Bug 637856
Opened 15 years ago
Closed 14 years ago
TypeInference: tracer integration
Categories
(Core :: JavaScript Engine, defect)
Tracking
()
RESOLVED
WONTFIX
People
(Reporter: bhackett1024, Unassigned)
References
Details
Attachments
(1 file, 7 obsolete files)
|
134.81 KB,
patch
|
Details | Diff | Splinter Review |
Currently, enabling type inference disables the tracer. Fixing this should not be hard, the main problem is making sure that any code which is traced has been analyzed by inference, and that unexpected dynamic behavior (integer overflows, accessing missing properties) gets reported properly.
This is separate from the issue of having the tracer actually use inference results (which requires a mechanism to discard traces after type information has changed).
Comment 1•14 years ago
|
||
Imacros don't correctly propagate information back to inference. This patch attempts to fix the types after the imacro has finished executing.
Comment 2•14 years ago
|
||
The tracer never runs without having gone through the interpreter at least once during recording, so during that phase inference is ensured to run.
Currently the tracer has side exits on specialized types already, and when it bails out it *re-executes* the bytecode that caused the guard to fail. This re-execution should propagate correct type information.
The question is: are there cases where the tracer does not bail out on its type assumptions but there are still inference-observable changes to existing types?
I can't find any, but maybe bhackett can weigh in on this.
Comment 3•14 years ago
|
||
Fixes incorrect emitted code from the recorder for |JSOP_NEWINIT| and |JSOP_NEWOBJECT|
Attachment #543310 -
Attachment is obsolete: true
| Reporter | ||
Comment 4•14 years ago
|
||
(In reply to comment #2)
> The tracer never runs without having gone through the interpreter at least
> once during recording, so during that phase inference is ensured to run.
>
> Currently the tracer has side exits on specialized types already, and when
> it bails out it *re-executes* the bytecode that caused the guard to fail.
> This re-execution should propagate correct type information.
>
> The question is: are there cases where the tracer does not bail out on its
> type assumptions but there are still inference-observable changes to
> existing types?
>
> I can't find any, but maybe bhackett can weigh in on this.
I don't think there will be much to worry about here, most of the side exits the tracer takes are testing information we know about statically, and the additional dynamic type results (like integer overflow) should throw things off trace already. Type barriers need to be tested when in place, which will introduce new side exits but should be OK if the op was side effect free. Also, type changes will be able to throw things off trace at different points in the VM than was possible previously, I don't know if this will cause problems.
Comment 5•14 years ago
|
||
Updated against new TM merge in JM
Attachment #543381 -
Attachment is obsolete: true
Comment 6•14 years ago
|
||
Attachment #543565 -
Attachment is obsolete: true
Comment 7•14 years ago
|
||
Comment 8•14 years ago
|
||
Comment 9•14 years ago
|
||
Comment 10•14 years ago
|
||
Still a bunch more failures to go -- perhaps this bug should be split?
Comment 11•14 years ago
|
||
This patch makes all jit-tests pass with -n -a -j on JM:74432. It also includes a patch to not capture types of dead slots.
Attachment #544994 -
Attachment is obsolete: true
Attachment #544995 -
Attachment is obsolete: true
Attachment #544996 -
Attachment is obsolete: true
Attachment #544997 -
Attachment is obsolete: true
Comment 12•14 years ago
|
||
Is this WONTFIX now?
Comment 13•14 years ago
|
||
I believe so -- the tracer should be slated for removal.
Updated•14 years ago
|
Status: NEW → RESOLVED
Closed: 14 years ago
Resolution: --- → WONTFIX
You need to log in
before you can comment on or make changes to this bug.
Description
•