diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-01-13 15:04:38 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-01-13 15:04:38 +0000 |
commit | eb4bdd4ddcc8a874a33304dcafdc2863dc3a3115 (patch) | |
tree | 30be63e8d337dc502ed3074c1eb4ba97d023b876 /gcc | |
parent | ad4cd2f17be659a4d0f70cb9b2ec6a6ebe0959fc (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr42705.c | 58 | ||||
-rw-r--r-- | gcc/tree-ssa-reassoc.c | 6 |
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 |