re PR tree-optimization/65170 (curve25519-donna-c64 miscompilation)
PR tree-optimization/65170 * wide-int.cc (wi::mul_internal): For the umul_ppmm optimization, if val[1] < 0, clear also val[2] and return 3. * gcc.c-torture/execute/pr65170.c: New test. * gcc.dg/tree-ssa/vrp96.c: New test. From-SVN: r220931
This commit is contained in:
parent
d130cf4392
commit
09901e8a73
@ -1,3 +1,9 @@
|
||||
2015-02-24 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/65170
|
||||
* wide-int.cc (wi::mul_internal): For the umul_ppmm optimization,
|
||||
if val[1] < 0, clear also val[2] and return 3.
|
||||
|
||||
2015-02-24 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR target/65172
|
||||
|
@ -1,3 +1,9 @@
|
||||
2015-02-24 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/65170
|
||||
* gcc.c-torture/execute/pr65170.c: New test.
|
||||
* gcc.dg/tree-ssa/vrp96.c: New test.
|
||||
|
||||
2015-02-24 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
* gfortran.dg/readwrite_unf_direct_eor_1.f90: Add missing close.
|
||||
@ -27,7 +33,7 @@
|
||||
registers have the right values. Save register state into
|
||||
static data rather than on the stack.
|
||||
|
||||
2015-02-20 Jakub Jelinek <jakub@redhat.com>
|
||||
2015-02-23 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR bootstrap/63888
|
||||
* c-c++-common/asan/pr63888.c: New test.
|
||||
|
27
gcc/testsuite/gcc.c-torture/execute/pr65170.c
Normal file
27
gcc/testsuite/gcc.c-torture/execute/pr65170.c
Normal file
@ -0,0 +1,27 @@
|
||||
/* PR tree-optimization/65170 */
|
||||
|
||||
#ifdef __SIZEOF_INT128__
|
||||
typedef unsigned __int128 V;
|
||||
typedef unsigned long long int H;
|
||||
#else
|
||||
typedef unsigned long long int V;
|
||||
typedef unsigned int H;
|
||||
#endif
|
||||
|
||||
__attribute__((noinline, noclone)) void
|
||||
foo (V b, V c)
|
||||
{
|
||||
V a;
|
||||
b &= (H) -1;
|
||||
c &= (H) -1;
|
||||
a = b * c;
|
||||
if (a != 1)
|
||||
__builtin_abort ();
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
foo (1, 1);
|
||||
return 0;
|
||||
}
|
53
gcc/testsuite/gcc.dg/tree-ssa/vrp96.c
Normal file
53
gcc/testsuite/gcc.dg/tree-ssa/vrp96.c
Normal file
@ -0,0 +1,53 @@
|
||||
/* PR tree-optimization/65170 */
|
||||
/* { dg-do compile { target int128 } } */
|
||||
/* { dg-options "-O2 -fdump-tree-vrp1" } */
|
||||
|
||||
typedef unsigned __int128 T;
|
||||
extern void link_error (void);
|
||||
extern void required_check (void);
|
||||
|
||||
T
|
||||
foo (T b, T c)
|
||||
{
|
||||
T a;
|
||||
b &= 0xffffffffffffffffULL;
|
||||
c &= 0xffffffffffffffffULL;
|
||||
if (b < 7 || c < 7)
|
||||
return 0;
|
||||
a = b * c;
|
||||
if (a < 49 || a > (((T) 0xfffffffffffffffeULL << 64) | 1))
|
||||
link_error ();
|
||||
return a;
|
||||
}
|
||||
|
||||
T
|
||||
bar (T b, T c)
|
||||
{
|
||||
T a;
|
||||
b &= 0xffffffffffffffffULL;
|
||||
c &= 0xffffffffffffffffULL;
|
||||
if (b < 7 || c < 7)
|
||||
return 0;
|
||||
a = b * c;
|
||||
if (a == 49)
|
||||
required_check ();
|
||||
return a;
|
||||
}
|
||||
|
||||
T
|
||||
baz (T b, T c)
|
||||
{
|
||||
T a;
|
||||
b &= 0xffffffffffffffffULL;
|
||||
c &= 0xffffffffffffffffULL;
|
||||
if (b < 7 || c < 7)
|
||||
return 0;
|
||||
a = b * c;
|
||||
if (a == (((T) 0xfffffffffffffffeULL << 64) | 1))
|
||||
required_check ();
|
||||
return a;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-not "link_error" "vrp1" } } */
|
||||
/* { dg-final { scan-tree-dump-times "required_check" 2 "vrp1" } } */
|
||||
/* { dg-final { cleanup-tree-dump "vrp1" } } */
|
@ -1309,6 +1309,11 @@ wi::mul_internal (HOST_WIDE_INT *val, const HOST_WIDE_INT *op1val,
|
||||
return 1;
|
||||
}
|
||||
umul_ppmm (val[1], val[0], op1.ulow (), op2.ulow ());
|
||||
if (val[1] < 0 && prec > HOST_BITS_PER_WIDE_INT * 2)
|
||||
{
|
||||
val[2] = 0;
|
||||
return 3;
|
||||
}
|
||||
return 1 + (val[1] != 0 || val[0] < 0);
|
||||
}
|
||||
/* Likewise if the output is a full single HWI, except that the
|
||||
|
@ -1,4 +1,4 @@
|
||||
2015-02-20 Jakub Jelinek <jakub@redhat.com>
|
||||
2015-02-23 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR bootstrap/63888
|
||||
* asan/asan_globals.cc (RegisterGlobal): Disable detect_odr_violation
|
||||
|
Loading…
Reference in New Issue
Block a user