re PR target/36246 (Reload chooses too wide mode for reg->mem->xmmreg reload)
authorUros Bizjak <uros@gcc.gnu.org>
Fri, 16 May 2008 18:34:04 +0000 (20:34 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Fri, 16 May 2008 18:34:04 +0000 (20:34 +0200)
PR target/36246
* config/i386/i386.h (SECONDARY_MEMORY_NEEDED_MODE): New define.

testsuite/ChangeLog:

PR target/36246
* gcc.target/i386/pr36246.c: New test.

From-SVN: r135437

gcc/ChangeLog
gcc/config/i386/i386.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr36246.c [new file with mode: 0644]

index 9f9af8b20c5f21067679a4a122db65357c806f9f..59c00bbc322aefa71df5311ef07a28014e31ae2a 100644 (file)
@@ -1,3 +1,8 @@
+2008-05-16  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/36246
+       * config/i386/i386.h (SECONDARY_MEMORY_NEEDED_MODE): New define.
+
 2008-05-16  Kenneth Zadeck <zadeck@naturalbridge.com>
 
        * ifcvt.c (dead_or_predicable): Rename
@@ -58,8 +63,8 @@
 
 2008-05-16  Kenneth Zadeck <zadeck@naturalbridge.com>
 
-       * cfg.c (init_flow): Add argument THE_FUN.  Use it
-       instead of cfun.  Update all users.
+       * cfg.c (init_flow): Add argument THE_FUN.  Use it instead of cfun.
+       Update all users.
 
 2008-05-16  Kenneth Zadeck <zadeck@naturalbridge.com>
 
        * tree-pretty-print.c (dump_phi_nodes, dump_generic_bb_buff):
        Add verbose dump.
        * tree-pass.h (TDF_VERBOSE): New dump flag.
-       * print-tree.c (print_node): Added code to be able to print
-       PHI_NODES.
+       * print-tree.c (print_node): Added code to be able to print PHI_NODES.
        (tree-flow.h): Added include.
-       Makefile.in (print-tree.o):  Added TREE_FLOW_H.
+       Makefile.in (print-tree.o):  Added TREE_FLOW_H.
 
 2008-05-16  Bernd Schmidt  <bernd.schmidt@analog.com>
 
@@ -87,8 +91,7 @@
        MULTILIB_MATCHES, MULTILIB_EXCEPTIONS): Likewise.
        * config/bfin/bfin-protos.h (enum bfin_cpu_type): Add
        BFIN_CPU_UNKNOWN.
-       * config/bfin/elf.h (STARTFILE_SPEC): Use specific CRT for
-       BF561.
+       * config/bfin/elf.h (STARTFILE_SPEC): Use specific CRT for BF561.
        (LIB_SPEC): Use proper linker script for bf561.  Error if no mcpu
        option.
        * config/bfin/bfin.c (bfin_cpu_type): Set to BFIN_CPU_UNKNOWN.
        * ipa-inline.c (compute_inline_parameters): Made public and added
        node parameter.
        (compute_inline_parameters_for_current): New function.
-       (pass_inline_param): Now calls
-       compute_inline_parameters_for_current.
+       (pass_inline_param): Now calls compute_inline_parameters_for_current.
        (inline_generate_summary): Removed parameter and made to loop over
        all cgraph nodes.
        (pass_ipa_inline): Updated for new IPA_PASS structure.
 
 2008-05-15  Diego Novillo  <dnovillo@google.com>
 
-       * config/arm/arm.c (arm_return_in_memory): Fix return
-       type.
+       * config/arm/arm.c (arm_return_in_memory): Fix return type.
        * config/arm/arm-protos.h (arm_return_in_memory): Likewise.
 
 2008-05-15  Adam Nemet  <anemet@caviumnetworks.com>
 
        PR middle-end/36194
-       * combine.c (check_conversion): Rename back to check_promoted_subreg. 
-       Don't call record_truncated_value from here. 
-       (record_truncated_value): Turn it into a for_each_rtx callback. 
-       (record_truncated_values): New function. 
-       (combine_instructions): Call note_uses with 
-       record_truncated_values.  Change name of check_conversion to 
-       check_promoted_subreg. 
+       * combine.c (check_conversion): Rename back to check_promoted_subreg.
+       Don't call record_truncated_value from here.
+       (record_truncated_value): Turn it into a for_each_rtx callback.
+       (record_truncated_values): New function.
+       (combine_instructions): Call note_uses with record_truncated_values.
+       Change name of check_conversion to check_promoted_subreg. 
 
 2008-05-15  Janis Johnson  <janis187@us.ibm.com>
 
index 87815edaf7286fb0faa5f9546659e547b6c5ef07..8516e53b41db5b692a8cfa92d380c730f9c641f0 100644 (file)
@@ -1516,6 +1516,14 @@ enum reg_class
 #define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE) \
   ix86_secondary_memory_needed ((CLASS1), (CLASS2), (MODE), 1)
 
+/* Get_secondary_mem widens integral modes to BITS_PER_WORD.
+   There is no need to emit full 64 bit move on 64 bit targets
+   for integral modes that can be moved using 32 bit move.  */
+#define SECONDARY_MEMORY_NEEDED_MODE(MODE)                     \
+  (GET_MODE_BITSIZE (MODE) < 32 && INTEGRAL_MODE_P (MODE)      \
+   ? mode_for_size (32, GET_MODE_CLASS (MODE), 0)              \
+   : MODE)
+
 /* QImode spills from non-QI registers need a scratch.  This does not
    happen often -- the only example so far requires an uninitialized
    pseudo.  */
index 862439d6488b2d29458030535012c4d6ef23eb1f..88c26192c04821207e28f823dc09b04c4d2b20ba 100644 (file)
@@ -1,3 +1,8 @@
+2008-05-16  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/36246
+       * gcc.target/i386/pr36246.c: New test.
+
 2008-05-16  Sebastian Pop  <sebastian.pop@amd.com>
            Jan Sjodin  <jan.sjodin@amd.com>
 
 2008-05-15  Janis Johnson  <janis187@us.ibm.com>
 
        * lib/torture-options.exp: New support for torture options.
-       * lib/gfortran-dg.exp (gfortran-dg-runtest): Use new torture
-       procs.
+       * lib/gfortran-dg.exp (gfortran-dg-runtest): Use new torture procs.
        * lib/c-torture.exp: Define C_TORTURE_OPTIONS instead of
        TORTURE_OPTIONS; don't define torture_with_loops and
        torture_without_loops.
        * lib/gcc-dg.exp: Define DG_TORTURE_OPTIONS instead of
        TORTURE_OPTIONS; don't define torture_with_loops and
        torture_without_loops.
-       (gcc-dg-runtest): Use new torture procs if no torture options
-       defined.
+       (gcc-dg-runtest): Use new torture procs if no torture options defined.
        * lib/fortran-torture.exp: Define FORTRAN_TORTURE_OPTIONS instead of
        TORTURE_OPTIONS.
        (fortran-torture-execute): Use torture_with_loops instead of
diff --git a/gcc/testsuite/gcc.target/i386/pr36246.c b/gcc/testsuite/gcc.target/i386/pr36246.c
new file mode 100644 (file)
index 0000000..5ef5732
--- /dev/null
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-O2 -mtune=generic" } */
+
+typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));
+typedef int __v4si __attribute__ ((__vector_size__ (16)));
+
+__m128i
+_mm_set_epi32 (int __q3, int __q2, int __q1, int __q0)
+{
+  return (__m128i)(__v4si){ __q0, __q1, __q2, __q3 };
+}
+
+/* { dg-final { scan-assembler-not "movq" } } */