llvmpipe: use ppc64le/ppc64 Large code model for JIT-compiled shaders
authorBen Crocker <bcrocker@redhat.com>
Wed, 13 Nov 2019 20:27:24 +0000 (20:27 +0000)
committerDave Airlie <airlied@linux.ie>
Thu, 14 Nov 2019 23:07:26 +0000 (23:07 +0000)
commit9c3be6d21fa6a45852045d0286b80fb420f82fe3
tree247d1385425c3c1042c50d2776d24ca73722b473
parent4242c572275138ec832c6a450cbf8891268e15b8
llvmpipe: use ppc64le/ppc64 Large code model for JIT-compiled shaders

Large programs, e.g. gnome-shell and firefox, may tax the
addressability of the Medium code model once a (potentially unbounded)
number of dynamically generated JIT-compiled shader programs are
linked in and relocated.  Yet the default code model as of LLVM 8 is
Medium or even Small.

The cost of changing from Medium to Large is negligible:
- an additional 8-byte pointer stored immediately before the shader entrypoint;
- change an add-immediate (addis) instruction to a load (ld).

Testing with WebGL Conformance
(https://www.khronos.org/registry/webgl/sdk/tests/webgl-conformance-tests.html)
yields clean runs with this change (and crashes without it).

Testing with glxgears shows no detectable performance difference.

Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1753327175378915435721747110, and 1582226

Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/223
Co-authored by: Nemanja Ivanovic <nemanjai@ca.ibm.com>, Tom Stellard <tstellar@redhat.com>

CC: mesa-stable@lists.freedesktop.org
Signed-off-by: Ben Crocker <bcrocker@redhat.com>
src/gallium/auxiliary/gallivm/lp_bld_misc.cpp