LLVM 20.0.0git
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
llvm::GlobalStatus Struct Reference

As we analyze each global or thread-local variable, keep track of some information about it. More...

#include "llvm/Transforms/Utils/GlobalStatus.h"

Public Types

enum  StoredType { NotStored , InitializerStored , StoredOnce , Stored }
 Keep track of what stores to the global look like. More...
 

Public Member Functions

ValuegetStoredOnceValue () const
 If only one value (besides the initializer constant) is ever stored to this global return the stored value.
 
 GlobalStatus ()
 

Static Public Member Functions

static bool analyzeGlobal (const Value *V, GlobalStatus &GS)
 Look at all uses of the global and fill in the GlobalStatus structure.
 

Public Attributes

bool IsCompared = false
 True if the global's address is used in a comparison.
 
bool IsLoaded = false
 True if the global is ever loaded.
 
unsigned NumStores = 0
 Number of stores to the global.
 
enum llvm::GlobalStatus::StoredType StoredType = NotStored
 
const StoreInstStoredOnceStore = nullptr
 If only one value (besides the initializer constant) is ever stored to this global, keep track of what value it is via the store instruction.
 
const FunctionAccessingFunction = nullptr
 These start out null/false.
 
bool HasMultipleAccessingFunctions = false
 
AtomicOrdering Ordering = AtomicOrdering::NotAtomic
 Set to the strongest atomic ordering requirement.
 

Detailed Description

As we analyze each global or thread-local variable, keep track of some information about it.

If we find out that the address of the global is taken, none of this info will be accurate.

Definition at line 30 of file GlobalStatus.h.

Member Enumeration Documentation

◆ StoredType

Keep track of what stores to the global look like.

Enumerator
NotStored 

There is no store to this global. It can thus be marked constant.

InitializerStored 

This global is stored to, but the only thing stored is the constant it was initialized with.

This is only tracked for scalar globals.

StoredOnce 

This global is stored to, but only its initializer and one other value is ever stored to it.

If this global isStoredOnce, we track the value stored to it via StoredOnceStore below. This is only tracked for scalar globals.

Stored 

This global is stored to by multiple values or something else that we cannot track.

Definition at line 42 of file GlobalStatus.h.

Constructor & Destructor Documentation

◆ GlobalStatus()

GlobalStatus::GlobalStatus ( )
default

Member Function Documentation

◆ analyzeGlobal()

bool GlobalStatus::analyzeGlobal ( const Value V,
GlobalStatus GS 
)
static

Look at all uses of the global and fill in the GlobalStatus structure.

If the global has its address taken, return true to indicate we can't do anything with it.

Definition at line 196 of file GlobalStatus.cpp.

References analyzeGlobalAux().

Referenced by processGlobal().

◆ getStoredOnceValue()

Value * llvm::GlobalStatus::getStoredOnceValue ( ) const
inline

If only one value (besides the initializer constant) is ever stored to this global return the stored value.

Definition at line 67 of file GlobalStatus.h.

References llvm::User::getOperand(), StoredOnce, and StoredOnceStore.

Member Data Documentation

◆ AccessingFunction

const Function* llvm::GlobalStatus::AccessingFunction = nullptr

These start out null/false.

When the first accessing function is noticed, it is recorded. When a second different accessing function is noticed, HasMultipleAccessingFunctions is set to true.

Definition at line 76 of file GlobalStatus.h.

◆ HasMultipleAccessingFunctions

bool llvm::GlobalStatus::HasMultipleAccessingFunctions = false

Definition at line 77 of file GlobalStatus.h.

◆ IsCompared

bool llvm::GlobalStatus::IsCompared = false

True if the global's address is used in a comparison.

Definition at line 32 of file GlobalStatus.h.

◆ IsLoaded

bool llvm::GlobalStatus::IsLoaded = false

True if the global is ever loaded.

If the global isn't ever loaded it can be deleted.

Definition at line 36 of file GlobalStatus.h.

◆ NumStores

unsigned llvm::GlobalStatus::NumStores = 0

Number of stores to the global.

Definition at line 39 of file GlobalStatus.h.

◆ Ordering

AtomicOrdering llvm::GlobalStatus::Ordering = AtomicOrdering::NotAtomic

Set to the strongest atomic ordering requirement.

Definition at line 80 of file GlobalStatus.h.

◆ StoredOnceStore

const StoreInst* llvm::GlobalStatus::StoredOnceStore = nullptr

If only one value (besides the initializer constant) is ever stored to this global, keep track of what value it is via the store instruction.

Definition at line 63 of file GlobalStatus.h.

Referenced by getStoredOnceValue().

◆ StoredType


The documentation for this struct was generated from the following files: