[Webkit-unassigned] [Bug 171387] New: AirLowerStackArgs: generate less code for large offsets

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Thu Apr 27 12:47:05 PDT 2017


https://bugs.webkit.org/show_bug.cgi?id=171387

            Bug ID: 171387
           Summary: AirLowerStackArgs: generate less code for large
                    offsets
           Product: WebKit
           Version: WebKit Nightly Build
          Hardware: Unspecified
                OS: Unspecified
            Status: NEW
          Severity: Normal
          Priority: P2
         Component: JavaScriptCore
          Assignee: webkit-unassigned at lists.webkit.org
          Reporter: jfbastien at apple.com
                CC: fpizlo at apple.com, jfbastien at apple.com,
                    keith_miller at apple.com, mark.lam at apple.com,
                    msaboff at apple.com, sbarati at apple.com
        Depends on: 170215

As part of bug #170215 I'm teaching AirowerStackArgs to handle large offsets from FP / SP on ARM, because it used to just assert.

We'll turn code such as:
    Move (spill337), (spill201), %r0, @8735

Into:
    Move $1404, %r16, @8736
    Add64 %sp, %r16, @8736
    Move (%r16), 2032(%sp), %r0, @8736

The code I'm writing for now will be silly and won't re-use r16 for large offsets even if it could.

This could be generated:
    Move 1416(%sp), 2016(%sp), %r0, @8735
    Move $1404, %r16, @8736
    Add64 %sp, %r16, @8736
    Move (%r16), 2032(%sp), %r0, @8736
    Move 1400(%sp), 2024(%sp), %r0, @8737
    Move 16(%r16), 2160(%sp), %r0, @8738
    Move 360(%r16), 2280(%sp), %r0, @8739
    Move 1376(%sp), 2080(%sp), %r0, @8740
    Move 24(%r16), 2104(%sp), %r0, @8741
    Move 1040(%sp), -208(%fp), %r0, @8742
    Move 1360(%sp), 2200(%sp), %r0, @8743
    Move 8(%r16), 2048(%sp), %r0, @8744
    Move 1048(%sp), -248(%fp), %r0, @8745
    Move 1328(%sp), -200(%fp), %r0, @8746
    Move 1392(%sp), 2176(%sp), %r0, @8747
    Move 1384(%sp), 2088(%sp), %r0, @8748
    Move 32(%r16), 2096(%sp), %r0, @8749
    Move 1344(%sp), 2328(%sp), %r0, @8750
    Move 40(%r16), 2120(%sp), %r0, @8751
    Move 56(%r16), 2240(%sp), %r0, @8752
    Move 1312(%sp), -216(%fp), %r0, @8753
    Move 1320(%sp), -232(%fp), %r0, @8754
    Move 1336(%sp), 2248(%sp), %r0, @8755
    Move 64(%r16), 2224(%sp), %r0, @8756
    Move32 1356(%sp), %r1, @8757

The code simply needs to, per basic block:
 - Track the last offset value generated in r16
 - Invalidate on clobber (dest==r16 or writesPinned calls)
 - If a new offset doesn't fit in addr, update the tracking value

This isn't super risky but also isn't worth doing in #170215.


Referenced Bugs:

https://bugs.webkit.org/show_bug.cgi?id=170215
[Bug 170215] WebAssembly: Air::Inst::generate crashes on large binary on A64
-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20170427/658617b6/attachment.html>


More information about the webkit-unassigned mailing list