This patch kit is v4 of the RTL frontend. For reference, the earlier versions were:
v1 (2016-05-04): "[PATCH 0/4] RFC: RTL frontend" https://gcc.gnu.org/ml/gcc-patches/2016-05/msg00352.html v2 (2016-09-08): "[PATCH 0/9] RFC: selftests based on RTL dumps" https://gcc.gnu.org/ml/gcc-patches/2016-09/msg00483.html v3 (2016-10-05): "[PATCH 00/16] RTL frontend (v3)" https://gcc.gnu.org/ml/gcc-patches/2016-10/msg00261.html The patch kit is based on top of r242065 (2016-11-11). There are some places where it will conflict with the gimple frontend, but these are likely to be fairly easy to resolve. What's new in v4: * Split out more preliminary patches from the function_reader patch * Rewritten the loader and all tests to use the new "compact" dump format (which has changed various times since v3). * Support for reuse_rtx in loader * Handling of params, DECL_RTL and DECL_RTL_INCOMING * Moved target-dependent selftests to target-specific code (aarch64.c and i386.c) * Dropped the RTL "frontend" itself, in favor of doing it via Richi's idea of specially-tagged functions in the C frontend (tagged with "__RTL"). * In __RTL mode, rather than running just one pass, run *all* passes, but start at the given pass. This means we can support "dg-do run" tests that execute the resulting code, mixing C and RTL in test cases (and potentially even with gimple dumps). * More test cases. Use "dg-do run" in various places. * Lots of bugfixing I've successfully bootstrapped®rtested the kit as whole on x86_64-pc-linux-gnu. Stage 1 builds and passes selftesting and check-gcc with RUNTESTFLAGS="rtl.exp=*" for target aarch64-linux-gnu. OK for trunk? David Malcolm (9): print_rtx: implement support for reuse IDs (v2) (approved) Introduce rtl_data::init_stack_alignment Introduce emit_status::ensure_regno_capacity Add some functions for use by the RTL frontend. Introduce selftest::locate_file (v4) Split class rtx_reader into md_reader vs rtx_reader Add RTL-error-handling to host Introduce class function_reader (v4) Add "__RTL" to cc1 (v4) gcc/Makefile.in | 16 +- gcc/c-family/c-common.c | 1 + gcc/c-family/c-common.h | 3 + gcc/c/c-parser.c | 122 +- gcc/cfg.c | 1 - gcc/cfgexpand.c | 5 +- gcc/cgraph.h | 4 + gcc/cgraphunit.c | 41 +- gcc/common.opt | 6 +- gcc/config/aarch64/aarch64.c | 49 + gcc/config/i386/i386.c | 231 +++ gcc/emit-rtl.c | 73 +- gcc/emit-rtl.h | 4 + gcc/errors.c | 23 +- gcc/errors.h | 14 + gcc/final.c | 3 +- gcc/function-tests.c | 2 +- gcc/function.c | 3 +- gcc/function.h | 11 + gcc/genpreds.c | 6 +- gcc/gensupport.c | 2 +- gcc/gimple-expr.c | 2 +- gcc/pass_manager.h | 6 + gcc/passes.c | 47 + gcc/print-rtl-function.c | 7 +- gcc/print-rtl.c | 141 +- gcc/print-rtl.h | 81 +- gcc/read-md.c | 207 +- gcc/read-md.h | 106 +- gcc/read-rtl-function.c | 2173 ++++++++++++++++++++ gcc/read-rtl-function.h | 39 + gcc/read-rtl.c | 300 ++- gcc/rtl-tests.c | 54 +- gcc/rtl.h | 2 + gcc/run-rtl-passes.c | 85 + gcc/run-rtl-passes.h | 25 + gcc/selftest-rtl.c | 82 + gcc/selftest-rtl.h | 32 +- gcc/selftest-run-tests.c | 9 + gcc/selftest.c | 28 + gcc/selftest.h | 11 + gcc/testsuite/gcc.dg/cpp/pr71591.c | 2 +- gcc/testsuite/gcc.dg/rtl/aarch64/asr_div1.c | 41 + gcc/testsuite/gcc.dg/rtl/aarch64/pr71779.c | 50 + gcc/testsuite/gcc.dg/rtl/rtl.exp | 41 + gcc/testsuite/gcc.dg/rtl/test.c | 31 + gcc/testsuite/gcc.dg/rtl/unknown-rtx-code.c | 8 + gcc/testsuite/gcc.dg/rtl/x86_64/dfinit.c | 116 ++ .../gcc.dg/rtl/x86_64/different-structs.c | 81 + gcc/testsuite/gcc.dg/rtl/x86_64/final.c | 133 ++ gcc/testsuite/gcc.dg/rtl/x86_64/into-cfglayout.c | 117 ++ gcc/testsuite/gcc.dg/rtl/x86_64/ira.c | 111 + gcc/testsuite/gcc.dg/rtl/x86_64/pro_and_epilogue.c | 110 + .../rtl/x86_64/test-return-const.c.after-expand.c | 39 + .../rtl/x86_64/test-return-const.c.before-fwprop.c | 42 + gcc/testsuite/gcc.dg/rtl/x86_64/test-rtl.c | 101 + gcc/testsuite/gcc.dg/rtl/x86_64/test_1.h | 16 + .../gcc.dg/rtl/x86_64/times-two.c.after-expand.c | 70 + .../gcc.dg/rtl/x86_64/times-two.c.before-df.c | 54 + gcc/testsuite/gcc.dg/rtl/x86_64/vregs.c | 112 + gcc/testsuite/selftests/aarch64/times-two.rtl | 36 + gcc/testsuite/selftests/asr_div1.rtl | 24 + gcc/testsuite/selftests/bb-index.rtl | 8 + gcc/testsuite/selftests/cfg-test.rtl | 37 + gcc/testsuite/selftests/const-int.rtl | 20 + gcc/testsuite/selftests/example-labels.rtl | 8 + gcc/testsuite/selftests/example.txt | 1 + gcc/testsuite/selftests/insn-with-mode.rtl | 7 + gcc/testsuite/selftests/jump-to-label-ref.rtl | 17 + gcc/testsuite/selftests/jump-to-return.rtl | 11 + gcc/testsuite/selftests/jump-to-simple-return.rtl | 11 + gcc/testsuite/selftests/note-insn-deleted.rtl | 5 + gcc/testsuite/selftests/note_insn_basic_block.rtl | 9 + gcc/testsuite/selftests/simple-cse.rtl | 16 + gcc/testsuite/selftests/symbol-ref.rtl | 13 + gcc/testsuite/selftests/x86_64/call-insn.rtl | 17 + .../selftests/x86_64/copy-hard-reg-into-frame.rtl | 15 + gcc/testsuite/selftests/x86_64/times-two.rtl | 51 + gcc/testsuite/selftests/x86_64/unspec.rtl | 20 + gcc/tree-dfa.c | 5 + 80 files changed, 5494 insertions(+), 169 deletions(-) create mode 100644 gcc/read-rtl-function.c create mode 100644 gcc/read-rtl-function.h create mode 100644 gcc/run-rtl-passes.c create mode 100644 gcc/run-rtl-passes.h create mode 100644 gcc/selftest-rtl.c create mode 100644 gcc/testsuite/gcc.dg/rtl/aarch64/asr_div1.c create mode 100644 gcc/testsuite/gcc.dg/rtl/aarch64/pr71779.c create mode 100644 gcc/testsuite/gcc.dg/rtl/rtl.exp create mode 100644 gcc/testsuite/gcc.dg/rtl/test.c create mode 100644 gcc/testsuite/gcc.dg/rtl/unknown-rtx-code.c create mode 100644 gcc/testsuite/gcc.dg/rtl/x86_64/dfinit.c create mode 100644 gcc/testsuite/gcc.dg/rtl/x86_64/different-structs.c create mode 100644 gcc/testsuite/gcc.dg/rtl/x86_64/final.c create mode 100644 gcc/testsuite/gcc.dg/rtl/x86_64/into-cfglayout.c create mode 100644 gcc/testsuite/gcc.dg/rtl/x86_64/ira.c create mode 100644 gcc/testsuite/gcc.dg/rtl/x86_64/pro_and_epilogue.c create mode 100644 gcc/testsuite/gcc.dg/rtl/x86_64/test-return-const.c.after-expand.c create mode 100644 gcc/testsuite/gcc.dg/rtl/x86_64/test-return-const.c.before-fwprop.c create mode 100644 gcc/testsuite/gcc.dg/rtl/x86_64/test-rtl.c create mode 100644 gcc/testsuite/gcc.dg/rtl/x86_64/test_1.h create mode 100644 gcc/testsuite/gcc.dg/rtl/x86_64/times-two.c.after-expand.c create mode 100644 gcc/testsuite/gcc.dg/rtl/x86_64/times-two.c.before-df.c create mode 100644 gcc/testsuite/gcc.dg/rtl/x86_64/vregs.c create mode 100644 gcc/testsuite/selftests/aarch64/times-two.rtl create mode 100644 gcc/testsuite/selftests/asr_div1.rtl create mode 100644 gcc/testsuite/selftests/bb-index.rtl create mode 100644 gcc/testsuite/selftests/cfg-test.rtl create mode 100644 gcc/testsuite/selftests/const-int.rtl create mode 100644 gcc/testsuite/selftests/example-labels.rtl create mode 100644 gcc/testsuite/selftests/example.txt create mode 100644 gcc/testsuite/selftests/insn-with-mode.rtl create mode 100644 gcc/testsuite/selftests/jump-to-label-ref.rtl create mode 100644 gcc/testsuite/selftests/jump-to-return.rtl create mode 100644 gcc/testsuite/selftests/jump-to-simple-return.rtl create mode 100644 gcc/testsuite/selftests/note-insn-deleted.rtl create mode 100644 gcc/testsuite/selftests/note_insn_basic_block.rtl create mode 100644 gcc/testsuite/selftests/simple-cse.rtl create mode 100644 gcc/testsuite/selftests/symbol-ref.rtl create mode 100644 gcc/testsuite/selftests/x86_64/call-insn.rtl create mode 100644 gcc/testsuite/selftests/x86_64/copy-hard-reg-into-frame.rtl create mode 100644 gcc/testsuite/selftests/x86_64/times-two.rtl create mode 100644 gcc/testsuite/selftests/x86_64/unspec.rtl -- 1.8.5.3