aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/passes.c3
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/rtl/aarch64/missed-pass-error.c45
4 files changed, 55 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index dbc85d5d..8db3c4ad 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2019-11-15 Matthew Malcomson <matthew.malcomson@arm.com>
+
+ * passes.c (should_skip_pass_p): Always run "dfinish".
+
2019-11-15 Richard Biener <rguenther@suse.de>
* ipa-inline.c (inline_small_functions): Move assignment
diff --git a/gcc/passes.c b/gcc/passes.c
index cfc0fef..b77356d 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 e537e5d..2b630ef 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2019-11-15 Matthew Malcomson <matthew.malcomson@arm.com>
+
+ * gcc.dg/rtl/aarch64/missed-pass-error.c: New test.
+
2019-11-15 Richard Biener <rguenther@suse.de>
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 0000000..2f02ca9
--- /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"
+}
+