re PR tree-optimization/60930 (Wrong folding of - ((unsigned long long) a * (unsigned long long) (unsigned int)-1))
[gcc] 2014-04-25 Bill Schmidt <wschmidt@linux.vnet.ibm.com> PR tree-optimization/60930 * gimple-ssa-strength-reduction.c (create_mul_imm_cand): Reject creating a multiply candidate by folding two constant multiplicands when the result overflows. [gcc/testsuite] 2014-04-25 Bill Schmidt <wschmidt@linux.vnet.ibm.com> PR tree-optimization/60930 * gcc.dg/torture/pr60930.c: New test. From-SVN: r209805
This commit is contained in:
parent
2b33282907
commit
61ba732927
4 changed files with 44 additions and 7 deletions
|
@ -1,3 +1,10 @@
|
|||
2014-04-25 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
|
||||
|
||||
PR tree-optimization/60930
|
||||
* gimple-ssa-strength-reduction.c (create_mul_imm_cand): Reject
|
||||
creating a multiply candidate by folding two constant
|
||||
multiplicands when the result overflows.
|
||||
|
||||
2014-04-25 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/60960
|
||||
|
|
|
@ -1114,15 +1114,18 @@ create_mul_imm_cand (gimple gs, tree base_in, tree stride_in, bool speed)
|
|||
X = Y * c
|
||||
============================
|
||||
X = (B + i') * (S * c) */
|
||||
base = base_cand->base_expr;
|
||||
index = base_cand->index;
|
||||
temp = tree_to_double_int (base_cand->stride)
|
||||
* tree_to_double_int (stride_in);
|
||||
stride = double_int_to_tree (TREE_TYPE (stride_in), temp);
|
||||
ctype = base_cand->cand_type;
|
||||
if (has_single_use (base_in))
|
||||
savings = (base_cand->dead_savings
|
||||
+ stmt_cost (base_cand->cand_stmt, speed));
|
||||
if (double_int_fits_to_tree_p (TREE_TYPE (stride_in), temp))
|
||||
{
|
||||
base = base_cand->base_expr;
|
||||
index = base_cand->index;
|
||||
stride = double_int_to_tree (TREE_TYPE (stride_in), temp);
|
||||
ctype = base_cand->cand_type;
|
||||
if (has_single_use (base_in))
|
||||
savings = (base_cand->dead_savings
|
||||
+ stmt_cost (base_cand->cand_stmt, speed));
|
||||
}
|
||||
}
|
||||
else if (base_cand->kind == CAND_ADD && integer_onep (base_cand->stride))
|
||||
{
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2014-04-25 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
|
||||
|
||||
PR tree-optimization/60930
|
||||
* gcc.dg/torture/pr60930.c: New test.
|
||||
|
||||
2014-04-25 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/60960
|
||||
|
|
22
gcc/testsuite/gcc.dg/torture/pr60930.c
Normal file
22
gcc/testsuite/gcc.dg/torture/pr60930.c
Normal file
|
@ -0,0 +1,22 @@
|
|||
/* { dg-do run } */
|
||||
|
||||
int x = 1;
|
||||
|
||||
__attribute__((noinline, noclone)) void
|
||||
foo (unsigned long long t)
|
||||
{
|
||||
asm volatile ("" : : "r" (&t));
|
||||
if (t == 1)
|
||||
__builtin_abort ();
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
#if __SIZEOF_LONG_LONG__ >= 8
|
||||
unsigned long long t = 0xffffffffffffffffULL * (0xffffffffUL * x);
|
||||
if (t != 0xffffffff00000001ULL)
|
||||
foo (t);;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue