LLVM  6.0.0svn
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/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...
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "evaluator"

Definition at line 43 of file Evaluator.cpp.

Function Documentation

◆ 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 131 of file Evaluator.cpp.

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

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 61 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().