Commit f2dd440f by Steven Bosscher

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
parent 196f5a8d
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> 2005-08-16 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
* fold-const.c (tree_expr_nonnegative_p): Regroup cases. * fold-const.c (tree_expr_nonnegative_p): Regroup cases.
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
* trans-stmt.c (gfc_trans_arithmetic_if): Optimized in case of equal * trans-stmt.c (gfc_trans_arithmetic_if): Optimized in case of equal
labels. 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> Steven Bosscher <stevenb@suse.de>
PR libfortran/20006 PR libfortran/20006
......
...@@ -1574,7 +1574,19 @@ analyze_insn_to_expand_var (struct loop *loop, rtx insn) ...@@ -1574,7 +1574,19 @@ analyze_insn_to_expand_var (struct loop *loop, rtx insn)
&& GET_CODE (src) != MINUS && GET_CODE (src) != MINUS
&& GET_CODE (src) != MULT) && GET_CODE (src) != MULT)
return NULL; 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)) if (!XEXP (src, 0))
return NULL; return NULL;
......
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> 2005-08-16 Ian Lance Taylor <ian@airs.com>
PR c++/23337 PR c++/23337
......
/* { 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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment