LLVM  8.0.1
Macros | Functions
Evaluator.cpp File Reference
#include "llvm/Transforms/Utils/Evaluator.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Analysis/ConstantFolding.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/CallSite.h"
#include "llvm/IR/Constant.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalAlias.h"
#include "llvm/IR/GlobalValue.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/Operator.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/User.h"
#include "llvm/IR/Value.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
#include <iterator>
Include dependency graph for Evaluator.cpp:

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "evaluator"
 

Functions

static bool isSimpleEnoughValueToCommit (Constant *C, SmallPtrSetImpl< Constant *> &SimpleConstants, const DataLayout &DL)
 
static bool isSimpleEnoughValueToCommitHelper (Constant *C, SmallPtrSetImpl< Constant *> &SimpleConstants, const DataLayout &DL)
 Return true if the specified constant can be handled by the code generator. More...
 
static bool isSimpleEnoughPointerToCommit (Constant *C)
 Return true if this constant is simple enough for us to understand. More...
 
static ConstantgetInitializer (Constant *C)
 
static FunctiongetFunction (Constant *C)
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "evaluator"

Definition at line 44 of file Evaluator.cpp.

Function Documentation

◆ getFunction()

static Function* getFunction ( Constant C)
static

◆ getInitializer()

static Constant* getInitializer ( Constant C)
static

◆ isSimpleEnoughPointerToCommit()

static bool isSimpleEnoughPointerToCommit ( Constant C)
static

Return true if this constant is simple enough for us to understand.

In particular, if it is a cast to anything other than from one pointer type to another pointer type, we punt. We basically just support direct accesses to globals and GEP's of globals. This should be kept up to date with CommitValueTo.

Definition at line 132 of file Evaluator.cpp.

References llvm::ConstantFoldLoadThroughGEPConstantExpr(), llvm::dyn_cast(), llvm::GlobalVariable::getInitializer(), llvm::Value::getType(), llvm::GlobalVariable::hasUniqueInitializer(), and llvm::ConstantInt::isZero().

Referenced by llvm::Evaluator::EvaluateBlock().

◆ isSimpleEnoughValueToCommit()

static bool isSimpleEnoughValueToCommit ( Constant C,
SmallPtrSetImpl< Constant *> &  SimpleConstants,
const DataLayout DL 
)
inlinestatic

◆ isSimpleEnoughValueToCommitHelper()

static bool isSimpleEnoughValueToCommitHelper ( Constant C,
SmallPtrSetImpl< Constant *> &  SimpleConstants,
const DataLayout DL 
)
static

Return true if the specified constant can be handled by the code generator.

We don't want to generate something like: void *X = &X/42; because the code generator doesn't have a relocation that can handle that.

This function should be called if C was not found (but just got inserted) in SimpleConstants to avoid having to rescan the same constants all the time.

Definition at line 62 of file Evaluator.cpp.

References llvm::MCID::Add, C, llvm::User::getNumOperands(), llvm::ConstantExpr::getOpcode(), llvm::User::getOperand(), llvm::Value::getType(), llvm::DataLayout::getTypeSizeInBits(), isSimpleEnoughValueToCommit(), and llvm::User::operands().

Referenced by isSimpleEnoughValueToCommit().