Closed
Bug 890524
Opened 12 years ago
Closed 12 years ago
Big browser-only Kraken crypto-aes regression since Firefox 21
Categories
(Core :: JavaScript Engine, defect)
Core
JavaScript Engine
Tracking
()
RESOLVED
FIXED
mozilla25
People
(Reporter: jandem, Assigned: jandem)
References
Details
Attachments
(1 file)
14.31 KB,
patch
|
h4writer
:
review+
|
Details | Diff | Splinter Review |
Bug 833898 caused a big browser-only Kraken crypto-aes regression (> 2x slower). I also see the regression if I run just this test in the shell, but unfortunately when running all Kraken tests it doesn't show up so we didn't notice it.. I have no idea why, it may be GC related somehow. It's really unfortunate we didn't see this earlier - we should compare browser vs shell numbers more often.
The problem is that if we have a SETELEM with AmbiguousDoubleConversion, some objects require double conversion but for other objects it's invalid to convert to double. So we use an IC instead of inlining the store directly (and this IC does not attach a stub). This patch adds a new instruction that checks if the array's elements header has the CONVERT_DOUBLE_ELEMENTS flag set and only in that case it converts the value to double.
For now this handles only integer values - I think that's the most common case and making it work for all values will require factoring out LValueToDouble. I hope we can uplift this to aurora so I want to keep the patch as simple as possible.
I did a Try push and this patch fixes the problem:
crypto-aes: 2.09x as fast 207.9ms +/- 2.1% 99.6ms +/-
Hannes, if you're not comfortable reviewing this, feel free to forward to Brian.
Attachment #771650 -
Flags: review?(hv1989)
![]() |
||
Comment 1•12 years ago
|
||
This fixes the crypto-aes regression reported in https://bugzilla.mozilla.org/show_bug.cgi?id=849325
Comment 2•12 years ago
|
||
Comment on attachment 771650 [details] [diff] [review]
Patch
Review of attachment 771650 [details] [diff] [review]:
-----------------------------------------------------------------
Good catch! Seems pretty straightforward to what it does.
The only thing that bothers me is the difference between "MaybeConvertToDoubles" and "AmbiguousDoubleConversion".
Currently we convert "MaybeConvertToDoubles" to "AlwaysConvert" and for "AmbiguousDoubleConversion" we now use "MMaybeConvertToDoubles".
This is confusing... Should we find another name for "types::StackTypeSet::MaybeConvertToDoubles" ??
Attachment #771650 -
Flags: review?(hv1989) → review+
Assignee | ||
Comment 3•12 years ago
|
||
Renamed MaybeConvertToDoubleElement to MaybeToDoubleElement as discussed on IRC.
https://hg.mozilla.org/integration/mozilla-inbound/rev/cf84b4a4e663
Comment 4•12 years ago
|
||
Status: ASSIGNED → RESOLVED
Closed: 12 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla25
Comment 5•12 years ago
|
||
Should/can this be uplifted? It's still early in the cycle, and 24 will be ESR so there may be enough reasons to warrant an uplift.
You need to log in
before you can comment on or make changes to this bug.
Description
•