From: Richard Henderson Date: Mon, 10 Aug 1998 01:23:59 +0000 (-0700) Subject: alpha.md (extxl+1,+2): New patterns to work around combine lossage. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b08b85c4a0b590394116fdb5acc8d4e2068544b1;p=gcc.git alpha.md (extxl+1,+2): New patterns to work around combine lossage. * alpha.md (extxl+1,+2): New patterns to work around combine lossage. From-SVN: r21651 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 716b79d4ff0..e1a6e38f248 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Mon Aug 10 01:21:01 1998 Richard Henderson + + * alpha.md (extxl+1,+2): New patterns to work around + combine lossage. + Sat Aug 8 19:20:22 1998 Gary Thomas (gdt@linuxppc.org) * rs6000.c (rs6000_allocate_stack_space) Fix typo which diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md index a92a8470012..c2eeaee951a 100644 --- a/gcc/config/alpha/alpha.md +++ b/gcc/config/alpha/alpha.md @@ -1495,6 +1495,29 @@ "ext%M2l %r1,%3,%0" [(set_attr "type" "shift")]) +;; Combine has some strange notion of preserving existing undefined behaviour +;; in shifts larger than a word size. So capture these patterns that it +;; should have turned into zero_extracts. + +(define_insn "" + [(set (match_operand:DI 0 "register_operand" "=r") + (and (lshiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") + (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") + (const_int 3))) + (match_operand:DI 3 "mode_mask_operand" "n")))] + "" + "ext%U3l %1,%2,%0" + [(set_attr "type" "shift")]) + +(define_insn "" + [(set (match_operand:DI 0 "register_operand" "=r") + (lshiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") + (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") + (const_int 3))))] + "" + "extql %1,%2,%0" + [(set_attr "type" "shift")]) + (define_insn "extqh" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI