This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[tree-ssa] More optimization tests
- From: law at redhat dot com
- To: gcc-patches at gcc dot gnu dot org
- Date: Fri, 15 Aug 2003 10:04:58 -0600
- Subject: [tree-ssa] More optimization tests
- Reply-to: law at redhat dot com
It just never ends....
* gcc.dg/tree-ssa/20030814-6.c: New test.
* gcc.dg/tree-ssa/20030814-7.c: New test.
Index: 20030814-6.c
===================================================================
RCS file: 20030814-6.c
diff -N 20030814-6.c
*** /dev/null 1 Jan 1970 00:00:00 -0000
--- 20030814-6.c 15 Aug 2003 16:03:56 -0000
***************
*** 0 ****
--- 1,42 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O1 -fdump-tree-ssa" } */
+
+ union tree_node;
+ typedef union tree_node *tree;
+ enum tree_code
+ {
+ LAST_AND_UNUSED_TREE_CODE
+ };
+ extern const char tree_code_type[];
+ struct tree_common
+ {
+ enum tree_code code:8;
+ };
+ struct tree_type
+ {
+ double alias_set;
+ };
+ union tree_node
+ {
+ struct tree_common common;
+ struct tree_type type;
+ };
+ long
+ foo (t, set)
+ tree t;
+ double set;
+ {
+ if (tree_code_type[t->common.code] != 't')
+ abort ();
+
+ t->type.alias_set = set;
+
+ if (t->common.code == 42)
+ return 1;
+ else
+ return 0;
+ }
+ /* There should be precisely one load of common.code. If there is
+ more than one, then the dominator optimizations failed. */
+ /* { dg-final { scan-tree-dump-times "common.code" 1 "ssa"} } */
+
Index: 20030814-7.c
===================================================================
RCS file: 20030814-7.c
diff -N 20030814-7.c
*** /dev/null 1 Jan 1970 00:00:00 -0000
--- 20030814-7.c 15 Aug 2003 16:03:56 -0000
***************
*** 0 ****
--- 1,40 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O1 -fdump-tree-ssa" } */
+
+ struct rtx_def;
+ typedef struct rtx_def *rtx;
+ struct rtvec_def;
+ typedef struct rtvec_def *rtvec;
+ union tree_node;
+ typedef union tree_node *tree;
+ struct tree_common
+ {
+ int code;
+ };
+ union tree_node
+ {
+ struct tree_common common;
+ };
+ extern tree current_function_decl;
+ struct cgraph_rtl_info
+ {
+ _Bool pure_function;
+ };
+ struct cgraph_rtl_info *cgraph_rtl_info (tree);
+ void
+ mark_constant_function (void)
+ {
+ rtx insn;
+ int nonlocal_memory_referenced;
+
+ if (current_function_decl->common.code != 42)
+ abort ();
+
+ cgraph_rtl_info (current_function_decl)->pure_function = 1;
+ }
+
+ /* current_function_decl should be loaded once into a temporary
+ and the temporary used as the argument to cgraph_rtl_info.
+ This if we find current_function_decl used as an argument, then
+ we have failed. */
+ /* { dg-final { scan-tree-dump-times "\\(current_function_decl\\)" 0 "ssa"}
} */