Hi all, This updated patch series implements the "MEMs with address vectors" feature that I want to use in AMD GCN. The motivation is to use it in the SIMT patch series that I have also posted a while back (and will be updating shortly).
The second version of the series was here: https://patchwork.sourceware.org/project/gcc/list/?series=63334 Compared to the second version, the new a new RTL flag, MEM_INDEPENDENT_P, has been reworked with new semantics (based on the reviews from Richi and Richard, thanks). The GCN backend now requires this flag to be set, and sets it in all the places that can generate address vectors. The flag is intended to allow the optimization passes to determine if certain optimizations and transformations are safe, although nothing actually needs that yet. The first patch, in this series, is the middle-end enablement and documentation changes, including the new flag. The second patch converts the amdgcn back-end to use the new scheme, without adding any real new features. This has received a number of bug fixes and tweaks since the v2 patchset. The third and final patch demonstrates how I can use the new MEM to extend my machine description without writing whole new insns for the vector modes, just for them to evaluate to the same assembler code in the end. I'm still doing some final dejagnu/bootstrap testing, following my final tweaks, but I don't expect anything material to the review to change from that. OK for mainline? Thanks Andrew Stubbs (3): rtl: Allow "(mem:<vecmode> (reg:<vecmode>))" amdgcn: Implement "(mem (reg:<vecmode>))" amdgcn: Add vector atomics gcc/config/gcn/constraints.md | 52 ++- gcc/config/gcn/gcn-protos.h | 11 +- gcc/config/gcn/gcn-valu.md | 787 +++++++++++++--------------------- gcc/config/gcn/gcn.cc | 511 +++++++++++----------- gcc/config/gcn/gcn.h | 2 - gcc/config/gcn/gcn.md | 150 ++++--- gcc/doc/rtl.texi | 45 ++ gcc/doc/tm.texi | 28 +- gcc/emit-rtl.cc | 30 +- gcc/explow.cc | 12 +- gcc/recog.cc | 3 +- gcc/rtl.h | 7 +- gcc/rtlanal.cc | 4 +- gcc/simplify-rtx.cc | 36 +- gcc/target.def | 28 +- gcc/targhooks.cc | 7 +- gcc/targhooks.h | 3 +- 17 files changed, 883 insertions(+), 833 deletions(-) -- 2.54.0
