Status

()

P5
normal
4 years ago
2 years ago

People

(Reporter: mjrosenb, Unassigned)

Tracking

Firefox Tracking Flags

(Not tracked)

Details

Attachments

(1 attachment)

118 bytes, application/x-javascript
Details
(Reporter)

Description

4 years ago
I just added a patch for bug 1085824, which includes several fixes for problems in the move resolver, designed to deal with insanity induced by having aliased registers.  I would like to:
  Revert the move resolver to the state it was in originally (plus information about aliasing)
  Add in a second move resolver that just spills all registers to the stack, then loads them in order
  Rather than handling every corner case, if we ever run into a compound cycle (they are easy enough to detect, these were assertions in the original MoveResolver), fall back to the simple move resolver.

I haven't checked yet, but my intuition tells me that these rare cases basically never come up in real code.

Comment 1

3 years ago
If it's going to be rewritten we should also consider fixing problems like these:

[MoveGroup]
   03dfe2c8  e52de004       str lr, [sp, #-4]!
   03dfe2cc  e59de09c       ldr lr, [sp, #+156]
   03dfe2d0  e58de070       str lr, [sp, #+112]
   03dfe2d4  e59de000       ldr lr, [sp, #+0]
   03dfe2d8  e28dd004       add sp, sp, #4

Two bugs in this sequence: (1) ip is available as a scratch so spilling and and restoring lr is unnecessary, and (2) the two last instructions could be merged into a regular pop.

(Will attach the test case, which is trivial; this code is from a run with -D with the new disassembler; the block in question is not hot, but the code could be tighter even so.)

Comment 2

3 years ago
Created attachment 8651781 [details]
Test program

Updated

2 years ago
Priority: -- → P5
You need to log in before you can comment on or make changes to this bug.