Go to the source code of this file.
|
static cl::opt< bool > | DisableColoring ("no-stack-coloring", cl::init(false), cl::Hidden, cl::desc("Disable stack coloring")) |
|
static cl::opt< bool > | ProtectFromEscapedAllocas ("protect-from-escaped-allocas", cl::init(false), cl::Hidden, cl::desc("Do not optimize lifetime zones that " "are broken")) |
| The user may write code that uses allocas outside of the declared lifetime zone.
|
|
static cl::opt< bool > | LifetimeStartOnFirstUse ("stackcoloring-lifetime-start-on-first-use", cl::init(true), cl::Hidden, cl::desc("Treat stack lifetimes as starting on first use, not on START marker.")) |
| Enable enhanced dataflow scheme for lifetime analysis (treat first use of stack slot as start of slot lifetime, as opposed to looking for LIFETIME_START marker).
|
|
| DEBUG_TYPE |
|
Merge disjoint stack | slots |
|
Merge disjoint stack | false |
|
◆ DEBUG_TYPE
#define DEBUG_TYPE "stack-coloring" |
◆ getStartOrEndSlot()
◆ INITIALIZE_PASS_BEGIN()
INITIALIZE_PASS_BEGIN |
( |
StackColoring |
, |
|
|
DEBUG_TYPE |
, |
|
|
"Merge disjoint stack slots" |
, |
|
|
false |
, |
|
|
false |
|
|
) |
| |
◆ STATISTIC() [1/4]
STATISTIC |
( |
EscapedAllocas |
, |
|
|
"Number of allocas that escaped the lifetime region" |
|
|
) |
| |
◆ STATISTIC() [2/4]
STATISTIC |
( |
NumMarkerSeen |
, |
|
|
"Number of lifetime markers found." |
|
|
) |
| |
◆ STATISTIC() [3/4]
STATISTIC |
( |
StackSlotMerged |
, |
|
|
"Number of stack slot merged." |
|
|
) |
| |
◆ STATISTIC() [4/4]
STATISTIC |
( |
StackSpaceSaved |
, |
|
|
"Number of bytes saved due to merging slots." |
|
|
) |
| |
◆ DEBUG_TYPE
◆ DisableColoring
cl::opt< bool > DisableColoring("no-stack-coloring", cl::init(false), cl::Hidden, cl::desc("Disable stack coloring")) |
( |
"no-stack-coloring" |
, |
|
|
cl::init(false) |
, |
|
|
cl::Hidden |
, |
|
|
cl::desc("Disable stack coloring") |
|
|
) |
| |
|
static |
◆ false
Merge disjoint stack false |
◆ LifetimeStartOnFirstUse
cl::opt< bool > LifetimeStartOnFirstUse("stackcoloring-lifetime-start-on-first-use", cl::init(true), cl::Hidden, cl::desc("Treat stack lifetimes as starting on first use, not on START marker.")) |
( |
"stackcoloring-lifetime-start-on-first-use" |
, |
|
|
cl::init(true) |
, |
|
|
cl::Hidden |
, |
|
|
cl::desc("Treat stack lifetimes as starting on first use, not on START marker.") |
|
|
) |
| |
|
static |
Enable enhanced dataflow scheme for lifetime analysis (treat first use of stack slot as start of slot lifetime, as opposed to looking for LIFETIME_START marker).
See "Implementation notes" below for more info.
◆ ProtectFromEscapedAllocas
cl::opt< bool > ProtectFromEscapedAllocas("protect-from-escaped-allocas", cl::init(false), cl::Hidden, cl::desc("Do not optimize lifetime zones that " "are broken")) |
( |
"protect-from-escaped-allocas" |
, |
|
|
cl::init(false) |
, |
|
|
cl::Hidden |
, |
|
|
cl::desc("Do not optimize lifetime zones that " "are broken") |
|
|
) |
| |
|
static |
The user may write code that uses allocas outside of the declared lifetime zone.
This can happen when the user returns a reference to a local data-structure. We can detect these cases and decide not to optimize the code. If this flag is enabled, we try to save the user. This option is treated as overriding LifetimeStartOnFirstUse below.
◆ slots
Merge disjoint stack slots |