• bjaideep's avatar
    PPC/s390: [turbofan]: Support using push instructions for setting up tail call parameters · 433572b8
    bjaideep authored
    Port bd0d9e7d
    
    Original commit message:
    
        This optimizes the passing of stack parameters in function calls.
    
        For some architectures (ia32/x64), using pushes when possible instead
        of bumping the stack and then storing parameters generates much
        smaller code, and in some cases is faster (e.g. when a push of a memory
        location can implement a memory-to-memory copy and thus elide an
        intermediate load. On others (e.g. ARM), the benefit is smaller, where
        it's only possible to elide direct stack pointer adjustment in certain cases
        or combine multiple register stores into a single instruction in other limited
        situations. On yet other platforms (ARM64, MIPS), there are no push instructions,
        and this optimization isn't used at all.
    
        Ideally, this mechanism would be used for both tail calls and normal calls,
        but "normal" calls are currently pretty efficient, and tail calls are very
        inefficient, so this CL sets the bar low for building a new mechanism to
        handle parameter pushing that only needs to raise the bar on tail calls for now.
    
        The key aspect of this change is that adjustment to the stack pointer
        for tail calls (and perhaps later real calls) is an explicit step separate from
        instruction selection and gap resolution, but aware of both, making it possible
        to safely recognize gap moves that are actually pushes.
    
    R=danno@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com, mbrandy@us.ibm.com
    
    BUG=
    LOG=N
    
    Review-Url: https://codereview.chromium.org/2123983002
    Cr-Commit-Position: refs/heads/master@{#37561}
    433572b8
code-generator-s390.cc 86.4 KB