[BRIGFE] phsa-specific optimizations
authorPekka Jääskeläinen <visit0r@gcc.gnu.org>
Fri, 4 May 2018 19:43:57 +0000 (19:43 +0000)
committerPekka Jääskeläinen <visit0r@gcc.gnu.org>
Fri, 4 May 2018 19:43:57 +0000 (19:43 +0000)
commit080dc24383a602a5a4095eb05b04100f15ba1ad4
treea0d2a78948f718293527ac76c53bdee3303d989f
parent1e25c5a9bb7042d7bca5a4fa840666dcb16f4918
[BRIGFE] phsa-specific optimizations

Add flag -fassume-phsa that is on by default. If -fno-assume-phsa
is given, these optimizations are disabled.

With this flag, gccbrig can generate GENERIC that assumes we are
targeting a phsa-runtime based implementation, which allows us
to expose the work-item context accesses to retrieve WI IDs etc.
which helps optimizers.

First optimization that takes advantage of this is to get rid of
the setworkitemid calls whenever we have non-inlined calls that
use IDs internally.

Other optimizations added in this commit:

- expand absoluteid to similar level of simplicity as workitemid.
At the moment absoluteid is the best indexing ID to end up with
WG vectorization.
- propagate ID variables closer to their uses. This is mainly
to avoid known useless casts, which confuse at least scalar
evolution analysis.
- use signed long long for storing IDs. Unsigned integers have
defined wraparound semantics, which confuse at least scalar
evolution analysis, leading to unvectorizable WI loops.
- also refactor some BRIG function generation helpers to brig_function.
- no point in having the wi-loop as a for-loop. It's really
a do...while and SCEV can analyze it just fine still.
- add consts to ptrs etc. in BRIG builtin defs.
Improves optimization opportunities.
- add qualifiers to generated function parameters.
Const and restrict on the hidden local/private pointers,
the arg buffer and the context pointer help some optimizations.

From-SVN: r259957
25 files changed:
gcc/ChangeLog
gcc/brig-builtins.def
gcc/brig/ChangeLog
gcc/brig/brigfrontend/brig-basic-inst-handler.cc
gcc/brig/brigfrontend/brig-branch-inst-handler.cc
gcc/brig/brigfrontend/brig-cmp-inst-handler.cc
gcc/brig/brigfrontend/brig-code-entry-handler.cc
gcc/brig/brigfrontend/brig-code-entry-handler.h
gcc/brig/brigfrontend/brig-control-handler.cc
gcc/brig/brigfrontend/brig-cvt-inst-handler.cc
gcc/brig/brigfrontend/brig-function-handler.cc
gcc/brig/brigfrontend/brig-function.cc
gcc/brig/brigfrontend/brig-function.h
gcc/brig/brigfrontend/brig-label-handler.cc
gcc/brig/brigfrontend/brig-lane-inst-handler.cc
gcc/brig/brigfrontend/brig-mem-inst-handler.cc
gcc/brig/brigfrontend/phsa.h
gcc/brig/lang.opt
gcc/builtin-types.def
gcc/testsuite/ChangeLog
gcc/testsuite/brig.dg/test/gimple/smoke_test.hsail
libhsail-rt/ChangeLog
libhsail-rt/include/internal/phsa-rt.h
libhsail-rt/include/internal/workitems.h
libhsail-rt/rt/workitems.c