Tighten tree-ssa-ccp.c:get_value_for_expr condition
Richard Sandiford
richard.sandiford@linaro.org
Wed Sep 20 12:12:00 GMT 2017
bit_value_unop and bit_value_binop require constant values
to be INTEGER_CSTs:
gcc_assert ((rval.lattice_val == CONSTANT
&& TREE_CODE (rval.value) == INTEGER_CST)
|| wi::sext (rval.mask, TYPE_PRECISION (TREE_TYPE (rhs))) == -1);
However, when deciding whether to record a constant value,
the for_bits_p handling in get_value_for_expr used a negative
test for ADDR_EXPR:
else if (is_gimple_min_invariant (expr)
&& (!for_bits_p || TREE_CODE (expr) != ADDR_EXPR))
This patch uses a positive test for INTEGER_CST instead.
Existing tests showed the need for this once polynomial constants
are added.
Tested on aarch64-linux-gnu, x86_64-linux-gnu and powerpc64le-linus-gnu.
OK to install?
Richard
2017-09-20 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* tree-ssa-ccp.c (get_value_for_expr): Use a positive test for
INTEGER_CST rather than a negative test for ADDR_EXPR.
Index: gcc/tree-ssa-ccp.c
===================================================================
--- gcc/tree-ssa-ccp.c 2017-08-10 14:36:07.842479033 +0100
+++ gcc/tree-ssa-ccp.c 2017-09-20 13:10:31.466004578 +0100
@@ -617,7 +617,7 @@ get_value_for_expr (tree expr, bool for_
}
}
else if (is_gimple_min_invariant (expr)
- && (!for_bits_p || TREE_CODE (expr) != ADDR_EXPR))
+ && (!for_bits_p || TREE_CODE (expr) == INTEGER_CST))
{
val.lattice_val = CONSTANT;
val.value = expr;
More information about the Gcc-patches
mailing list