Commit 0e657ecb by Ilya Enkovich Committed by Ilya Enkovich

optabs.c (expand_vec_cond_expr): Always get sign from type.

gcc/

	* optabs.c (expand_vec_cond_expr): Always get sign from type.
	* tree.c (wide_int_to_tree): Support negative values for boolean.
	(build_nonstandard_boolean_type): Use signed type for booleans.

From-SVN: r230022
parent 0b3ecf75
2015-11-09 Ilya Enkovich <enkovich.gnu@gmail.com>
* optabs.c (expand_vec_cond_expr): Always get sign from type.
* tree.c (wide_int_to_tree): Support negative values for boolean.
(build_nonstandard_boolean_type): Use signed type for booleans.
2015-11-09 Richard Biener <rguenther@suse.de> 2015-11-09 Richard Biener <rguenther@suse.de>
PR tree-optimization/68248 PR tree-optimization/68248
...@@ -5365,7 +5365,6 @@ expand_vec_cond_expr (tree vec_cond_type, tree op0, tree op1, tree op2, ...@@ -5365,7 +5365,6 @@ expand_vec_cond_expr (tree vec_cond_type, tree op0, tree op1, tree op2,
op0a = TREE_OPERAND (op0, 0); op0a = TREE_OPERAND (op0, 0);
op0b = TREE_OPERAND (op0, 1); op0b = TREE_OPERAND (op0, 1);
tcode = TREE_CODE (op0); tcode = TREE_CODE (op0);
unsignedp = TYPE_UNSIGNED (TREE_TYPE (op0a));
} }
else else
{ {
...@@ -5374,9 +5373,9 @@ expand_vec_cond_expr (tree vec_cond_type, tree op0, tree op1, tree op2, ...@@ -5374,9 +5373,9 @@ expand_vec_cond_expr (tree vec_cond_type, tree op0, tree op1, tree op2,
op0a = op0; op0a = op0;
op0b = build_zero_cst (TREE_TYPE (op0)); op0b = build_zero_cst (TREE_TYPE (op0));
tcode = LT_EXPR; tcode = LT_EXPR;
unsignedp = false;
} }
cmp_op_mode = TYPE_MODE (TREE_TYPE (op0a)); cmp_op_mode = TYPE_MODE (TREE_TYPE (op0a));
unsignedp = TYPE_UNSIGNED (TREE_TYPE (op0a));
gcc_assert (GET_MODE_SIZE (mode) == GET_MODE_SIZE (cmp_op_mode) gcc_assert (GET_MODE_SIZE (mode) == GET_MODE_SIZE (cmp_op_mode)
......
...@@ -1439,7 +1439,7 @@ wide_int_to_tree (tree type, const wide_int_ref &pcst) ...@@ -1439,7 +1439,7 @@ wide_int_to_tree (tree type, const wide_int_ref &pcst)
case BOOLEAN_TYPE: case BOOLEAN_TYPE:
/* Cache false or true. */ /* Cache false or true. */
limit = 2; limit = 2;
if (hwi < 2) if (IN_RANGE (hwi, 0, 1))
ix = hwi; ix = hwi;
break; break;
...@@ -8072,7 +8072,7 @@ build_nonstandard_boolean_type (unsigned HOST_WIDE_INT precision) ...@@ -8072,7 +8072,7 @@ build_nonstandard_boolean_type (unsigned HOST_WIDE_INT precision)
type = make_node (BOOLEAN_TYPE); type = make_node (BOOLEAN_TYPE);
TYPE_PRECISION (type) = precision; TYPE_PRECISION (type) = precision;
fixup_unsigned_type (type); fixup_signed_type (type);
if (precision <= MAX_INT_CACHED_PREC) if (precision <= MAX_INT_CACHED_PREC)
nonstandard_boolean_type_cache[precision] = type; nonstandard_boolean_type_cache[precision] = type;
......
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