aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarsha Jagasia <harsha.jagasia@amd.com>2008-11-03 16:43:02 +0000
committerSebastian Pop <spop@gcc.gnu.org>2008-11-03 16:43:02 +0000
commit669540aa7297bf95ccbf772890c14e726ab1f2ea (patch)
tree440c21c8ac130fa7e70f68cf8d3d71d50fd7e22b
parent2b8aee8e6df674cf70cab38d2a7e182afabb0f2f (diff)
downloadgcc-669540aa7297bf95ccbf772890c14e726ab1f2ea.zip
gcc-669540aa7297bf95ccbf772890c14e726ab1f2ea.tar.gz
gcc-669540aa7297bf95ccbf772890c14e726ab1f2ea.tar.bz2
re PR tree-optimization/37684 ([graphite] basic block containing VDEF of a scalar does not dominate basic block containing VUSE of the same scalar)
2008-11-03 Harsha Jagasia <harsha.jagasia@amd.com> PR tree-optimization/37684 * gcc.dg/graphite/pr37684.c: New. * graphite.c (exclude_component_ref): New. (is_simple_operand): Call exclude_component_ref. From-SVN: r141551
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/graphite.c29
-rw-r--r--gcc/testsuite/gcc.dg/graphite/pr37684.c65
3 files changed, 100 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4ecb1e1..c3b7446 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2008-11-03 Harsha Jagasia <harsha.jagasia@amd.com>
+
+ PR tree-optimization/37684
+ * gcc.dg/graphite/pr37684.c: New.
+ * graphite.c (exclude_component_ref): New.
+ (is_simple_operand): Call exclude_component_ref.
+
2008-11-03 Sebastian Pop <sebastian.pop@amd.com>
PR tree-optimization/36908
diff --git a/gcc/graphite.c b/gcc/graphite.c
index a14dd14..90d8230 100644
--- a/gcc/graphite.c
+++ b/gcc/graphite.c
@@ -864,6 +864,33 @@ loop_affine_expr (basic_block scop_entry, struct loop *loop, tree expr)
|| evolution_function_is_affine_multivariate_p (scev, n));
}
+/* Return false if the tree_code of the operand OP or any of its operands
+ is component_ref. */
+
+static bool
+exclude_component_ref (tree op)
+{
+ int i;
+ int len;
+
+ if (op)
+ {
+ if (TREE_CODE (op) == COMPONENT_REF)
+ return false;
+ else
+ {
+ len = TREE_OPERAND_LENGTH (op);
+ for (i = 0; i < len; ++i)
+ {
+ if (!exclude_component_ref (TREE_OPERAND (op, i)))
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
/* Return true if the operand OP is simple. */
static bool
@@ -879,7 +906,7 @@ is_simple_operand (loop_p loop, gimple stmt, tree op)
&& !stmt_simple_memref_p (loop, stmt, op)))
return false;
- return true;
+ return exclude_component_ref (op);
}
/* Return true only when STMT is simple enough for being handled by
diff --git a/gcc/testsuite/gcc.dg/graphite/pr37684.c b/gcc/testsuite/gcc.dg/graphite/pr37684.c
new file mode 100644
index 0000000..35c3291
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/pr37684.c
@@ -0,0 +1,65 @@
+/* { dg-options "-O2 -floop-block -fdump-tree-graphite-all" } */
+
+typedef struct _IO_FILE FILE;
+struct _IO_marker {
+};
+enum __codecvt_result
+{
+ __codecvt_noconv
+};
+struct _IO_FILE {
+};
+extern struct _IO_FILE *stderr;
+
+typedef
+ struct {
+ unsigned int avail_in;
+ unsigned int avail_out;
+ void *state;
+ void *(*bzalloc)(void *,int,int);
+ void *opaque;
+ }
+ bz_stream;
+extern int BZ2_bzCompressInit (
+ bz_stream* strm,
+ int blockSize100k,
+ int verbosity,
+ int workFactor
+ );
+typedef unsigned char Bool;
+typedef int Int32;
+typedef unsigned int UInt32;
+
+typedef
+ struct {
+ Int32 mode;
+ Int32 state;
+ UInt32* arr1;
+ UInt32* arr2;
+ UInt32* ftab;
+ Int32 nblock;
+ Int32 nblockMAX;
+ Bool inUse[256];
+ Int32 blockNo;
+ }
+ EState;
+
+void prepare_new_block ( EState* s )
+{
+ Int32 i;
+ for (i = 0; i < 256; i++) s->inUse[i] = ((Bool)0);
+ s->blockNo++;
+}
+
+int BZ2_bzCompressInit
+ ( bz_stream* strm,
+ int blockSize100k,
+ int verbosity,
+ int workFactor )
+{
+ EState* s;
+ s = (strm->bzalloc)(strm->opaque,(sizeof(EState)),1);
+ if (s->arr1 == ((void *)0) || s->arr2 == ((void *)0) || s->ftab == ((void *)0)) {
+ }
+ prepare_new_block ( s );
+}