re PR rtl-optimization/6842 (internal compiler error using MMX intrinsics with optimization)
PR optimization/6842 * combine.c (combine_simplify_rtx) [SUBREG]: Don't ICE if VOIDmode operand subreg cannot be simplified. * gcc.dg/20020531-1.c: New test. From-SVN: r54462
This commit is contained in:
parent
5d056e9be5
commit
156755acc0
|
@ -1,3 +1,9 @@
|
|||
2002-06-10 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR optimization/6842
|
||||
* combine.c (combine_simplify_rtx) [SUBREG]: Don't ICE if VOIDmode
|
||||
operand subreg cannot be simplified.
|
||||
|
||||
2002-06-10 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* varasm.c (const_hash): Handle FDESC_EXPR like ADDR_EXPR.
|
||||
|
|
|
@ -3866,7 +3866,12 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
|
|||
|
||||
/* simplify_subreg can't use gen_lowpart_for_combine. */
|
||||
if (CONSTANT_P (SUBREG_REG (x))
|
||||
&& subreg_lowpart_offset (mode, op0_mode) == SUBREG_BYTE (x))
|
||||
&& subreg_lowpart_offset (mode, op0_mode) == SUBREG_BYTE (x)
|
||||
/* Don't call gen_lowpart_for_combine if the inner mode
|
||||
is VOIDmode and we cannot simplify it, as SUBREG without
|
||||
inner mode is invalid. */
|
||||
&& (GET_MODE (SUBREG_REG (x)) != VOIDmode
|
||||
|| gen_lowpart_common (mode, SUBREG_REG (x))))
|
||||
return gen_lowpart_for_combine (mode, SUBREG_REG (x));
|
||||
|
||||
if (GET_MODE_CLASS (GET_MODE (SUBREG_REG (x))) == MODE_CC)
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
|
||||
* g++.dg/opt/vt1.C: New test.
|
||||
|
||||
* gcc.dg/20020531-1.c: New test.
|
||||
|
||||
2002-06-07 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
* gcc.dg/20020607-2.c: New test case.
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
/* PR optimization/6842
|
||||
This testcase caused ICE when trying to optimize V8QI subreg of VOIDmode
|
||||
CONST_DOUBLE. */
|
||||
/* { dg-do compile { target i?86-*-* } } */
|
||||
/* { dg-options "-O2 -mmmx" } */
|
||||
|
||||
typedef int __v8qi __attribute__ ((__mode__ (__V8QI__)));
|
||||
extern void abort (void);
|
||||
extern void exit (int);
|
||||
|
||||
void foo (void)
|
||||
{
|
||||
unsigned long long a = 0x0102030405060708LL;
|
||||
unsigned long long b = 0x1020304050607080LL;
|
||||
unsigned long long c;
|
||||
|
||||
c = (unsigned long long) __builtin_ia32_paddusb ((__v8qi) a, (__v8qi) b);
|
||||
__builtin_ia32_emms ();
|
||||
if (c != 0x1122334455667788)
|
||||
abort ();
|
||||
}
|
Loading…
Reference in New Issue