diff mbox

Obvious bugfix to x86 machine description

Message ID 52AA2837.60609@redhat.com
State New
Headers show

Commit Message

Jeff Law Dec. 12, 2013, 9:18 p.m. UTC
I stumbled over this while trying to fix one of the regressions for 4.9.

This peep2 pattern in the x86 backend is obviously broken as it does not 
have a mode on the zero_extend in the resulting insn.  As a result, 
if/when this peep2 matches we get an unrecognized insn.

(define_peephole2
   [(set (match_operand:DI 0 "register_operand")
         (zero_extend:DI
           (mult:SI (match_operand:SI 1 "register_operand")
                    (match_operand:SI 2 "const_int_operand"))))]
   "TARGET_64BIT
    && exact_log2 (INTVAL (operands[2])) >= 0
    && REGNO (operands[0]) == REGNO (operands[1])
    && peep2_regno_dead_p (0, FLAGS_REG)"
   [(parallel [(set (match_dup 0)
                    (zero_extend (ashift:SI (match_dup 1) (match_dup 2))))
               (clobber (reg:CC FLAGS_REG))])]
   "operands[2] = GEN_INT (exact_log2 (INTVAL (operands[2])));")


It's obvious the zero_extend should have been DImode.  I searched 
i386.md for other occurrences but didn't find any (remaining modeless 
extensions were on the peep2 and define_split input side patterns).

Bootstrapped and regression tested on x86_64-unknown-linux-gnu. 
Installed as obvious.  No testcase as triggering requires local hackery.
* i386.md (simple LEA peephole2): Add missing mode to zero_extend
	for zero-extended MULT simple LEA pattern.
diff mbox

Patch

diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 6ac2802..ab5b33f 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -17464,7 +17464,7 @@ 
    && REGNO (operands[0]) == REGNO (operands[1])
    && peep2_regno_dead_p (0, FLAGS_REG)"
   [(parallel [(set (match_dup 0)
-		   (zero_extend (ashift:SI (match_dup 1) (match_dup 2))))
+		   (zero_extend:DI (ashift:SI (match_dup 1) (match_dup 2))))
 	      (clobber (reg:CC FLAGS_REG))])]
   "operands[2] = GEN_INT (exact_log2 (INTVAL (operands[2])));")