+2011-02-17 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/43653
+ * config/i386/i386.c (ix86_secondary_reload): Handle SSE
+ input reload with PLUS RTX.
+
2011-02-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
PR pch/14940
Backport from mainline:
2010-12-30 Nathan Froyd <froydnj@codesourcery.com>
- PR target/44606
- * reload1.c (choose_reload_regs): Don't look for equivalences for
- output reloads of constant loads.
+ PR target/44606
+ * reload1.c (choose_reload_regs): Don't look for equivalences for
+ output reloads of constant loads.
2011-01-30 Gerald Pfeifer <gerald@pfeifer.com>
Backport from mainline:
2010-08-22 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
- PR boehm-gc/34544
+ PR boehm-gc/34544
* gthr-posix.h (__gthread_active_init): Delete.
(__gthread_active_p): Do activity check here.
Don't include errno.h on hppa-hpux. Update comment.
(avx_maskstore<ssemodesuffix><avxmodesuffix>): Likewise.
2011-01-17 Olivier Hainque <hainque@adacore.com>
- Michael Haubenwallner <michael.haubenwallner@salomon.at>
- Eric Botcazou <ebotcazou@adacore.com>
+ Michael Haubenwallner <michael.haubenwallner@salomon.at>
+ Eric Botcazou <ebotcazou@adacore.com>
PR target/46655
* xcoffout.c (ASM_OUTPUT_LINE): Output line only if positive, and only
Backport from mainline
Fix PR45758: reset scevs before Graphite.
- 2010-09-24 Sebastian Pop <sebastian.pop@amd.com>
+ 2010-09-24 Sebastian Pop <sebastian.pop@amd.com>
PR tree-optimization/45552
* graphite.c (graphite_initialize): Call scev_reset.
Backport from mainline:
2010-09-15 Olivier Hainque <hainque@adacore.com>
- Jose Ruiz <ruiz@adacore.com>
+ Jose Ruiz <ruiz@adacore.com>
* config/alpha/osf.h (MD_UNWIND_SUPPORT): Define.
* config/alpha/osf-unwind.h: New file.
{
/* QImode spills from non-QI registers require
intermediate register on 32bit targets. */
- if (!in_p && mode == QImode && !TARGET_64BIT
+ if (!TARGET_64BIT
+ && !in_p && mode == QImode
&& (rclass == GENERAL_REGS
|| rclass == LEGACY_REGS
|| rclass == INDEX_REGS))
return Q_REGS;
}
+ /* This condition handles corner case where an expression involving
+ pointers gets vectorized. We're trying to use the address of a
+ stack slot as a vector initializer.
+
+ (set (reg:V2DI 74 [ vect_cst_.2 ])
+ (vec_duplicate:V2DI (reg/f:DI 20 frame)))
+
+ Eventually frame gets turned into sp+offset like this:
+
+ (set (reg:V2DI 21 xmm0 [orig:74 vect_cst_.2 ] [74])
+ (vec_duplicate:V2DI (plus:DI (reg/f:DI 7 sp)
+ (const_int 392 [0x188]))))
+
+ That later gets turned into:
+
+ (set (reg:V2DI 21 xmm0 [orig:74 vect_cst_.2 ] [74])
+ (vec_duplicate:V2DI (plus:DI (reg/f:DI 7 sp)
+ (mem/u/c/i:DI (symbol_ref/u:DI ("*.LC0") [flags 0x2]) [0 S8 A64]))))
+
+ We'll have the following reload recorded:
+
+ Reload 0: reload_in (DI) =
+ (plus:DI (reg/f:DI 7 sp)
+ (mem/u/c/i:DI (symbol_ref/u:DI ("*.LC0") [flags 0x2]) [0 S8 A64]))
+ reload_out (V2DI) = (reg:V2DI 21 xmm0 [orig:74 vect_cst_.2 ] [74])
+ SSE_REGS, RELOAD_OTHER (opnum = 0), can't combine
+ reload_in_reg: (plus:DI (reg/f:DI 7 sp) (const_int 392 [0x188]))
+ reload_out_reg: (reg:V2DI 21 xmm0 [orig:74 vect_cst_.2 ] [74])
+ reload_reg_rtx: (reg:V2DI 22 xmm1)
+
+ Which isn't going to work since SSE instructions can't handle scalar
+ additions. Returning GENERAL_REGS forces the addition into integer
+ register and reload can handle subsequent reloads without problems. */
+
+ if (in_p && GET_CODE (x) == PLUS
+ && SSE_CLASS_P (rclass)
+ && SCALAR_INT_MODE_P (mode))
+ return GENERAL_REGS;
+
return NO_REGS;
}
+2011-02-17 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/43653
+ * gcc.target/i386/pr43653.c: New test.
+
2011-02-14 Tobias Burnus <burnus@net-b.de>
* gfortran.dg/argument_checking_13.f90: Update dg-error.
Backport from mainline:
2010-12-30 Nathan Froyd <froydnj@codesourcery.com>
- PR target/44606
- * gcc.dg/pr44606.c: New test.
+ PR target/44606
+ * gcc.dg/pr44606.c: New test.
2011-01-27 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
Backport from mainline
2010-12-06 Jakub Jelinek <jakub@redhat.com>
-
+
PR target/43897
* gcc.target/ia64/pr43897.c: New test.
* gcc.dg/pr46499-2.c: New test.
2010-11-20 Jakub Jelinek <jakub@redhat.com>
-
+
PR c++/46538
* g++.dg/other/error34.C: New test.
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O1 -ftree-vectorize -msse" } */
+
+typedef struct {} S;
+
+void *foo()
+{
+ S a[64], *p[64];
+ int i;
+
+ for (i = 0; i < 64; i++)
+ p[i] = &a[i];
+ return p[0];
+}