Closed Bug 462522 Opened 16 years ago Closed 16 years ago

Excessive register shuffling after call sites

Categories

(Tamarin Graveyard :: Baseline JIT (CodegenLIR), defect)

x86
Windows XP
defect
Not set
normal

Tracking

(Not tracked)

VERIFIED FIXED

People

(Reporter: edwsmith, Unassigned)

Details

Attachments

(1 file)

number2 = fcall number ( #core doubleToAtom_sse2_3 )
              push eax            eax(doubleToAtom_sse2_3) edi(ldc1)
              mov ecx,14000168    edi(ldc1)
              call number         edi(ldc1)
              mov esi,edi         edi(ldc1)
->            mov edi,-12(ebp)
->            mov ebx,esi         esi(ldc1) edi(param1)
->            mov esi,-8(ebp)     edi(param1)
->            mov ecx,ebx         ebx(ldc1) esi(param2) edi(param1)
->            mov ebx,-4(ebp)     esi(param2) edi(param1)
              mov eax,4           ecx(ldc1) ebx(param3) esi(param2) edi(param1)

in this case, ecx (ldc1) is the highest priority live var, so we want to spill one of ebx, esi, edi.  We do that by spilling ebx, however this makes ebx now the highest priority register, which then spills to esi, etc.  domino effect.
I'm seeing 1-3% speedup on macos10.5 (x86) from this fix.  curious to see how TM fares.
Attachment #345766 - Flags: review?(rreitmai)
Attachment #345766 - Flags: review?(rreitmai) → review+
changeset:   1043:3e22c99054a9
Status: NEW → RESOLVED
Closed: 16 years ago
Resolution: --- → FIXED
grayson, could you give this a try I am on the road
I did. No perceived difference on shell-level sunspider. You want me to check browser-level?
Nah I doubt it makes a difference there. But we should apply the patch anyway
Status: RESOLVED → VERIFIED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: