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.
4ac4c323867 [BRIGFE] phsa-specific optimizations
gcc/ChangeLog | 6 +
gcc/brig-builtins.def | 27 +-
gcc/brig/ChangeLog | 43 +
gcc/brig/brigfrontend/brig-basic-inst-handler.cc | 172 +---
gcc/brig/brigfrontend/brig-branch-inst-handler.cc | 21 +-
gcc/brig/brigfrontend/brig-cmp-inst-handler.cc | 6 +-
gcc/brig/brigfrontend/brig-code-entry-handler.cc | 503 +----------
gcc/brig/brigfrontend/brig-code-entry-handler.h | 21 -
gcc/brig/brigfrontend/brig-control-handler.cc | 20 +-
gcc/brig/brigfrontend/brig-cvt-inst-handler.cc | 6 +
gcc/brig/brigfrontend/brig-function-handler.cc | 89 +-
gcc/brig/brigfrontend/brig-function.cc | 925 +++++++++++++++++++--
gcc/brig/brigfrontend/brig-function.h | 43 +
gcc/brig/brigfrontend/brig-label-handler.cc | 3 +
gcc/brig/brigfrontend/brig-lane-inst-handler.cc | 2 +-
gcc/brig/brigfrontend/brig-mem-inst-handler.cc | 7 +-
gcc/brig/brigfrontend/phsa.h | 9 +
gcc/brig/lang.opt | 5 +
gcc/builtin-types.def | 4 +
gcc/testsuite/ChangeLog | 7 +-
gcc/testsuite/brig.dg/test/gimple/smoke_test.hsail | 10 +-
libhsail-rt/ChangeLog | 7 +
libhsail-rt/include/internal/phsa-rt.h | 1 -
libhsail-rt/include/internal/workitems.h | 50 +-
libhsail-rt/rt/workitems.c | 84 +-
25 files changed, 1257 insertions(+), 814 deletions(-)