re PR tree-optimization/42705 (verify_flow_info failed with -O)
authorRichard Guenther <rguenther@suse.de>
Wed, 13 Jan 2010 15:04:38 +0000 (15:04 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 13 Jan 2010 15:04:38 +0000 (15:04 +0000)
2010-01-13  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/42705
* tree-ssa-reassoc.c (build_and_add_sum): Insert stmts after
labels.

* gcc.c-torture/compile/pr42705.c: New testcase.

From-SVN: r155861

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr42705.c [new file with mode: 0644]
gcc/tree-ssa-reassoc.c

index 1d66583818e2077b2e789ae600e8cd65e8da86a2..d9105623abbfbcd1c5afdfe70eed6f86d9fa5c3a 100644 (file)
@@ -1,3 +1,9 @@
+2010-01-13  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/42705
+       * tree-ssa-reassoc.c (build_and_add_sum): Insert stmts after
+       labels.
+
 2010-01-13  Richard Guenther  <rguenther@suse.de>
 
        PR middle-end/42716
index 9d264b6b44de5fdf75c8d8311a208f9d8d38874b..9f3ff54d5e82b607dc2230186a9cd2d1d5699399 100644 (file)
@@ -1,3 +1,8 @@
+2010-01-13  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/42705
+       * gcc.c-torture/compile/pr42705.c: New testcase.
+
 2010-01-13  Jie Zhang  <jie.zhang@analog.com>
 
        * gcc.target/bfin/l2.c: New test.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr42705.c b/gcc/testsuite/gcc.c-torture/compile/pr42705.c
new file mode 100644 (file)
index 0000000..3d7b22d
--- /dev/null
@@ -0,0 +1,58 @@
+typedef int GLint;
+typedef unsigned char GLubyte;
+typedef unsigned int uint32_t;
+struct radeon_bo {
+    void *ptr;
+    uint32_t flags;
+};
+struct radeon_renderbuffer {
+    struct radeon_bo *bo;
+    unsigned int cpp;
+    int has_surface;
+};
+static inline
+GLint r600_1d_tile_helper(const struct radeon_renderbuffer * rrb,
+                         GLint x, GLint y, GLint is_depth, GLint is_stencil)
+{
+  GLint element_bytes = rrb->cpp;
+  GLint num_samples = 1;
+  GLint tile_width = 8;
+  GLint tile_height = 8;
+  GLint tile_thickness = 1;
+  GLint tile_bytes;
+  GLint tiles_per_row;
+  GLint slice_offset;
+  GLint tile_row_index;
+  GLint tile_column_index;
+  GLint tile_offset;
+  GLint pixel_number = 0;
+  GLint element_offset;
+  GLint offset = 0;
+  tile_bytes = tile_width * tile_height * tile_thickness
+      * element_bytes * num_samples;
+  tile_column_index = x / tile_width;
+  tile_offset = ((tile_row_index * tiles_per_row)
+                + tile_column_index) * tile_bytes;
+  if (is_depth) {
+  }
+  else {
+      GLint sample_offset;
+      switch (element_bytes) {
+         case 1:       pixel_number |= ((x >> 0) & 1) << 0;
+      }
+      element_offset = sample_offset + (pixel_number * element_bytes);
+  }
+  offset = slice_offset + tile_offset + element_offset;
+  return offset;
+}
+GLubyte *r600_ptr_color(const struct radeon_renderbuffer * rrb,
+                       GLint x, GLint y)
+{
+  GLubyte *ptr = rrb->bo->ptr;
+  uint32_t mask = 1 | 2;
+  GLint offset;
+  if (rrb->has_surface || !(rrb->bo->flags & mask)) {
+      offset = r600_1d_tile_helper(rrb, x, y, 0, 0);
+  }
+  return &ptr[offset];
+}
index f428008a18e77ad3bdec87c7e77d0285461683e0..5f7c6b721d8e1af5f50a59ed5ad16b1658d9e731 100644 (file)
@@ -845,7 +845,7 @@ build_and_add_sum (tree tmpvar, tree op1, tree op2, enum tree_code opcode)
   if ((!op1def || gimple_nop_p (op1def))
       && (!op2def || gimple_nop_p (op2def)))
     {
-      gsi = gsi_start_bb (single_succ (ENTRY_BLOCK_PTR));
+      gsi = gsi_after_labels (single_succ (ENTRY_BLOCK_PTR));
       gsi_insert_before (&gsi, sum, GSI_NEW_STMT);
     }
   else if ((!op1def || gimple_nop_p (op1def))
@@ -854,7 +854,7 @@ build_and_add_sum (tree tmpvar, tree op1, tree op2, enum tree_code opcode)
     {
       if (gimple_code (op2def) == GIMPLE_PHI)
        {
-         gsi = gsi_start_bb (gimple_bb (op2def));
+         gsi = gsi_after_labels (gimple_bb (op2def));
          gsi_insert_before (&gsi, sum, GSI_NEW_STMT);
        }
       else
@@ -879,7 +879,7 @@ build_and_add_sum (tree tmpvar, tree op1, tree op2, enum tree_code opcode)
     {
       if (gimple_code (op1def) == GIMPLE_PHI)
        {
-         gsi = gsi_start_bb (gimple_bb (op1def));
+         gsi = gsi_after_labels (gimple_bb (op1def));
          gsi_insert_before (&gsi, sum, GSI_NEW_STMT);
        }
       else