diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dbc85d5dfc3..8db3c4ad50d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2019-11-15 Matthew Malcomson + + * passes.c (should_skip_pass_p): Always run "dfinish". + 2019-11-15 Richard Biener * ipa-inline.c (inline_small_functions): Move assignment diff --git a/gcc/passes.c b/gcc/passes.c index cfc0fef372d..b77356d1641 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -2375,7 +2375,8 @@ should_skip_pass_p (opt_pass *pass) return false; /* Don't skip df init; later RTL passes need it. */ - if (strstr (pass->name, "dfinit") != NULL) + if (strstr (pass->name, "dfinit") != NULL + || strstr (pass->name, "dfinish") != NULL) return false; if (!quiet_flag) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e537e5d6cad..2b630ef16ae 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2019-11-15 Matthew Malcomson + + * gcc.dg/rtl/aarch64/missed-pass-error.c: New test. + 2019-11-15 Richard Biener PR tree-optimization/92039 diff --git a/gcc/testsuite/gcc.dg/rtl/aarch64/missed-pass-error.c b/gcc/testsuite/gcc.dg/rtl/aarch64/missed-pass-error.c new file mode 100644 index 00000000000..2f02ca9d0c4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/rtl/aarch64/missed-pass-error.c @@ -0,0 +1,45 @@ +/* { dg-do compile { target aarch64-*-* } } */ +/* { dg-additional-options "-O0" } */ + +/* + When compiling __RTL functions the startwith string can be either incorrect + (i.e. not matching a pass) or be unused (i.e. can refer to a pass that is + not run at the current optimisation level). + + Here we ensure that the state clean up is still run, so that functions other + than the faulty one can still be compiled. + */ + +int __RTL (startwith ("peephole2")) badfoo () +{ +(function "badfoo" + (insn-chain + (block 2 + (edge-from entry (flags "FALLTHRU")) + (cnote 3 [bb 2] NOTE_INSN_BASIC_BLOCK) + (cinsn 101 (set (reg:DI x19) (reg:DI x0))) + (cinsn 10 (use (reg/i:SI x19))) + (edge-to exit (flags "FALLTHRU")) + ) ;; block 2 + ) ;; insn-chain +) ;; function "foo2" +} + +/* Compile a valid __RTL function to test state from the "dfinit" pass has been + cleaned with the "dfinish" pass. */ + +int __RTL (startwith ("final")) foo2 () +{ +(function "foo2" + (insn-chain + (block 2 + (edge-from entry (flags "FALLTHRU")) + (cnote 3 [bb 2] NOTE_INSN_BASIC_BLOCK) + (cinsn 101 (set (reg:DI x19) (reg:DI x0))) + (cinsn 10 (use (reg/i:SI x19))) + (edge-to exit (flags "FALLTHRU")) + ) ;; block 2 + ) ;; insn-chain +) ;; function "foo2" +} +