diff options
author | Jakub Jelinek <jakub@redhat.com> | 2016-10-28 09:12:52 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2016-10-28 09:12:52 +0200 |
commit | 0d9e143c62c7a68474a39de40e5d6104074eee96 (patch) | |
tree | 6863d090de2407d3069a9ae76f697e28c272cfda /gcc | |
parent | 4d925a90692f9191679ce0517c50ed197038c44d (diff) | |
download | gcc-0d9e143c62c7a68474a39de40e5d6104074eee96.zip gcc-0d9e143c62c7a68474a39de40e5d6104074eee96.tar.gz gcc-0d9e143c62c7a68474a39de40e5d6104074eee96.tar.bz2 |
re PR rtl-optimization/78132 (GCC produces invalid instruction (kmovd and kmovq) for KNL.)
PR rtl-optimization/78132
* ree.c (combine_reaching_defs): Give up if copy_needed and
!HARD_REGNO_MODE_OK (REGNO (src_reg), dst_mode).
* gcc.target/i386/pr78132.c: New test.
From-SVN: r241641
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ree.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr78132.c | 20 |
4 files changed, 36 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 254d262..88805bd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-10-28 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/78132 + * ree.c (combine_reaching_defs): Give up if copy_needed and + !HARD_REGNO_MODE_OK (REGNO (src_reg), dst_mode). + 2016-10-27 Eric Botcazou <ebotcazou@adacore.com> * config/sparc/sparc.md (<*vlop:code><VL:mode>3): Remove leading '*'. @@ -788,6 +788,11 @@ combine_reaching_defs (ext_cand *cand, const_rtx set_pat, ext_state *state) machine_mode dst_mode = GET_MODE (SET_DEST (PATTERN (cand->insn))); rtx src_reg = get_extended_src_reg (SET_SRC (PATTERN (cand->insn))); + /* Ensure we can use the src_reg in dst_mode (needed for + the (set (reg1) (reg2)) insn mentioned above). */ + if (!HARD_REGNO_MODE_OK (REGNO (src_reg), dst_mode)) + return false; + /* Ensure the number of hard registers of the copy match. */ if (HARD_REGNO_NREGS (REGNO (src_reg), dst_mode) != HARD_REGNO_NREGS (REGNO (src_reg), GET_MODE (src_reg))) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e3c8b63e..08cc8bd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-10-28 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/78132 + * gcc.target/i386/pr78132.c: New test. + 2016-10-27 Eric Botcazou <ebotcazou@adacore.com> * gcc.dg/vect/pr71264.c: XFAIL on SPARC. diff --git a/gcc/testsuite/gcc.target/i386/pr78132.c b/gcc/testsuite/gcc.target/i386/pr78132.c new file mode 100644 index 0000000..e5a0e23 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr78132.c @@ -0,0 +1,20 @@ +/* PR rtl-optimization/78132 */ +/* { dg-do compile } */ +/* { dg-options "-O3 -mavx512f -mno-avx512bw -mno-avx512dq -masm=att" } */ +/* { dg-final { scan-assembler-not "kmov\[dq]\t" } } */ + +unsigned short c; +char a, d, f, b; +short e; +long g; + +int +main () +{ + g = c; + f = c & e; + d = c & a | e; + if (a) + b = c; + return 0; +} |