tree-ssa-threadupdate.c (redirect_edges): Call create_edge_and_update_destination_phi...
[official-gcc.git] / gcc / testsuite / gcc.dg / tree-ssa / ssa-dom-thread-3.c
blobd851bf23fe8ed5c7aba205a94047b3925067b6c8
1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fdump-tree-dom1-details" } */
3 extern void abort (void) __attribute__ ((__noreturn__));
4 union tree_node;
5 typedef union tree_node *tree;
6 enum tree_code
8 VAR_DECL,
9 SSA_NAME,
10 MAX_TREE_CODES
12 extern unsigned char tree_contains_struct[MAX_TREE_CODES][64];
13 struct tree_base
15 enum tree_code code:16;
17 enum tree_node_structure_enum
19 TS_DECL_COMMON
21 struct tree_ssa_name
23 tree var;
25 union tree_node
27 struct tree_base base;
28 struct tree_ssa_name ssa_name;
30 long
31 expand_one_var (tree var, unsigned char toplevel, unsigned char really_expand)
33 tree origvar = var;
34 var = var->ssa_name.var;
35 if (((enum tree_code) (origvar)->base.code) == SSA_NAME
36 && !((var->base.code != VAR_DECL)))
37 abort ();
38 if ((var->base.code) != VAR_DECL && ((origvar)->base.code) != SSA_NAME)
40 else if (tree_contains_struct[(var->base.code)][(TS_DECL_COMMON)] != 1)
41 abort ();
43 /* We should thread the jump, through an intermediate block. */
44 /* { dg-final { scan-tree-dump-times "Threaded" 1 "dom1"} } */
45 /* { dg-final { scan-tree-dump-times "one or more intermediate" 1 "dom1"} } */
46 /* { dg-final { cleanup-tree-dump "dom1" } } */