From 0e657ecb98b8413b41975ddfce8e240186720977 Mon Sep 17 00:00:00 2001 From: Ilya Enkovich Date: Mon, 9 Nov 2015 15:11:02 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/optabs.c | 3 +-- gcc/tree.c | 4 ++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e7d7c4bc37f..9ee6c72d711 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-11-09 Ilya Enkovich + + * 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 PR tree-optimization/68248 diff --git a/gcc/optabs.c b/gcc/optabs.c index fdcdc6a0735..44971ad827f 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -5365,7 +5365,6 @@ expand_vec_cond_expr (tree vec_cond_type, tree op0, tree op1, tree op2, op0a = TREE_OPERAND (op0, 0); op0b = TREE_OPERAND (op0, 1); tcode = TREE_CODE (op0); - unsignedp = TYPE_UNSIGNED (TREE_TYPE (op0a)); } else { @@ -5374,9 +5373,9 @@ expand_vec_cond_expr (tree vec_cond_type, tree op0, tree op1, tree op2, op0a = op0; op0b = build_zero_cst (TREE_TYPE (op0)); tcode = LT_EXPR; - unsignedp = false; } 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) diff --git a/gcc/tree.c b/gcc/tree.c index ff414f7a62d..50e1db019d3 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -1439,7 +1439,7 @@ wide_int_to_tree (tree type, const wide_int_ref &pcst) case BOOLEAN_TYPE: /* Cache false or true. */ limit = 2; - if (hwi < 2) + if (IN_RANGE (hwi, 0, 1)) ix = hwi; break; @@ -8072,7 +8072,7 @@ build_nonstandard_boolean_type (unsigned HOST_WIDE_INT precision) type = make_node (BOOLEAN_TYPE); TYPE_PRECISION (type) = precision; - fixup_unsigned_type (type); + fixup_signed_type (type); if (precision <= MAX_INT_CACHED_PREC) nonstandard_boolean_type_cache[precision] = type; -- 2.30.2