Commit dddd0c7a by Jakub Jelinek

re PR rtl-optimization/89354 (Combine pass yields wrong code with -O2 and -msse2 for 32bit target)

	PR rtl-optimization/89354
	* combine.c (make_extraction): Punt if extraction_mode is narrower
	than len bits.

	* gcc.dg/pr89354.c: New test.

From-SVN: r268913
parent bf36afbc
2019-02-14 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/89354
* combine.c (make_extraction): Punt if extraction_mode is narrower
than len bits.
2019-02-14 Maya Rashish <coypu@sdf.org>
* config.gcc (*-*-netbsd*): Add netbsd-d.o
* config.gcc (*-*-netbsd*): Add netbsd-d.o.
* config/netbsd-d.c: New file.
* config/t-netbsd: Add netbsd-d.o
......
......@@ -7830,6 +7830,10 @@ make_extraction (machine_mode mode, rtx inner, HOST_WIDE_INT pos,
&& partial_subreg_p (extraction_mode, mode))
extraction_mode = mode;
/* Punt if len is too large for extraction_mode. */
if (maybe_gt (len, GET_MODE_PRECISION (extraction_mode)))
return NULL_RTX;
if (!MEM_P (inner))
wanted_inner_mode = wanted_inner_reg_mode;
else
......
2019-02-14 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/89354
* gcc.dg/pr89354.c: New test.
2019-02-14 Uroš Bizjak <ubizjak@gmail.com>
* gcc.target/i386/ssse3-pabsb.c: Re-enable 64-bit form on AVX targets.
......
/* PR rtl-optimization/89354 */
/* { dg-do run } */
/* { dg-options "-O2" } */
/* { dg-additional-options "-msse2" { target sse2_runtime } } */
static unsigned long long q = 0;
__attribute__((noipa)) static void
foo (void)
{
q = (q & ~0x1ffffffffULL) | 0x100000000ULL;
}
int
main ()
{
__asm volatile ("" : "+m" (q));
foo ();
if (q != 0x100000000ULL)
__builtin_abort ();
return 0;
}
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