SOURCES: gcc-pr23509.patch (NEW) - PR23509 patch: fixes wrong code...
qrczak
qrczak at pld-linux.org
Thu Sep 1 15:54:10 CEST 2005
Author: qrczak Date: Thu Sep 1 13:54:10 2005 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- PR23509 patch: fixes wrong code generated and internal compiler errors.
---- Files affected:
SOURCES:
gcc-pr23509.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/gcc-pr23509.patch
diff -u /dev/null SOURCES/gcc-pr23509.patch:1.1
--- /dev/null Thu Sep 1 15:54:10 2005
+++ SOURCES/gcc-pr23509.patch Thu Sep 1 15:54:04 2005
@@ -0,0 +1,99 @@
+Index: tree-cfg.c
+===================================================================
+RCS file: /cvs/gcc/gcc/gcc/tree-cfg.c,v
+retrieving revision 2.217
+diff -c -3 -p -r2.217 tree-cfg.c
+*** gcc/gcc/tree-cfg.c 24 Aug 2005 07:56:54 -0000 2.217
+--- gcc/gcc/tree-cfg.c 27 Aug 2005 18:18:40 -0000
+*************** replace_uses_by (tree name, tree val)
+*** 1237,1244 ****
+ FOR_EACH_IMM_USE_SAFE (use, imm_iter, name)
+ {
+ stmt = USE_STMT (use);
+!
+! SET_USE (use, val);
+
+ if (TREE_CODE (stmt) == PHI_NODE)
+ {
+--- 1237,1243 ----
+ FOR_EACH_IMM_USE_SAFE (use, imm_iter, name)
+ {
+ stmt = USE_STMT (use);
+! replace_exp (use, val);
+
+ if (TREE_CODE (stmt) == PHI_NODE)
+ {
+Index: tree-ssa-loop-ivopts.c
+===================================================================
+RCS file: /cvs/gcc/gcc/gcc/tree-ssa-loop-ivopts.c,v
+retrieving revision 2.87
+diff -c -3 -p -r2.87 tree-ssa-loop-ivopts.c
+*** gcc/gcc/tree-ssa-loop-ivopts.c 13 Aug 2005 17:28:40 -0000 2.87
+--- gcc/gcc/tree-ssa-loop-ivopts.c 27 Aug 2005 18:18:44 -0000
+*************** get_ref_tag (tree ref)
+*** 5448,5456 ****
+ return NULL_TREE;
+
+ if (TREE_CODE (var) == INDIRECT_REF)
+- var = TREE_OPERAND (var, 0);
+- if (TREE_CODE (var) == SSA_NAME)
+ {
+ if (SSA_NAME_PTR_INFO (var))
+ {
+ tag = SSA_NAME_PTR_INFO (var)->name_mem_tag;
+--- 5448,5460 ----
+ return NULL_TREE;
+
+ if (TREE_CODE (var) == INDIRECT_REF)
+ {
++ /* In case the base is a dereference of a pointer, first check its name
++ mem tag, and if it does not have one, use type mem tag. */
++ var = TREE_OPERAND (var, 0);
++ if (TREE_CODE (var) != SSA_NAME)
++ return NULL_TREE;
++
+ if (SSA_NAME_PTR_INFO (var))
+ {
+ tag = SSA_NAME_PTR_INFO (var)->name_mem_tag;
+*************** get_ref_tag (tree ref)
+*** 5459,5476 ****
+ }
+
+ var = SSA_NAME_VAR (var);
+ }
+!
+! if (DECL_P (var))
+! {
+ tag = var_ann (var)->type_mem_tag;
+ if (tag)
+ return tag;
+
+ return var;
+ }
+-
+- return NULL_TREE;
+ }
+
+ /* Copies the reference information from OLD_REF to NEW_REF. */
+--- 5463,5483 ----
+ }
+
+ var = SSA_NAME_VAR (var);
++ tag = var_ann (var)->type_mem_tag;
++ gcc_assert (tag != NULL_TREE);
++ return tag;
+ }
+! else
+! {
+! if (!DECL_P (var))
+! return NULL_TREE;
+!
+ tag = var_ann (var)->type_mem_tag;
+ if (tag)
+ return tag;
+
+ return var;
+ }
+ }
+
+ /* Copies the reference information from OLD_REF to NEW_REF. */
================================================================
More information about the pld-cvs-commit
mailing list