summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2010-01-13 15:04:38 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2010-01-13 15:04:38 +0000
commiteb4bdd4ddcc8a874a33304dcafdc2863dc3a3115 (patch)
tree30be63e8d337dc502ed3074c1eb4ba97d023b876 /gcc
parentad4cd2f17be659a4d0f70cb9b2ec6a6ebe0959fc (diff)
downloadgcc-eb4bdd4ddcc8a874a33304dcafdc2863dc3a3115.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@155861 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr42705.c58
-rw-r--r--gcc/tree-ssa-reassoc.c6
4 files changed, 72 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1d66583818e..d9105623abb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
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
* fold-const.c (fold_unary_loc): Fold INDIRECT_REFs.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9d264b6b44d..9f3ff54d5e8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 00000000000..3d7b22da833
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr42705.c
@@ -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];
+}
diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c
index f428008a18e..5f7c6b721d8 100644
--- a/gcc/tree-ssa-reassoc.c
+++ b/gcc/tree-ssa-reassoc.c
@@ -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