From 0d9e143c62c7a68474a39de40e5d6104074eee96 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 28 Oct 2016 09:12:52 +0200 Subject: 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 --- gcc/ree.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'gcc/ree.c') diff --git a/gcc/ree.c b/gcc/ree.c index 374988e..6bac17e 100644 --- a/gcc/ree.c +++ b/gcc/ree.c @@ -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))) -- cgit v1.1