Commit 3d952fb7 by Michael Matz

re PR target/42881 (SSE2 intrinsics miscompiled at -O0 -march=k8)

	PR target/42881
	* config/i386/i386.c (ix86_expand_vector_init_duplicate):
	Wrap force_reg into a sequence, emit it before user.

testsuite/
	* gcc.target/i386/pr42881.c: New test.

From-SVN: r156320
parent 2b30b635
2010-01-28 Michael Matz <matz@suse.de>
PR target/42881
* config/i386/i386.c (ix86_expand_vector_init_duplicate):
Wrap force_reg into a sequence, emit it before user.
2010-01-28 Stephen Thomas <stephen.thomas@arm.com>
* config/arm/arm.md (bswapsi2): Add support for bswapsi2.
......
......@@ -26644,8 +26644,16 @@ ix86_expand_vector_init_duplicate (bool mmx_ok, enum machine_mode mode,
insn = emit_insn (gen_rtx_SET (VOIDmode, target, dup));
if (recog_memoized (insn) < 0)
{
rtx seq;
/* If that fails, force VAL into a register. */
start_sequence ();
XEXP (dup, 0) = force_reg (GET_MODE_INNER (mode), val);
seq = get_insns ();
end_sequence ();
if (seq)
emit_insn_before (seq, insn);
ok = recog_memoized (insn) >= 0;
gcc_assert (ok);
}
......
2010-01-28 Michael Matz <matz@suse.de>
* gcc.target/i386/pr42881.c: New test.
2010-01-28 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* gcc.misc-tests/linkage.exp: Remove mips-sgi-irix6*o32 support.
......
/* PR target/42881 */
/* { dg-do run } */
/* { dg-options "-O0 -msse" } */
#include "sse-check.h"
#include <xmmintrin.h>
static void
sse_test (void)
{
double a[2];
__m128d x = _mm_set1_pd(3);
_mm_storeu_pd(a,x);
if (a[0] != 3.0 || a[1] != 3.0)
__builtin_abort ();
}
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