Commit 61ba7329 by Bill Schmidt Committed by William Schmidt

re PR tree-optimization/60930 (Wrong folding of - ((unsigned long long) a *…

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
parent 2b332829
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))
{
......
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
......
/* { 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;
}
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