compare-elim.c (equivalent_reg_at_start): Return NULL_RTX when returned register...
authorUros Bizjak <uros@gcc.gnu.org>
Sat, 13 May 2017 21:07:49 +0000 (23:07 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Sat, 13 May 2017 21:07:49 +0000 (23:07 +0200)
* compare-elim.c (equivalent_reg_at_start): Return NULL_RTX
when returned register mode doesn't match original mode.

From-SVN: r248009

gcc/ChangeLog
gcc/compare-elim.c

index b144a538bef82478d6210d3a6eca331aee857c91..9ec0a530f3f1aacdcad7b734e19475c4e0d307f4 100644 (file)
@@ -1,7 +1,12 @@
+2017-05-13  Uros Bizjak  <ubizjak@gmail.com>
+
+       * compare-elim.c (equivalent_reg_at_start): Return NULL_RTX
+       when returned register mode doesn't match original mode.
+
 2017-05-12  Jeff Law  <law@redhat.com>
            Jakub Jelinek  <jakub@redhat.com>
 
-       * config/mn10300/mn10300.c (mn10300_match_ccmode): Fix where    
+       * config/mn10300/mn10300.c (mn10300_match_ccmode): Fix where
        we look for cc setter after the compare-elim changes.
        * config/mn10300/mn10300.md (addsi3_flags): Fix order of patterns
        within the vector to match what compare-elim now expects.
index 69b1de73ba8308cbba60e9f126553021a77d350c..b5ce99341f6623263b72678e3dafcab198dd26c0 100644 (file)
@@ -526,6 +526,7 @@ maybe_select_cc_mode (struct comparison *cmp, rtx a ATTRIBUTE_UNUSED,
 static rtx
 equivalent_reg_at_start (rtx reg, rtx_insn *end, rtx_insn *start)
 {
+  machine_mode orig_mode = GET_MODE (reg);
   rtx_insn *bb_head = BB_HEAD (BLOCK_FOR_INSN (end));
 
   for (rtx_insn *insn = PREV_INSN (end);
@@ -572,6 +573,9 @@ equivalent_reg_at_start (rtx reg, rtx_insn *end, rtx_insn *start)
        return NULL_RTX;
     }
 
+  if (GET_MODE (reg) != orig_mode)
+    return NULL_RTX;
+
   return reg;
 }