Hi,
On Mon, 15 Feb 2016, Jakub Jelinek wrote:
> + /* If op is default def SSA_NAME, there is no place to insert the
> + new comparison. Give up, unless we can use OP itself as the
> + range test. */
> + if (op && SSA_NAME_IS_DEFAULT_DEF (op))
> + {
> + if (op == range->exp
> + && ((TYPE_PRECISION (optype) == 1 && TYPE_UNSIGNED (optype))
> + || TREE_CODE (optype) == BOOLEAN_TYPE)
> + && (op == tem
> + || (TREE_CODE (tem) == EQ_EXPR
> + && TREE_OPERAND (tem, 0) == op
> + && integer_onep (TREE_OPERAND (tem, 1))))
> + && opcode != BIT_IOR_EXPR
> + && (opcode != ERROR_MARK || oe->rank != BIT_IOR_EXPR))
Perhaps just give up always, instead of this complicated (and hence
fragile) hackery? Are you 100% sure you catched everything, are there
testcases for each part of the condition (I miss at least one proving
that making the condition true is correct)?
Ciao,
Michael.