123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- /* Flags on basic blocks and edges.
- Copyright (C) 2012-2019 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:
- */
|