OSDN Git Service

PR tree-optimization/47155
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 3 Jan 2011 21:01:14 +0000 (21:01 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 3 Jan 2011 21:01:14 +0000 (21:01 +0000)
* tree-ssa-ccp.c (bit_value_binop_1): Use r1type instead of type
when computing uns.

* gcc.c-torture/execute/pr47155.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@168440 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/pr47155.c [new file with mode: 0644]
gcc/tree-ssa-ccp.c

index 62bd11e..20e8a8e 100644 (file)
@@ -1,5 +1,9 @@
 2011-01-03  Jakub Jelinek  <jakub@redhat.com>
 
+       PR tree-optimization/47155
+       * tree-ssa-ccp.c (bit_value_binop_1): Use r1type instead of type
+       when computing uns.
+
        PR rtl-optimization/47157
        * combine.c (try_combine): If undobuf.other_insn becomes
        (set (pc) (pc)) jump, call update_cfg_for_uncondjump on it
index 910fa08..40223f8 100644 (file)
@@ -1,5 +1,8 @@
 2011-01-03  Jakub Jelinek  <jakub@redhat.com>
 
+       PR tree-optimization/47155
+       * gcc.c-torture/execute/pr47155.c: New test.
+
        PR rtl-optimization/47157
        * gcc.c-torture/compile/pr47157.c: New test.
 
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr47155.c b/gcc/testsuite/gcc.c-torture/execute/pr47155.c
new file mode 100644 (file)
index 0000000..6210a2f
--- /dev/null
@@ -0,0 +1,14 @@
+/* PR tree-optimization/47155 */
+
+unsigned int a;
+static signed char b = -127;
+int c = 1;
+
+int
+main (void)
+{
+  a = b <= (unsigned char) (-6 * c);
+  if (!a)
+    __builtin_abort ();
+  return 0;
+}
index 29aa55c..b2494d7 100644 (file)
@@ -1764,8 +1764,8 @@ bit_value_binop_1 (enum tree_code code, tree type,
                   tree r1type, double_int r1val, double_int r1mask,
                   tree r2type, double_int r2val, double_int r2mask)
 {
-  bool uns = (TREE_CODE (type) == INTEGER_TYPE
-             && TYPE_IS_SIZETYPE (type) ? 0 : TYPE_UNSIGNED (type));
+  bool uns = (TREE_CODE (r1type) == INTEGER_TYPE
+             && TYPE_IS_SIZETYPE (r1type) ? 0 : TYPE_UNSIGNED (r1type));
   /* Assume we'll get a constant result.  Use an initial varying value,
      we fall back to varying in the end if necessary.  */
   *mask = double_int_minus_one;