This patch is an experimental implementation of multi-target clones
clones for Fortran, allowing the use of the `TARGET_CLONES` attribute.
It is designed to work with the syntax like:

`!GCC$ ATTRIBUTES TARGET_CLONES("default", "avx", "avx512f") :: MySub`

  It is now worked with both `SUBROUTINE` and `FUNCTION`, using 
infrastructures provided by the GCC. Here is a brief request for
comments (RFC) on the implementation:

- Which syntax is preferred for the attribute? For now I've 
  implemented C-like syntax, which supports single or multiple quotes
  wrapped strings splitted by commas.
- The difference between Fortran and C/C++ ABI in generating decls.
  Eg. Fortran functions in `CONTAINS` block are not public or 
  regarded as in file scope. Which leads to generating counters
  before processing multiple-targets, and leads to
  `somefunc.1.default` like names.
- The binding result in readelf's symbol table is different.
  While C/C++ generates `WEAK` resolver functions, but Fortran gives
  a `LOCAL` one while in `CONTAINS` block.

If upstreams have any suggestions or comments, please let me know!

ZAMBAR (2):
  Fortran: target clones basic support
  Fortran: removed RTL at function start

 gcc/fortran/decl.cc       | 116 ++++++++++++++++++++++++++++++++++++++
 gcc/fortran/f95-lang.cc   |  34 +++++++++++
 gcc/fortran/gfortran.h    |   5 ++
 gcc/fortran/symbol.cc     |   8 +++
 gcc/fortran/trans-decl.cc |  26 ++++++++-
 5 files changed, 187 insertions(+), 2 deletions(-)

-- 
2.34.1

Reply via email to