re PR target/26459 (gcc fails to build on powerpc e500-double targets)
authorAlan Modra <amodra@bigpond.net.au>
Sun, 26 Mar 2006 22:48:22 +0000 (22:48 +0000)
committerAlan Modra <amodra@gcc.gnu.org>
Sun, 26 Mar 2006 22:48:22 +0000 (09:18 +1030)
PR target/26459
* config/rs6000/rs6000.md (DF reg move peephole): Prevent
peephole removing spe frob_di_df_2.

From-SVN: r112400

gcc/ChangeLog
gcc/config/rs6000/rs6000.md

index 890c90c7f536635d75a25c8a90884818bb8e80c1..0f50ac3d6b79518f337c65b2fc2f5c22a6972dc8 100644 (file)
@@ -1,3 +1,9 @@
+2006-03-27  Alan Modra  <amodra@bigpond.net.au>
+
+       PR target/26459
+       * config/rs6000/rs6000.md (DF reg move peephole): Prevent
+       peephole removing spe frob_di_df_2.
+
 2006-03-26  Sebastian Pop  <pop@cri.ensmp.fr>
 
        * tree-data-ref.c: Rename DDR_SIZE_VECT to DDR_NB_LOOPS.
index 48e8df2e1f0e0862c0c24a5fe9b810b1a296ad78..06670d2ac36c68810006196f3eadc11362532680 100644 (file)
   "operands[0] = widen_memory_access (operands[0], V2DFmode, 0);
    operands[1] = gen_rtx_REG (V2DFmode, REGNO (operands[1]));")
 
-;; after inserting conditional returns we can sometimes have
+;; After inserting conditional returns we can sometimes have
 ;; unnecessary register moves.  Unfortunately we cannot have a
 ;; modeless peephole here, because some single SImode sets have early
 ;; clobber outputs.  Although those sets expand to multi-ppc-insn
 ;; sequences, using get_attr_length here will smash the operands
 ;; array.  Neither is there an early_cobbler_p predicate.
+;; Disallow subregs for E500 so we don't munge frob_di_df_2.
 (define_peephole2
   [(set (match_operand:DF 0 "gpc_reg_operand" "")
        (match_operand:DF 1 "any_operand" ""))
    (set (match_operand:DF 2 "gpc_reg_operand" "")
        (match_dup 0))]
-  "peep2_reg_dead_p (2, operands[0])"
+  "!(TARGET_E500_DOUBLE && GET_CODE (operands[2]) == SUBREG)
+   && peep2_reg_dead_p (2, operands[0])"
   [(set (match_dup 2) (match_dup 1))])
 
 (define_peephole2