re PR target/63965 (ICE: in extract_constrain_insn, at recog.c:2230 on ppc64)
authorMichael Meissner <meissner@linux.vnet.ibm.com>
Mon, 24 Nov 2014 18:58:40 +0000 (18:58 +0000)
committerMichael Meissner <meissner@gcc.gnu.org>
Mon, 24 Nov 2014 18:58:40 +0000 (18:58 +0000)
2014-11-24  Michael Meissner  <meissner@linux.vnet.ibm.com>

PR target/63965
* config/rs6000/rs6000-cpus.def: Undo November 21st changes, a
work in progress patch was committed instead of the fixes for
63965.
* config/rs6000/rs6000.c: Likewise.

From-SVN: r218027

gcc/ChangeLog
gcc/config/rs6000/rs6000-cpus.def
gcc/config/rs6000/rs6000.c

index 1ed780ca8558e3e398042ea5a88f48629e84af50..5df9ef66bd454f2c253492ecb3440afc7635e02c 100644 (file)
@@ -1,3 +1,11 @@
+2014-11-24  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR target/63965
+       * config/rs6000/rs6000-cpus.def: Undo November 21st changes, a
+       work in progress patch was committed instead of the fixes for
+       63965.
+       * config/rs6000/rs6000.c: Likewise.
+
 2014-11-22  Jan Hubicka  <hubicka@ucw.cz>
 
        PR ipa/63671
index 7bd5891d13c7ac41ac49c74ee2ea68150238101a..c1a7649c3fb3dcffe6bd48eba08dbe3f446a5246 100644 (file)
 
   /* For ISA 2.06, don't add ISEL, since in general it isn't a win, but
      altivec is a win so enable it.  */
+  /* OPTION_MASK_VSX_TIMODE should be set, but disable it for now until
+     PR 58587 is fixed.  */
 #define ISA_2_6_MASKS_EMBEDDED (ISA_2_5_MASKS_EMBEDDED | OPTION_MASK_POPCNTD)
 #define ISA_2_6_MASKS_SERVER   (ISA_2_5_MASKS_SERVER                   \
                                 | OPTION_MASK_POPCNTD                  \
                                 | OPTION_MASK_ALTIVEC                  \
                                 | OPTION_MASK_VSX                      \
-                                | OPTION_MASK_UPPER_REGS_DF            \
-                                | OPTION_MASK_VSX_TIMODE)
-
+                                | OPTION_MASK_UPPER_REGS_DF)
 
 /* For now, don't provide an embedded version of ISA 2.07.  */
 #define ISA_2_7_MASKS_SERVER   (ISA_2_6_MASKS_SERVER                   \
@@ -188,8 +188,7 @@ RS6000_CPU ("power6x", PROCESSOR_POWER6, MASK_POWERPC64 | MASK_PPC_GPOPT
 RS6000_CPU ("power7", PROCESSOR_POWER7,   /* Don't add MASK_ISEL by default */
            POWERPC_7400_MASK | MASK_POWERPC64 | MASK_PPC_GPOPT | MASK_MFCRF
            | MASK_POPCNTB | MASK_FPRND | MASK_CMPB | MASK_DFP | MASK_POPCNTD
-           | MASK_VSX | MASK_RECIP_PRECISION | OPTION_MASK_UPPER_REGS_DF
-           | OPTION_MASK_VSX_TIMODE)
+           | MASK_VSX | MASK_RECIP_PRECISION | OPTION_MASK_UPPER_REGS_DF)
 RS6000_CPU ("power8", PROCESSOR_POWER8, MASK_POWERPC64 | ISA_2_7_MASKS_SERVER)
 RS6000_CPU ("powerpc", PROCESSOR_POWERPC, 0)
 RS6000_CPU ("powerpc64", PROCESSOR_POWERPC64, MASK_PPC_GFXOPT | MASK_POWERPC64)
index 6d128c17408e6d013bcbc3a49c957a5886bab864..ea3e51120140c31c23e67d407e0dd1d59558c960 100644 (file)
@@ -7730,6 +7730,13 @@ rs6000_legitimate_address_p (machine_mode mode, rtx x, bool reg_ok_strict)
       && legitimate_constant_pool_address_p (x, mode,
                                             reg_ok_strict || lra_in_progress))
     return 1;
+  /* For TImode, if we have load/store quad and TImode in VSX registers, only
+     allow register indirect addresses.  This will allow the values to go in
+     either GPRs or VSX registers without reloading.  The vector types would
+     tend to go into VSX registers, so we allow REG+REG, while TImode seems
+     somewhat split, in that some uses are GPR based, and some VSX based.  */
+  if (mode == TImode && TARGET_QUAD_MEMORY && TARGET_VSX_TIMODE)
+    return 0;
   /* If not REG_OK_STRICT (before reload) let pass any stack offset.  */
   if (! reg_ok_strict
       && reg_offset_p