d88a5e56ec9382799f89b9a87d8b4f9a561ff1af: Add support to demote stores of constants that are currently represented as float but are really integers. bitwise.js is now compiled complete fp-casts free.
Andreas Gal <gal@mozilla.com> - Mon, 07 Jul 2008 01:05:53 -0700 - rev 17482
Add support to demote stores of constants that are currently represented as float but are really integers. bitwise.js is now compiled complete fp-casts free.
0f7c4afcd5c83af511ec58c8798e0a4716524f96: Demote floating point comparisons even if one side is constant (bug in nanojit, filed as #443884 against tamarin). Also demote add/sub/mul using the integer overflow detection side exit code that Ed adopted upstream. Tight loops (bitwise) are not emitted completely as integer code after the initial compilation using doubles triggered a speculative demotion of the context slots.
Andreas Gal <gal@mozilla.com> - Mon, 07 Jul 2008 00:43:40 -0700 - rev 17481
Demote floating point comparisons even if one side is constant (bug in nanojit, filed as #443884 against tamarin). Also demote add/sub/mul using the integer overflow detection side exit code that Ed adopted upstream. Tight loops (bitwise) are not emitted completely as integer code after the initial compilation using doubles triggered a speculative demotion of the context slots.
a051c0844e1ba0b0127db7aeccebebd09222e781: Sink type conversions into the side exit by updating the map and seeing though the cast in the store (in ExitFilter). Add a whole bunch of asserts on the varios speculative type states to make sure we get the state machine right. Import speculated integer values as integers into the trace (indicate in entry map).
Andreas Gal <gal@mozilla.com> - Mon, 07 Jul 2008 00:10:22 -0700 - rev 17480
Sink type conversions into the side exit by updating the map and seeing though the cast in the store (in ExitFilter). Add a whole bunch of asserts on the varios speculative type states to make sure we get the state machine right. Import speculated integer values as integers into the trace (indicate in entry map).
d268132c1bf643d4f98d139a5444468bbd87e5ee: Added loop-tail driven context slot type demotion. Without all the buzzwords, what this essentially means is that we detect if the last value that the trace leaves in a slot (which is the value that flows along the backedge back to the loop header) is known to originate from an integer value via i2f, we flag the slot as type integer and recompile the trace. We do this where type stability is certain (result of an and, i.e.) or where its very likely (++operator). If the speculation fails, the same analysis flags the slot as blocked, which means it will always be double. The hope is that this analysis converges quickly (1-2 recompilations tops).
Andreas Gal <gal@mozilla.com> - Sun, 06 Jul 2008 22:35:19 -0700 - rev 17479
Added loop-tail driven context slot type demotion. Without all the buzzwords, what this essentially means is that we detect if the last value that the trace leaves in a slot (which is the value that flows along the backedge back to the loop header) is known to originate from an integer value via i2f, we flag the slot as type integer and recompile the trace. We do this where type stability is certain (result of an and, i.e.) or where its very likely (++operator). If the speculation fails, the same analysis flags the slot as blocked, which means it will always be double. The hope is that this analysis converges quickly (1-2 recompilations tops).
7f3e0b5b05dd1e749b772a6ca4357262b48b46eb: Make sure we don't get the argument order in BoxDouble wrong again.
Andreas Gal <gal@mozilla.com> - Sun, 06 Jul 2008 20:27:50 -0700 - rev 17478
Make sure we don't get the argument order in BoxDouble wrong again.
c3568285ff19a11ee557006da9b8e70553e69267: Make typemap uint8_t and fix order of arguments in call to BoxDouble.
Andreas Gal <gal@mozilla.com> - Sun, 06 Jul 2008 20:25:49 -0700 - rev 17477
Make typemap uint8_t and fix order of arguments in call to BoxDouble.
ce35d7c30a31f407fc779c1c40cc779c6b7e1b90: remove outdated guard (now inferred via filter as needed)
shaver@mozilla.org - Sun, 06 Jul 2008 23:11:59 -0400 - rev 17476
remove outdated guard (now inferred via filter as needed)
513b636c199b467c3164ea1fbb319d0e6e84ad95: we only speak double around here now
shaver@mozilla.org - Sun, 06 Jul 2008 23:01:58 -0400 - rev 17475
we only speak double around here now
37dd888fcb4252ce63619cba74722c6640fe0154: remove bogus NOT_REACHED
shaver@mozilla.org - Sun, 06 Jul 2008 22:39:02 -0400 - rev 17474
remove bogus NOT_REACHED
fdab515b3c8acd9f82177744961a47262e627aa9: Strength reduce i2f(doubleToInt32(x)) and u2f(doubleToUint32(x)) to x. This eliminate most of the on-trace overhead, but we still need type peeling of loop variable into int to win back the performance loss casting introduced.
Andreas Gal <gal@mozilla.com> - Sun, 06 Jul 2008 17:43:08 -0700 - rev 17473
Strength reduce i2f(doubleToInt32(x)) and u2f(doubleToUint32(x)) to x. This eliminate most of the on-trace overhead, but we still need type peeling of loop variable into int to win back the performance loss casting introduced.
f6179396df600b85b1b6cda53ee18db24fa06576: Reduce redundant doubleToInt32(i2f(x)) chains to simply x.
Andreas Gal <gal@mozilla.com> - Sun, 06 Jul 2008 17:32:21 -0700 - rev 17472
Reduce redundant doubleToInt32(i2f(x)) chains to simply x.
0b810d0bf2e7572dbc69b66fce1c3a8b323560bf: Strength reduce BoxDouble(i2f(x)) to BoxInt32(x). Make sure loop indexes are actually integers. This guard will be eliminated further down in the pipeline if we decided to peel the type of the loop variable (index) down to integer.
Andreas Gal <gal@mozilla.com> - Sun, 06 Jul 2008 16:38:54 -0700 - rev 17471
Strength reduce BoxDouble(i2f(x)) to BoxInt32(x). Make sure loop indexes are actually integers. This guard will be eliminated further down in the pipeline if we decided to peel the type of the loop variable (index) down to integer.
5ebea36d79ade1ab78789c7d79a0bbb3fbfeb1cf: Since numbers are now always represented by doubles at the recorder/type level, using BoxDouble and UnboxDouble only when moving numbers from or to memory. A filter will then turn f2i(UnboxDouble) into UnboxInt where appropriate.
Andreas Gal <gal@mozilla.com> - Sun, 06 Jul 2008 16:18:45 -0700 - rev 17470
Since numbers are now always represented by doubles at the recorder/type level, using BoxDouble and UnboxDouble only when moving numbers from or to memory. A filter will then turn f2i(UnboxDouble) into UnboxInt where appropriate.
8374e34d597e56684f05628edb4f5c0bf8752e44: Move the type level from int/double to number. All traces start out as double in all slots, and denote and promote to/from int as needed. The FuncFilter optimizes on-trace casting and elininates redundant f->i-> chains. More optimization needed on this of course, and this code is now a bit slower than the previous integer-register use. However, this does solve the q += 2.5 issues. The heap access code does not properly cast yet and is likely unstable.
Andreas Gal <gal@mozilla.com> - Sun, 06 Jul 2008 15:55:04 -0700 - rev 17469
Move the type level from int/double to number. All traces start out as double in all slots, and denote and promote to/from int as needed. The FuncFilter optimizes on-trace casting and elininates redundant f->i-> chains. More optimization needed on this of course, and this code is now a bit slower than the previous integer-register use. However, this does solve the q += 2.5 issues. The heap access code does not properly cast yet and is likely unstable.
360a6ce57d28f76b5f739770c81c1d0ff57926ce: Trace GETGVAR and INCGVAR, though not yet correctly.
shaver@mozilla.org - Sun, 06 Jul 2008 16:59:59 -0400 - rev 17468
Trace GETGVAR and INCGVAR, though not yet correctly.
d84c7e0344ed2c6bd7c28ba6a3eb286558c490e4: Add unary and binary helpers that automatically demote and promote when dealing with integer operations (not used yet, need loop typemap peeling in place first.)
Andreas Gal <gal@mozilla.com> - Sun, 06 Jul 2008 13:16:34 -0700 - rev 17467
Add unary and binary helpers that automatically demote and promote when dealing with integer operations (not used yet, need loop typemap peeling in place first.)
8e62c283774efb8a96b0d6e0aa9043f71061a69a: JSVAL_IS_BOOLEAN does what isTrueOrFalse was trying to do.
Andreas Gal <gal@mozilla.com> - Sun, 06 Jul 2008 12:16:55 -0700 - rev 17466
JSVAL_IS_BOOLEAN does what isTrueOrFalse was trying to do.
0ce416b5a3df5c324d78859a3d91ddf78678a3b5: Fix template, should use typename, not class.
Andreas Gal <gal@mozilla.com> - Sun, 06 Jul 2008 12:03:51 -0700 - rev 17465
Fix template, should use typename, not class.
f89cf130bd52037f006c1b950abfebe0e1c6df7f: Add ExitFilter, which builds side exit typemaps for us. This had to be moved into a filter, because this has to happen after we eliminate redundant i2f-f2i chains as we can sink those into the side exit by simply storing the unpromoted/undemoted value and just flip the type in the exit map.
Andreas Gal <gal@mozilla.com> - Sun, 06 Jul 2008 11:48:41 -0700 - rev 17464
Add ExitFilter, which builds side exit typemaps for us. This had to be moved into a filter, because this has to happen after we eliminate redundant i2f-f2i chains as we can sink those into the side exit by simply storing the unpromoted/undemoted value and just flip the type in the exit map.
fcd3450f9272bba03d987ed0fe90040c2253a801: Merge.
Andreas Gal <gal@mozilla.com> - Sun, 06 Jul 2008 11:19:06 -0700 - rev 17463
Merge.
(0) -10000 -3000 -1000 -300 -100 -50 -20 +20 +50 +100 +300 +1000 +3000 tip