re PR target/23376 (ICE on GCC 4.x with -O1 -funroll-loops -fvariable-expansion-in-unroller)
PR target/23376 * loop-unroll.c (analyze_insn_to_expand_var): Make sure that force_operand will work later on using have_insn_for. From-SVN: r103181
This commit is contained in:
parent
196f5a8dcd
commit
f2dd440f45
|
@ -1,3 +1,9 @@
|
|||
2005-08-16 Steven Bosscher <stevenb@suse.de>
|
||||
|
||||
PR target/23376
|
||||
* loop-unroll.c (analyze_insn_to_expand_var): Make sure that
|
||||
force_operand will work later on using have_insn_for.
|
||||
|
||||
2005-08-16 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
|
||||
|
||||
* fold-const.c (tree_expr_nonnegative_p): Regroup cases.
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
* trans-stmt.c (gfc_trans_arithmetic_if): Optimized in case of equal
|
||||
labels.
|
||||
|
||||
2005-09-11 Francois-Xavier Coudert <coudert@clipper.ens.fr>
|
||||
2005-08-11 Francois-Xavier Coudert <coudert@clipper.ens.fr>
|
||||
Steven Bosscher <stevenb@suse.de>
|
||||
|
||||
PR libfortran/20006
|
||||
|
|
|
@ -1574,7 +1574,19 @@ analyze_insn_to_expand_var (struct loop *loop, rtx insn)
|
|||
&& GET_CODE (src) != MINUS
|
||||
&& GET_CODE (src) != MULT)
|
||||
return NULL;
|
||||
|
||||
|
||||
/* Hmm, this is a bit paradoxical. We know that INSN is a valid insn
|
||||
in MD. But if there is no optab to generate the insn, we can not
|
||||
perform the variable expansion. This can happen if an MD provides
|
||||
an insn but not a named pattern to generate it, for example to avoid
|
||||
producing code that needs additional mode switches like for x87/mmx.
|
||||
|
||||
So we check have_insn_for which looks for an optab for the operation
|
||||
in SRC. If it doesn't exist, we can't perform the expansion even
|
||||
though INSN is valid. */
|
||||
if (!have_insn_for (GET_CODE (src), GET_MODE (src)))
|
||||
return NULL;
|
||||
|
||||
if (!XEXP (src, 0))
|
||||
return NULL;
|
||||
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2005-08-16 Steven Bosscher <stevenb@suse.de>
|
||||
|
||||
PR target/23376
|
||||
* gcc.target/x86_64/pr23376.c: New test.
|
||||
|
||||
2005-08-16 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
PR c++/23337
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O1 -funroll-loops -fvariable-expansion-in-unroller" } */
|
||||
|
||||
typedef int __m64 __attribute__ ((__vector_size__ (8)));
|
||||
typedef int __v2si __attribute__ ((__vector_size__ (8)));
|
||||
|
||||
static __inline __m64 __attribute__((__always_inline__))
|
||||
_mm_add_pi32 (__m64 __m1, __m64 __m2)
|
||||
{
|
||||
return (__m64) __builtin_ia32_paddd ((__v2si)__m1, (__v2si)__m2);
|
||||
}
|
||||
|
||||
__m64
|
||||
simple_block_diff_up_mmx_4 (const int width, __m64 ref1)
|
||||
{
|
||||
__m64 sum;
|
||||
int count = width >>1;
|
||||
while (count--)
|
||||
sum = _mm_add_pi32 (sum, ref1);
|
||||
return sum;
|
||||
}
|
Loading…
Reference in New Issue