Find a file
Jason Ekstrand 50f3535d1f nir/search: Search for all combinations of commutative ops
Consider the following search expression and NIR sequence:

    ('iadd', ('imul', a, b), b)

    ssa_2 = imul ssa_0, ssa_1
    ssa_3 = iadd ssa_2, ssa_0

The current algorithm is greedy and, the moment the imul finds a match,
it commits those variable names and returns success.  In the above
example, it maps a -> ssa_0 and b -> ssa_1.  When we then try to match
the iadd, it sees that ssa_0 is not b and fails to match.  The iadd
match will attempt to flip itself and try again (which won't work) but
it cannot ask the imul to try a flipped match.

This commit instead counts the number of commutative ops in each
expression and assigns an index to each.  It then does a loop and loops
over the full combinatorial matrix of commutative operations.  In order
to keep things sane, we limit it to at most 4 commutative operations (16
combinations).  There is only one optimization in opt_algebraic that
goes over this limit and it's the bitfieldReverse detection for some UE4
demo.

Shader-db results on Kaby Lake:

    total instructions in shared programs: 15310125 -> 15302469 (-0.05%)
    instructions in affected programs: 1797123 -> 1789467 (-0.43%)
    helped: 6751
    HURT: 2264

    total cycles in shared programs: 357346617 -> 357202526 (-0.04%)
    cycles in affected programs: 15931005 -> 15786914 (-0.90%)
    helped: 6024
    HURT: 3436

    total loops in shared programs: 4360 -> 4360 (0.00%)
    loops in affected programs: 0 -> 0
    helped: 0
    HURT: 0

    total spills in shared programs: 23675 -> 23666 (-0.04%)
    spills in affected programs: 235 -> 226 (-3.83%)
    helped: 5
    HURT: 1

    total fills in shared programs: 32040 -> 32032 (-0.02%)
    fills in affected programs: 190 -> 182 (-4.21%)
    helped: 6
    HURT: 2

    LOST:   18
    GAINED: 5

Reviewed-by: Thomas Helland <thomashelland90@gmail.com>
2019-04-08 21:38:48 +00:00
.gitlab-ci CI: use wayland ci-templates repo to create the base image 2019-04-02 13:41:05 +00:00
bin meson: strip rpath from megadrivers 2019-04-01 07:04:13 +00:00
build-support configure: commit test files 2017-10-16 16:32:43 -07:00
docs docs: update calendar, add news item and link release notes for 18.3.6 2019-04-05 13:24:29 +01:00
doxygen doxygen: Plumb through gallium/ to automated documentation 2016-05-30 17:53:45 +01:00
include intel: Add support for Comet Lake 2019-04-01 14:07:40 -07:00
m4 configure: allow building with python3 2018-10-31 19:15:50 +00:00
scons scons: Compatibility with Scons development version string 2019-03-12 14:22:34 +00:00
scripts appveyor: Revert commits adding Cygwin support. 2019-01-25 14:13:26 +00:00
src nir/search: Search for all combinations of commutative ops 2019-04-08 21:38:48 +00:00
.dir-locals.el dir-locals.el: Adds White Space support 2016-11-14 19:17:49 +02:00
.editorconfig editorconfig: Add max_line_length property 2019-01-10 15:50:34 +02:00
.gitattributes
.gitignore .gitignore: list *.orig and *.rej 2017-09-06 17:48:50 +01:00
.gitlab-ci.yml CI: use wayland ci-templates repo to create the base image 2019-04-02 13:41:05 +00:00
.mailmap .mailmap: Add a few more alises for myself 2019-02-13 12:03:41 -08:00
.travis.yml gitlab-ci: drop most autotools builds 2019-03-19 17:40:05 +00:00
Android.common.mk android: fix missing backspace for line continuation 2019-03-08 21:14:24 +00:00
Android.mk simplify LLVM version string printing 2019-04-04 16:08:11 +00:00
appveyor.yml appveyor: Revert commits adding Cygwin support. 2019-01-25 14:13:26 +00:00
autogen.sh autogen.sh: pass --force to autoreconf, quote ORIGDIR 2015-03-11 23:28:26 +00:00
CleanSpec.mk CleanSpec.mk: Remove HOST_OUT_release 2018-08-02 15:42:40 -06:00
common.py scons/svga: remove opt from the list of valid build types 2018-10-26 12:09:00 -06:00
configure.ac simplify LLVM version string printing 2019-04-04 16:08:11 +00:00
install-gallium-links.mk gallium: Fix install-gallium-links.mk on non-bash /bin/sh 2016-10-10 08:56:12 -07:00
install-lib-links.mk install-lib-links: remove the .install-lib-links file 2015-02-24 15:33:25 +00:00
Makefile.am automake: Add --enable-autotools to distcheck flags 2019-01-30 19:32:44 +00:00
meson.build simplify LLVM version string printing 2019-04-04 16:08:11 +00:00
meson_options.txt configure.ac / meson: depend on libnativewindow when appropriate 2019-03-21 15:36:39 -07:00
README.rst README: Drop the badges from the readme 2019-02-07 12:46:17 -06:00
REVIEWERS REVIEWERS: add Vulkan reviewer group 2018-11-13 17:25:02 +00:00
SConstruct scons: Require python 2.7 2018-08-16 13:52:56 -07:00
VERSION bump version for 19.0 branch 2019-01-29 15:30:25 -08:00

`Mesa <https://mesa3d.org>`_ - The 3D Graphics Library
======================================================


Source
------

This repository lives at https://gitlab.freedesktop.org/mesa/mesa.
Other repositories are likely forks, and code found there is not supported.


Build & install
---------------

You can find more information in our documentation (`docs/install.html
<https://mesa3d.org/install.html>`_), but the recommended way is to use
Meson (`docs/meson.html <https://mesa3d.org/meson.html>`_):

.. code-block:: sh

  $ mkdir build
  $ cd build
  $ meson ..
  $ sudo ninja install


Support
-------

Many Mesa devs hang on IRC; if you're not sure which channel is
appropriate, you should ask your question on `Freenode's #dri-devel
<irc://chat.freenode.net#dri-devel>`_, someone will redirect you if
necessary.
Remember that not everyone is in the same timezone as you, so it might
take a while before someone qualified sees your question.
To figure out who you're talking to, or which nick to ping for your
question, check out `Who's Who on IRC
<https://dri.freedesktop.org/wiki/WhosWho/>`_.

The next best option is to ask your question in an email to the
mailing lists: `mesa-dev\@lists.freedesktop.org
<https://lists.freedesktop.org/mailman/listinfo/mesa-dev>`_


Bug reports
-----------

If you think something isn't working properly, please file a bug report
(`docs/bugs.html <https://mesa3d.org/bugs.html>`_).


Contributing
------------

Contributions are welcome, and step-by-step instructions can be found in our
documentation (`docs/submittingpatches.html
<https://mesa3d.org/submittingpatches.html>`_).

Note that Mesa uses email mailing-lists for patches submission, review and
discussions.