Closed Bug 890524 Opened 11 years ago Closed 11 years ago

Big browser-only Kraken crypto-aes regression since Firefox 21

Categories

(Core :: JavaScript Engine, defect)

defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla25

People

(Reporter: jandem, Assigned: jandem)

References

Details

Attachments

(1 file)

Attached patch PatchSplinter 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)
This fixes the crypto-aes regression reported in https://bugzilla.mozilla.org/show_bug.cgi?id=849325
Blocks: 849325
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+
Renamed MaybeConvertToDoubleElement to MaybeToDoubleElement as discussed on IRC.

https://hg.mozilla.org/integration/mozilla-inbound/rev/cf84b4a4e663
https://hg.mozilla.org/mozilla-central/rev/cf84b4a4e663
Status: ASSIGNED → RESOLVED
Closed: 11 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla25
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.

Attachment

General

Created:
Updated:
Size: