[v5,00/10] New backend for the TI PRU processor

Message ID 20181016193555.25143-1-dimitar@dinux.eu
Headers show
Series
  • New backend for the TI PRU processor
Related show

Message

Dimitar Dimitrov Oct. 16, 2018, 7:35 p.m.
This is the latest patch set for adding TI PRU I/O processor backend to GCC.
Comments from all previous series have been addressed [1], [2], [3], [4].

Test results can be downloaded from here:
   http://dinux.eu/gnupru/testresults/20181014-c45bebb5ee9

Changes since patch series v4 [4]:
  - Handle QI const_int signedness using a new "ubyte_constr" mode_attr.
  - Tuned the FP register semantics to align with TI recommendations.
  - Rewrote "mul" pattern with a more robust way to handle the fixed HW
    registers.
  - Use output_operand_lossage instead of asserts for modifier validation.
  - Reworked "ashr" to expand to an RTL loop.
  - Whitespace, comment and indentation fixes.
  - Clarified documentation.
  - Removed "sub" pattern with constant operand 2.
  - Simplified code to use strip_offset and plus_constant.
  - Removed length attribute when declared with default value.
  - Marked internal constraints with @intern.
  - Removed PRU's TARGET_MODES_TIEABLE_P callback.
  - Removed PRU's TARGET_PREFERRED_RELOAD_CLASS callback.
  - Refactored code to use the TARGET_COMPUTE_FRAME_LAYOUT hook.
  - Enabled TARGET_SUPPORTS_WIDE_INT.
  - Removed references to reg_renumber.
  - Used more robust method to discern direct function calls from function
    pointer references, for -mabi=ti enforcement.
  - Simplified pru_function_arg_regi and put more comments.

[1] http://gcc.gnu.org/ml/gcc-patches/2018-06/msg00775.html
[2] http://gcc.gnu.org/ml/gcc-patches/2018-07/msg01779.html
[3] http://gcc.gnu.org/ml/gcc-patches/2018-08/msg00927.html
[4] http://gcc.gnu.org/ml/gcc-patches/2018-09/msg00392.html


Regards,
Dimitar

