Repeat jump threading after combine
authorIlya Leoshkevich <iii@linux.ibm.com>
Mon, 3 Dec 2018 09:49:02 +0000 (09:49 +0000)
committerIlya Leoshkevich <iii@gcc.gnu.org>
Mon, 3 Dec 2018 09:49:02 +0000 (09:49 +0000)
commit98fe146e5be55232c20ef242ee7c7e2123373df4
tree2a93928458a1a7d8f995e86940931e86e729de63
parente45130c59e988c6825b14b9f10f41fb2e256c2e5
Repeat jump threading after combine

Consider the following RTL:

(insn (set (reg 65) (if_then_else (eq %cc 0) 1 0)))
(insn (parallel [(set %cc (compare (reg 65) 0)) (clobber %scratch)]))
(jump_insn (set %pc (if_then_else (ne %cc 0) (label_ref 23) %pc)))

Combine simplifies this into:

(note NOTE_INSN_DELETED)
(note NOTE_INSN_DELETED)
(jump_insn (set %pc (if_then_else (eq %cc 0) (label_ref 23) %pc)))

opening up the possibility to perform jump threading.

gcc/ChangeLog:

2018-12-03  Ilya Leoshkevich  <iii@linux.ibm.com>

PR target/80080
* cfgcleanup.c (class pass_postreload_jump): New pass.
(pass_postreload_jump::execute): Likewise.
(make_pass_postreload_jump): Likewise.
* passes.def: Add pass_postreload_jump before
pass_postreload_cse.
* tree-pass.h (make_pass_postreload_jump): New pass.

gcc/testsuite/ChangeLog:

2018-12-03  Ilya Leoshkevich  <iii@linux.ibm.com>

PR target/80080
* gcc.target/s390/pr80080-4.c: New test.

From-SVN: r266734
gcc/ChangeLog
gcc/cfgcleanup.c
gcc/passes.def
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/s390/pr80080-4.c [new file with mode: 0644]
gcc/tree-pass.h