Commit 62396659 by Matthew Malcomson Committed by Matthew Malcomson

[mid-end][__RTL] Set global epilogue_completed in skip_pass

Set global epilogue_completed when skipping pro_and_epilogue pass

When compiling RTL functions marked to start at a pass after the reload
pass, `skip_pass` is used to mark the reload pass as having completed
since many patterns use the `reload_completed` variable to determine
whether to run or not.

Here we do the same for the `epilogue_completed` variable and the
pro_and_epilogue pass.

Also include a testcase that relies on the availability of a
define_split in the aarch64 backend that is conditioned on this
`epilogue_completed` variable.

regtest done on native aarch64
regtest done on native x64_86

gcc/ChangeLog:

2019-11-15  Matthew Malcomson  <matthew.malcomson@arm.com>

	* passes.c (skip_pass): Set epilogue_completed if skipping the
	pro_and_epilogue pass.

gcc/testsuite/ChangeLog:

2019-11-15  Matthew Malcomson  <matthew.malcomson@arm.com>

	* gcc.dg/rtl/aarch64/test-epilogue-set.c: New test.

From-SVN: r278285
parent 8916ba87
2019-11-15 Matthew Malcomson <matthew.malcomson@arm.com> 2019-11-15 Matthew Malcomson <matthew.malcomson@arm.com>
* passes.c (skip_pass): Set epilogue_completed if skipping the
pro_and_epilogue pass.
2019-11-15 Matthew Malcomson <matthew.malcomson@arm.com>
* passes.c (should_skip_pass_p): Always run "dfinish". * passes.c (should_skip_pass_p): Always run "dfinish".
2019-11-15 Richard Biener <rguenther@suse.de> 2019-11-15 Richard Biener <rguenther@suse.de>
...@@ -2400,6 +2400,11 @@ skip_pass (opt_pass *pass) ...@@ -2400,6 +2400,11 @@ skip_pass (opt_pass *pass)
if (strcmp (pass->name, "reload") == 0) if (strcmp (pass->name, "reload") == 0)
reload_completed = 1; reload_completed = 1;
/* Similar for pass "pro_and_epilogue" and the "epilogue_completed" global
variable. */
if (strcmp (pass->name, "pro_and_epilogue") == 0)
epilogue_completed = 1;
/* The INSN_ADDRESSES vec is normally set up by /* The INSN_ADDRESSES vec is normally set up by
shorten_branches; set it up for the benefit of passes that shorten_branches; set it up for the benefit of passes that
run after this. */ run after this. */
......
2019-11-15 Matthew Malcomson <matthew.malcomson@arm.com> 2019-11-15 Matthew Malcomson <matthew.malcomson@arm.com>
* gcc.dg/rtl/aarch64/test-epilogue-set.c: New test.
2019-11-15 Matthew Malcomson <matthew.malcomson@arm.com>
* gcc.dg/rtl/aarch64/missed-pass-error.c: New test. * gcc.dg/rtl/aarch64/missed-pass-error.c: New test.
2019-11-15 Richard Biener <rguenther@suse.de> 2019-11-15 Richard Biener <rguenther@suse.de>
......
/* { dg-do compile { target aarch64-*-* } } */
/*
Should compile rather than ICE.
Compilation requires setting the "epilogue_completed" variable.
*/
int __RTL (startwith ("cprop_hardreg"))
f ()
{
(function "f"
(insn-chain
(block 2
(edge-from entry (flags "FALLTHRU"))
(cnote 6 [bb 2] NOTE_INSN_BASIC_BLOCK)
(cinsn 100 (set (reg:DI x0)
(plus:DI
(reg:DI x1)
(const_int 16777213))))
;; Extra insn, to avoid all of the above from being deleted by DCE
(cinsn 10 (use (reg/i:DI x0)))
(edge-to exit (flags "FALLTHRU"))
) ;; block 2
) ;; insn-chain
) ;; function
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment