optabs.c (expand_vec_cond_expr): Always get sign from type.
authorIlya Enkovich <enkovich.gnu@gmail.com>
Mon, 9 Nov 2015 15:11:02 +0000 (15:11 +0000)
committerIlya Enkovich <ienkovich@gcc.gnu.org>
Mon, 9 Nov 2015 15:11:02 +0000 (15:11 +0000)
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
gcc/optabs.c
gcc/tree.c

index e7d7c4bc37f3f8ec911e92226994c44e1cc41aa8..9ee6c72d7118e79ecaf70c95d53f2a8e8fc52257 100644 (file)
@@ -1,3 +1,9 @@
+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>
 
        PR tree-optimization/68248
index fdcdc6a0735e7eb9b63c9e9c7c34e052e1acc407..44971ad827fe5851f63469fb6b4638139f0a65f0 100644 (file)
@@ -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)
index ff414f7a62dc810b37c53da4a07b55bc971c28d7..50e1db019d37788e3a61b97438d6dc2fa563312c 100644 (file)
@@ -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;