Dimitar Dimitrov (10):
  Initial TI PRU GCC port
  Initial TI PRU libgcc port
  testsuite: Add PRU tests
  testsuite: Add check for overflowed IMEM region to testsuite
  testsuite: Add check for unsupported TI ABI PRU features to testsuite
  testsuite: Remove PRU from test cases requiring hosted environment
  testsuite: Define PRU stack usage
  testsuite: Mark that PRU has one-cycle jumps
  testsuite: Mark that PRU uses all function pointer bits
  testsuite: Mark testsuite that PRU has different calling convention

 configure.ac                                       |    7 +
 gcc/common/config/pru/pru-common.c                 |   36 +
 gcc/config.gcc                                     |    9 +
 gcc/config/pru/alu-zext.md                         |  181 ++
 gcc/config/pru/constraints.md                      |  108 +
 gcc/config/pru/predicates.md                       |  290 ++
 gcc/config/pru/pru-opts.h                          |   31 +
 gcc/config/pru/pru-passes.c                        |  228 ++
 gcc/config/pru/pru-pragma.c                        |   86 +
 gcc/config/pru/pru-protos.h                        |   72 +
 gcc/config/pru/pru.c                               | 3003 ++++++++++++++++++++
 gcc/config/pru/pru.h                               |  572 ++++
 gcc/config/pru/pru.md                              | 1022 +++++++
 gcc/config/pru/pru.opt                             |   54 +
 gcc/config/pru/t-pru                               |   31 +
 gcc/doc/extend.texi                                |   21 +
 gcc/doc/invoke.texi                                |   65 +
 gcc/doc/md.texi                                    |   19 +
 gcc/testsuite/g++.old-deja/g++.abi/ptrmem.C        |    2 +-
 gcc/testsuite/gcc.c-torture/execute/20101011-1.c   |    3 +
 gcc/testsuite/gcc.dg/20020312-2.c                  |    2 +
 gcc/testsuite/gcc.dg/builtin-apply2.c              |    2 +-
 gcc/testsuite/gcc.dg/stack-usage-1.c               |    2 +
 .../gcc.dg/torture/stackalign/builtin-apply-2.c    |    2 +-
 gcc/testsuite/gcc.dg/tree-ssa/20040204-1.c         |    2 +-
 gcc/testsuite/gcc.dg/tree-ssa/reassoc-33.c         |    2 +-
 gcc/testsuite/gcc.dg/tree-ssa/reassoc-34.c         |    2 +-
 gcc/testsuite/gcc.dg/tree-ssa/reassoc-35.c         |    2 +-
 gcc/testsuite/gcc.dg/tree-ssa/reassoc-36.c         |    2 +-
 gcc/testsuite/gcc.dg/tree-ssa/ssa-thread-14.c      |    2 +-
 gcc/testsuite/gcc.target/pru/abi-arg-struct.c      |  164 ++
 gcc/testsuite/gcc.target/pru/ashiftrt.c            |   13 +
 gcc/testsuite/gcc.target/pru/builtins-1.c          |   12 +
 gcc/testsuite/gcc.target/pru/builtins-error.c      |    6 +
 gcc/testsuite/gcc.target/pru/clearbit.c            |   13 +
 gcc/testsuite/gcc.target/pru/loop-asm.c            |   19 +
 gcc/testsuite/gcc.target/pru/loop-dowhile.c        |   45 +
 gcc/testsuite/gcc.target/pru/loop-hi-1.c           |   38 +
 gcc/testsuite/gcc.target/pru/loop-hi-2.c           |   17 +
 gcc/testsuite/gcc.target/pru/loop-qi-1.c           |   38 +
 gcc/testsuite/gcc.target/pru/loop-qi-2.c           |   17 +
 gcc/testsuite/gcc.target/pru/loop-short-1.c        |   53 +
 gcc/testsuite/gcc.target/pru/loop-short-2.c        |   21 +
 gcc/testsuite/gcc.target/pru/loop-si-1.c           |   41 +
 gcc/testsuite/gcc.target/pru/loop-si-2.c           |   20 +
 .../gcc.target/pru/loop-u8_pcrel_overflow.c        |   42 +
 gcc/testsuite/gcc.target/pru/loop-ubyte-1.c        |   30 +
 gcc/testsuite/gcc.target/pru/loop-ubyte-2.c        |   18 +
 .../pru/lra-framepointer-fragmentation-1.c         |   33 +
 .../pru/lra-framepointer-fragmentation-2.c         |   61 +
 gcc/testsuite/gcc.target/pru/mabi-ti-1.c           |   10 +
 gcc/testsuite/gcc.target/pru/mabi-ti-2.c           |   15 +
 gcc/testsuite/gcc.target/pru/mabi-ti-3.c           |   12 +
 gcc/testsuite/gcc.target/pru/mabi-ti-4.c           |   14 +
 gcc/testsuite/gcc.target/pru/mabi-ti-5.c           |   33 +
 gcc/testsuite/gcc.target/pru/mabi-ti-6.c           |   12 +
 gcc/testsuite/gcc.target/pru/mabi-ti-7.c           |   21 +
 gcc/testsuite/gcc.target/pru/pr64366.c             |  128 +
 gcc/testsuite/gcc.target/pru/pragma-ctable_entry.c |   22 +
 gcc/testsuite/gcc.target/pru/pru.exp               |   41 +
 gcc/testsuite/gcc.target/pru/qbbc-1.c              |   29 +
 gcc/testsuite/gcc.target/pru/qbbc-2.c              |   15 +
 gcc/testsuite/gcc.target/pru/qbbc-3.c              |   15 +
 gcc/testsuite/gcc.target/pru/qbbs-1.c              |   29 +
 gcc/testsuite/gcc.target/pru/qbbs-2.c              |   15 +
 gcc/testsuite/gcc.target/pru/setbit.c              |   13 +
 .../gcc.target/pru/zero_extend-and-hisi.c          |   16 +
 .../gcc.target/pru/zero_extend-and-qihi.c          |   16 +
 .../gcc.target/pru/zero_extend-and-qisi.c          |   16 +
 gcc/testsuite/gcc.target/pru/zero_extend-hisi.c    |   43 +
 gcc/testsuite/gcc.target/pru/zero_extend-qihi.c    |   43 +
 gcc/testsuite/gcc.target/pru/zero_extend-qisi.c    |   43 +
 gcc/testsuite/lib/gcc-dg.exp                       |   16 +
 gcc/testsuite/lib/target-supports.exp              |   36 +-
 gcc/testsuite/lib/target-utils.exp                 |   12 +
 libgcc/config.host                                 |    7 +
 libgcc/config/pru/asri.c                           |   33 +
 libgcc/config/pru/eqd.c                            |   45 +
 libgcc/config/pru/eqf.c                            |   45 +
 libgcc/config/pru/ged.c                            |   45 +
 libgcc/config/pru/gef.c                            |   45 +
 libgcc/config/pru/gtd.c                            |   45 +
 libgcc/config/pru/gtf.c                            |   45 +
 libgcc/config/pru/led.c                            |   45 +
 libgcc/config/pru/lef.c                            |   45 +
 libgcc/config/pru/lib2bitcountHI.c                 |   43 +
 libgcc/config/pru/lib2divHI.c                      |   42 +
 libgcc/config/pru/lib2divQI.c                      |   42 +
 libgcc/config/pru/lib2divSI.c                      |   48 +
 libgcc/config/pru/libgcc-eabi.ver                  |   88 +
 libgcc/config/pru/ltd.c                            |   45 +
 libgcc/config/pru/ltf.c                            |   45 +
 libgcc/config/pru/mpyll.S                          |   57 +
 libgcc/config/pru/pru-abi.h                        |  109 +
 libgcc/config/pru/pru-asm.h                        |   35 +
 libgcc/config/pru/pru-divmod.h                     |  117 +
 libgcc/config/pru/sfp-machine.h                    |  125 +
 libgcc/config/pru/t-pru                            |   50 +
 98 files changed, 8462 insertions(+), 10 deletions(-)
 create mode 100644 gcc/common/config/pru/pru-common.c
 create mode 100644 gcc/config/pru/alu-zext.md
 create mode 100644 gcc/config/pru/constraints.md
 create mode 100644 gcc/config/pru/predicates.md
 create mode 100644 gcc/config/pru/pru-opts.h
 create mode 100644 gcc/config/pru/pru-passes.c
 create mode 100644 gcc/config/pru/pru-pragma.c
 create mode 100644 gcc/config/pru/pru-protos.h
 create mode 100644 gcc/config/pru/pru.c
 create mode 100644 gcc/config/pru/pru.h
 create mode 100644 gcc/config/pru/pru.md
 create mode 100644 gcc/config/pru/pru.opt
 create mode 100644 gcc/config/pru/t-pru
 create mode 100644 gcc/testsuite/gcc.target/pru/abi-arg-struct.c
 create mode 100644 gcc/testsuite/gcc.target/pru/ashiftrt.c
 create mode 100644 gcc/testsuite/gcc.target/pru/builtins-1.c
 create mode 100644 gcc/testsuite/gcc.target/pru/builtins-error.c
 create mode 100644 gcc/testsuite/gcc.target/pru/clearbit.c
 create mode 100644 gcc/testsuite/gcc.target/pru/loop-asm.c
 create mode 100644 gcc/testsuite/gcc.target/pru/loop-dowhile.c
 create mode 100644 gcc/testsuite/gcc.target/pru/loop-hi-1.c
 create mode 100644 gcc/testsuite/gcc.target/pru/loop-hi-2.c
 create mode 100644 gcc/testsuite/gcc.target/pru/loop-qi-1.c
 create mode 100644 gcc/testsuite/gcc.target/pru/loop-qi-2.c
 create mode 100644 gcc/testsuite/gcc.target/pru/loop-short-1.c
 create mode 100644 gcc/testsuite/gcc.target/pru/loop-short-2.c
 create mode 100644 gcc/testsuite/gcc.target/pru/loop-si-1.c
 create mode 100644 gcc/testsuite/gcc.target/pru/loop-si-2.c
 create mode 100644 gcc/testsuite/gcc.target/pru/loop-u8_pcrel_overflow.c
 create mode 100644 gcc/testsuite/gcc.target/pru/loop-ubyte-1.c
 create mode 100644 gcc/testsuite/gcc.target/pru/loop-ubyte-2.c
 create mode 100644 gcc/testsuite/gcc.target/pru/lra-framepointer-fragmentation-1.c
 create mode 100644 gcc/testsuite/gcc.target/pru/lra-framepointer-fragmentation-2.c
 create mode 100644 gcc/testsuite/gcc.target/pru/mabi-ti-1.c
 create mode 100644 gcc/testsuite/gcc.target/pru/mabi-ti-2.c
 create mode 100644 gcc/testsuite/gcc.target/pru/mabi-ti-3.c
 create mode 100644 gcc/testsuite/gcc.target/pru/mabi-ti-4.c
 create mode 100644 gcc/testsuite/gcc.target/pru/mabi-ti-5.c
 create mode 100644 gcc/testsuite/gcc.target/pru/mabi-ti-6.c
 create mode 100644 gcc/testsuite/gcc.target/pru/mabi-ti-7.c
 create mode 100644 gcc/testsuite/gcc.target/pru/pr64366.c
 create mode 100644 gcc/testsuite/gcc.target/pru/pragma-ctable_entry.c
 create mode 100644 gcc/testsuite/gcc.target/pru/pru.exp
 create mode 100644 gcc/testsuite/gcc.target/pru/qbbc-1.c
 create mode 100644 gcc/testsuite/gcc.target/pru/qbbc-2.c
 create mode 100644 gcc/testsuite/gcc.target/pru/qbbc-3.c
 create mode 100644 gcc/testsuite/gcc.target/pru/qbbs-1.c
 create mode 100644 gcc/testsuite/gcc.target/pru/qbbs-2.c
 create mode 100644 gcc/testsuite/gcc.target/pru/setbit.c
 create mode 100644 gcc/testsuite/gcc.target/pru/zero_extend-and-hisi.c
 create mode 100644 gcc/testsuite/gcc.target/pru/zero_extend-and-qihi.c
 create mode 100644 gcc/testsuite/gcc.target/pru/zero_extend-and-qisi.c
 create mode 100644 gcc/testsuite/gcc.target/pru/zero_extend-hisi.c
 create mode 100644 gcc/testsuite/gcc.target/pru/zero_extend-qihi.c
 create mode 100644 gcc/testsuite/gcc.target/pru/zero_extend-qisi.c
 create mode 100644 libgcc/config/pru/asri.c
 create mode 100644 libgcc/config/pru/eqd.c
 create mode 100644 libgcc/config/pru/eqf.c
 create mode 100644 libgcc/config/pru/ged.c
 create mode 100644 libgcc/config/pru/gef.c
 create mode 100644 libgcc/config/pru/gtd.c
 create mode 100644 libgcc/config/pru/gtf.c
 create mode 100644 libgcc/config/pru/led.c
 create mode 100644 libgcc/config/pru/lef.c
 create mode 100644 libgcc/config/pru/lib2bitcountHI.c
 create mode 100644 libgcc/config/pru/lib2divHI.c
 create mode 100644 libgcc/config/pru/lib2divQI.c
 create mode 100644 libgcc/config/pru/lib2divSI.c
 create mode 100644 libgcc/config/pru/libgcc-eabi.ver
 create mode 100644 libgcc/config/pru/ltd.c
 create mode 100644 libgcc/config/pru/ltf.c
 create mode 100644 libgcc/config/pru/mpyll.S
 create mode 100644 libgcc/config/pru/pru-abi.h
 create mode 100644 libgcc/config/pru/pru-asm.h
 create mode 100644 libgcc/config/pru/pru-divmod.h
 create mode 100644 libgcc/config/pru/sfp-machine.h
 create mode 100644 libgcc/config/pru/t-pru

-- 
2.11.0