loadpre6.c
来自「用于进行gcc测试」· C语言 代码 · 共 78 行
C
78 行
/* { dg-do compile } */ /* { dg-options "-O2 -fdump-tree-pre-stats" } */#include <stddef.h>union tree_node;typedef union tree_node *tree;struct tree_common{ tree chain;};struct tree_list{ struct tree_common common; tree value;};union tree_node{ struct tree_common common; struct tree_list list;};extern void abort (void) __attribute__((noreturn));void __attribute__((noinline))foo (void){ abort ();}/* There are some reloaded loads of *cell, and cell->common.chain on various branches. */void __attribute__((noinline))remove_useless_vars (tree *unexpanded_var_list, int dump_file){ tree var, *cell; int c = 0; for (cell = unexpanded_var_list; *cell; ) { var = (*cell)->list.value; if (var) { if (dump_file) foo (); *cell = ((*cell)->common.chain); continue; } cell = &((*cell)->common.chain); }}extern void *malloc (__SIZE_TYPE__) __attribute__ ((malloc));intmain (void){ int i; tree unexpanded_var_list, last = (tree) 0; for (i = 0; i < 2; i++) { unexpanded_var_list = malloc (sizeof (struct tree_list)); unexpanded_var_list->list.value = (tree) (ptrdiff_t) (i & 1); unexpanded_var_list->common.chain = last; last = unexpanded_var_list; } remove_useless_vars (&unexpanded_var_list, 0); return 0;}/* { dg-final { scan-tree-dump-times "Eliminated: 2" 1 "pre" } } *//* { dg-final { cleanup-tree-dump "pre" } } */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?