mirror of git://gcc.gnu.org/git/gcc.git
re PR tree-optimization/65418 (vim miscompilation)
PR tree-optimization/65418 * tree-ssa-reassoc.c (extract_bit_test_mask): If there are casts in the first PLUS_EXPR operand, ensure tbias and *totallowp are in the inner type. * gcc.c-torture/execute/pr65418-1.c: New test. * gcc.c-torture/execute/pr65418-2.c: New test. From-SVN: r221434
This commit is contained in:
parent
a4b55f2a30
commit
c2f41ffd24
|
|
@ -1,5 +1,10 @@
|
|||
2015-03-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/65418
|
||||
* tree-ssa-reassoc.c (extract_bit_test_mask): If there
|
||||
are casts in the first PLUS_EXPR operand, ensure tbias and
|
||||
*totallowp are in the inner type.
|
||||
|
||||
PR rtl-optimization/65401
|
||||
* combine.c (rtx_equal_for_field_assignment_p): Add widen_x
|
||||
argument. If true, adjust_address_nv of x with big-endian
|
||||
|
|
|
|||
|
|
@ -1,5 +1,9 @@
|
|||
2015-03-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/65418
|
||||
* gcc.c-torture/execute/pr65418-1.c: New test.
|
||||
* gcc.c-torture/execute/pr65418-2.c: New test.
|
||||
|
||||
PR rtl-optimization/65401
|
||||
* gcc.c-torture/execute/pr65401.c: New test.
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
/* PR tree-optimization/65418 */
|
||||
|
||||
__attribute__((noinline, noclone)) int
|
||||
foo (int x)
|
||||
{
|
||||
if (x == -216 || x == -132 || x == -218 || x == -146)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
volatile int i;
|
||||
for (i = -230; i < -120; i++)
|
||||
if (foo (i) != (i == -216 || i == -132 || i == -218 || i == -146))
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
/* PR tree-optimization/65418 */
|
||||
|
||||
__attribute__((noinline, noclone)) int
|
||||
foo (int x)
|
||||
{
|
||||
if (x == -216 || x == -211 || x == -218 || x == -205 || x == -223)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
volatile int i;
|
||||
for (i = -230; i < -200; i++)
|
||||
if (foo (i) != (i == -216 || i == -211 || i == -218 || i == -205 || i == -223))
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -2439,26 +2439,25 @@ extract_bit_test_mask (tree exp, int prec, tree totallow, tree low, tree high,
|
|||
&& TREE_CODE (exp) == PLUS_EXPR
|
||||
&& TREE_CODE (TREE_OPERAND (exp, 1)) == INTEGER_CST)
|
||||
{
|
||||
tree ret = TREE_OPERAND (exp, 0);
|
||||
STRIP_NOPS (ret);
|
||||
widest_int bias
|
||||
= wi::neg (wi::sext (wi::to_widest (TREE_OPERAND (exp, 1)),
|
||||
TYPE_PRECISION (TREE_TYPE (low))));
|
||||
tree tbias = wide_int_to_tree (TREE_TYPE (low), bias);
|
||||
tree tbias = wide_int_to_tree (TREE_TYPE (ret), bias);
|
||||
if (totallowp)
|
||||
{
|
||||
*totallowp = tbias;
|
||||
exp = TREE_OPERAND (exp, 0);
|
||||
STRIP_NOPS (exp);
|
||||
return exp;
|
||||
return ret;
|
||||
}
|
||||
else if (!tree_int_cst_lt (totallow, tbias))
|
||||
return NULL_TREE;
|
||||
bias = wi::to_widest (tbias);
|
||||
bias -= wi::to_widest (totallow);
|
||||
if (wi::ges_p (bias, 0) && wi::lts_p (bias, prec - max))
|
||||
{
|
||||
*mask = wi::lshift (*mask, bias);
|
||||
exp = TREE_OPERAND (exp, 0);
|
||||
STRIP_NOPS (exp);
|
||||
return exp;
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue