Bug 11576 - .25% performance regression on JS iBench due to JSImmediate changes
Summary: .25% performance regression on JS iBench due to JSImmediate changes
Status: CLOSED INVALID
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: 420+
Hardware: Mac OS X 10.4
: P1 Normal
Assignee: Nobody
URL:
Keywords: InRadar
Depends on:
Blocks:
 
Reported: 2006-11-11 21:32 PST by Geoffrey Garen
Modified: 2007-07-13 21:40 PDT (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Geoffrey Garen 2006-11-11 21:32:07 PST
Platform compatibility changes to JSImmediate.h between r17372 and r17740 caused a .25% performance regression on JS iBench. I ran the test twice.

I suspect either that something is no longer being inlined, or that something that used to be a compile-time constant is now a run-time lookup.
Comment 1 Alexey Proskuryakov 2006-11-12 01:46:49 PST
Is this on Intel or PowerPC? I have checked PowerPC disassembly, and JSImmediate is still fully inlined (the intermediate helpers are simply not present in the object code:

otool -tvV JavaScriptCore | grep JSImmediate | c++filt

I have also checked several call spots to verify that the constants haven't magically moved to data segment or anything.

> changes to JSImmediate.h between r17372 and r17740

Does reverting this single file to r17372 fix the regression?

I have tried reverting this file and comparing full JavaScriptCore disassemblies, but that proved difficult - gcc has slightly moved a lot of code and data for whatever reason. However, I did spend some time comparing them, and found no smoking gun.
Comment 2 Geoffrey Garen 2006-11-12 16:15:06 PST
Intel. MacBook Pro. 

Yes, reverting just JSImmediate.h fixes the regression. That's how I ran the test.

.25% is a small change, but it's slightly greater than JS iBench's margin of error (which is about .15%-.20%).
Comment 3 Alexey Proskuryakov 2006-11-12 22:08:16 PST
Hmm, Intel disassembly also looks OK...

The biggest change I see is that many large switches (such as those in callAsFunction methods) now have their cases ordered differently, for no apparent reason.
Comment 4 Mark Rowe (bdash) 2007-01-28 19:01:41 PST
<rdar://problem/4960249>
Comment 5 Oliver Hunt 2007-07-13 21:40:17 PDT
Closed in radar