diff gcc/cfg-flags.def @ 16:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 84e7813d76e9
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/cfg-flags.def	Fri Oct 27 22:46:09 2017 +0900
@@ -0,0 +1,191 @@
+/* Flags on basic blocks and edges.
+   Copyright (C) 2012-2017 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* This file defines flags that may appear on basic blocks or on
+   edges.  Source files define DEF_BASIC_BLOCK_FLAG or DEF_EDGE_FLAG
+   appropriately before including this file.  */
+
+#if !defined(DEF_BASIC_BLOCK_FLAG) && !defined(DEF_EDGE_FLAG)
+#error "You must define DEF_BASIC_BLOCK_FLAG or DEF_EDGE_FLAG"
+#endif
+
+#ifdef DEF_BASIC_BLOCK_FLAG
+
+/* Masks for basic_block.flags.
+
+   The format of this file is: DEF_BASIC_BLOCK_FLAG(NAME, IDX).
+   NAME is the name of the basic block flag.  A flag BB_#NAME will be
+   created and the name is used in dump_edge_info.
+   IDX is a sequence number that is used to determine the value
+   of the flag, which is 1 << IDX).
+
+   BB_HOT_PARTITION and BB_COLD_PARTITION should be preserved throughout
+   the compilation, so they are never cleared.
+
+   All other flags may be cleared by clear_bb_flags().  It is generally
+   a bad idea to rely on any flags being up-to-date.  */
+
+/* Only set on blocks that have just been created by create_bb.  */
+DEF_BASIC_BLOCK_FLAG(NEW, 0)
+
+/* Set by find_unreachable_blocks.  Do not rely on this being set in any
+   pass.  */
+DEF_BASIC_BLOCK_FLAG(REACHABLE, 1)
+
+/* Set for blocks in an irreducible loop by loop analysis.  */
+DEF_BASIC_BLOCK_FLAG(IRREDUCIBLE_LOOP, 2)
+
+/* Set on blocks that may actually not be single-entry single-exit block.  */
+DEF_BASIC_BLOCK_FLAG(SUPERBLOCK, 3)
+
+/* Set on basic blocks that the scheduler should not touch.  This is used
+   by SMS to prevent other schedulers from messing with the loop schedule.  */
+DEF_BASIC_BLOCK_FLAG(DISABLE_SCHEDULE, 4)
+
+/* Set on blocks that should be put in a hot section.  */
+DEF_BASIC_BLOCK_FLAG(HOT_PARTITION, 5)
+
+/* Set on blocks that should be put in a cold section.  */
+DEF_BASIC_BLOCK_FLAG(COLD_PARTITION, 6)
+
+/* Set on block that was duplicated.  */
+DEF_BASIC_BLOCK_FLAG(DUPLICATED, 7)
+
+/* Set if the label at the top of this block is the target of a non-local goto.  */
+DEF_BASIC_BLOCK_FLAG(NON_LOCAL_GOTO_TARGET, 8)
+
+/* Set on blocks that are in RTL format.  */
+DEF_BASIC_BLOCK_FLAG(RTL, 9) 
+
+/* Set on blocks that are forwarder blocks.
+   Only used in cfgcleanup.c.  */
+DEF_BASIC_BLOCK_FLAG(FORWARDER_BLOCK, 10)
+
+/* Set on blocks that cannot be threaded through.
+   Only used for jump threading.  */
+DEF_BASIC_BLOCK_FLAG(NONTHREADABLE_BLOCK, 11)
+
+/* Set on blocks that were modified in some way.  This bit is set in
+   df_set_bb_dirty, but not cleared by df_analyze, so it can be used
+   to test whether a block has been modified prior to a df_analyze call.  */
+DEF_BASIC_BLOCK_FLAG(MODIFIED, 12)
+
+/* A general visited flag for passes to use.  */
+DEF_BASIC_BLOCK_FLAG(VISITED, 13)
+
+/* Set on blocks that are in a transaction.  This is calculated on
+   demand, and is available after calling compute_transaction_bits().  */
+DEF_BASIC_BLOCK_FLAG(IN_TRANSACTION, 14)
+
+#endif
+
+#ifdef DEF_EDGE_FLAG
+
+/* Masks for edge.flags.
+
+   The format of this file is: DEF_EDGE_FLAG(NAME, IDX, STRING).
+   NAME is the name of the edge flag.  A flag EDGE_#NAME will be
+   created and the name is used in dump_edge_info.
+   IDX is a sequence number that is used to determine the value
+   of the flag, which is 1 << IDX).  */
+
+/* 'Straight line' flow.  In GIMPLE and in cfglayout mode, all normal
+   edges are fallthru edges.  In cfgrtl mode, this flag really means
+   that control flow falls through to the next basic block in the line.  */
+DEF_EDGE_FLAG(FALLTHRU, 0)
+
+/* Strange flow, like a computed jump or exception handling.  Usually
+   this means that the edge cannot be split.  */
+DEF_EDGE_FLAG(ABNORMAL, 1)
+
+/* Edge out of a basic block that ends with a CALL_INSN with abnormal
+   exit, like an exception or a non-local goto.
+   ABNORMAL_CALL edges also have ABNORMAL set.
+   This flag is only used for the RTL CFG.  */
+DEF_EDGE_FLAG(ABNORMAL_CALL, 2)
+
+/* Exception edge.  Exception handling edges represent possible control
+   transfers from a trapping instruction to an exception handler.
+   EH edges also have ABNORMAL set for the RTL CFG.  */
+DEF_EDGE_FLAG(EH, 3)
+
+/* Never merge blocks via this edge.  This is used for exception handling,
+   to prevent merging away edges to the post-landing-pad basic block.
+   This flag is only used for the RTL CFG.  */
+DEF_EDGE_FLAG(PRESERVE, 4)
+
+/* Not a real edge.  This is used to connect parts of the CFG that do
+   not halt, such as infinite loops and noreturn functions, to the
+   EXIT_BLOCK, so that traversing of the reverse CFG is possible.  */
+DEF_EDGE_FLAG(FAKE, 5)
+
+/* A back edge, marked in a depth-first search of the CFG.  Back edges
+   are hints that this edge may be part of a loop in the CFG.  */
+DEF_EDGE_FLAG(DFS_BACK, 6)
+
+/* Edge in a part of the CFG that is an irreducible loop.  */
+DEF_EDGE_FLAG(IRREDUCIBLE_LOOP, 7)
+
+/* Edge taken when controlling predicate is nonzero.
+   This is only used for the GIMPLE CFG.  */
+DEF_EDGE_FLAG(TRUE_VALUE, 8)
+
+/* Edge taken when controlling predicate is zero.
+   This is only used for the GIMPLE CFG.  */
+DEF_EDGE_FLAG(FALSE_VALUE, 9)
+
+/* Edge is executable.  This is only used in GIMPLE SSA-CCP and VRP.
+   This is only used for the GIMPLE CFG.  */
+DEF_EDGE_FLAG(EXECUTABLE, 10)
+
+/* Edge crosses between hot and cold sections, when we do partitioning.
+   This flag is only used for the RTL CFG.  */
+DEF_EDGE_FLAG(CROSSING, 11)
+
+/* Edge from a sibcall CALL_INSN to exit.
+   SIBCALL edges also have ABNORMAL set.
+   This flag is only used for the RTL CFG.  */
+DEF_EDGE_FLAG(SIBCALL, 12)
+
+/* Candidate for straight line flow.  Only used in bb-reorder.c.
+   This flag is only used for the RTL CFG.  */
+DEF_EDGE_FLAG(CAN_FALLTHRU, 13)
+
+/* Exit of a loop.  This is only used in ifcvt.c.
+   This flag is only used for the RTL CFG.  */
+DEF_EDGE_FLAG(LOOP_EXIT, 14)
+
+/* Uninstrumented edge out of a GIMPLE_TRANSACTION statement.  */
+DEF_EDGE_FLAG(TM_UNINSTRUMENTED, 15)
+
+/* Abort (over) edge out of a GIMPLE_TRANSACTION statement.  */
+DEF_EDGE_FLAG(TM_ABORT, 16)
+
+/* An edge we should ignore.  It should be entirely local to
+   passes.  ie, it is never set on any edge upon the completion
+   of any pass.  */
+DEF_EDGE_FLAG(IGNORE, 17)
+
+#endif
+
+/*
+Local variables:
+mode:c
+End:
+*/