mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-27 17:31:33 +00:00
Push LLVMContext _back_ through IRBuilder.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75040 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
096e7280c2
commit
d1fbd14294
@ -115,7 +115,7 @@ undeclared parameter):</p>
|
||||
Value *ErrorV(const char *Str) { Error(Str); return 0; }
|
||||
|
||||
static Module *TheModule;
|
||||
static IRBuilder<> Builder;
|
||||
static IRBuilder<> Builder(getGlobalContext());
|
||||
static std::map<std::string, Value*> NamedValues;
|
||||
</pre>
|
||||
</div>
|
||||
@ -682,6 +682,7 @@ our makefile/command line about which options to use:</p>
|
||||
// See example below.
|
||||
|
||||
#include "llvm/DerivedTypes.h"
|
||||
#include "llvm/LLVMContext.h"
|
||||
#include "llvm/Module.h"
|
||||
#include "llvm/Analysis/Verifier.h"
|
||||
#include "llvm/Support/IRBuilder.h"
|
||||
@ -1216,7 +1217,7 @@ double putchard(double X) {
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
int main() {
|
||||
TheModule = new Module("my cool jit");
|
||||
TheModule = new Module("my cool jit", getGlobalContext());
|
||||
|
||||
// Install standard binary operators.
|
||||
// 1 is lowest precedence.
|
||||
|
@ -512,6 +512,7 @@ at runtime.</p>
|
||||
<pre>
|
||||
#include "llvm/DerivedTypes.h"
|
||||
#include "llvm/ExecutionEngine/ExecutionEngine.h"
|
||||
#include "llvm/LLVMContext.h"
|
||||
#include "llvm/Module.h"
|
||||
#include "llvm/ModuleProvider.h"
|
||||
#include "llvm/PassManager.h"
|
||||
@ -861,7 +862,7 @@ static PrototypeAST *ParseExtern() {
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
static Module *TheModule;
|
||||
static IRBuilder<> Builder;
|
||||
static IRBuilder<> Builder(getGlobalContext());
|
||||
static std::map<std::string, Value*> NamedValues;
|
||||
static FunctionPassManager *TheFPM;
|
||||
|
||||
@ -1074,7 +1075,7 @@ int main() {
|
||||
getNextToken();
|
||||
|
||||
// Make the module, which holds all the code.
|
||||
TheModule = new Module("my cool jit");
|
||||
TheModule = new Module("my cool jit", getGlobalContext());
|
||||
|
||||
// Create the JIT.
|
||||
TheExecutionEngine = ExecutionEngine::create(TheModule);
|
||||
|
@ -901,6 +901,7 @@ if/then/else and for expressions.. To build this example, use:
|
||||
<pre>
|
||||
#include "llvm/DerivedTypes.h"
|
||||
#include "llvm/ExecutionEngine/ExecutionEngine.h"
|
||||
#include "llvm/LLVMContext.h"
|
||||
#include "llvm/Module.h"
|
||||
#include "llvm/ModuleProvider.h"
|
||||
#include "llvm/PassManager.h"
|
||||
@ -1352,7 +1353,7 @@ static PrototypeAST *ParseExtern() {
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
static Module *TheModule;
|
||||
static IRBuilder<> Builder;
|
||||
static IRBuilder<> Builder(getGlobalContext());
|
||||
static std::map<std::string, Value*> NamedValues;
|
||||
static FunctionPassManager *TheFPM;
|
||||
|
||||
@ -1708,7 +1709,7 @@ int main() {
|
||||
getNextToken();
|
||||
|
||||
// Make the module, which holds all the code.
|
||||
TheModule = new Module("my cool jit");
|
||||
TheModule = new Module("my cool jit", getGlobalContext());
|
||||
|
||||
// Create the JIT.
|
||||
TheExecutionEngine = ExecutionEngine::create(TheModule);
|
||||
|
@ -821,6 +821,7 @@ if/then/else and for expressions.. To build this example, use:
|
||||
<pre>
|
||||
#include "llvm/DerivedTypes.h"
|
||||
#include "llvm/ExecutionEngine/ExecutionEngine.h"
|
||||
#include "llvm/LLVMContext.h"
|
||||
#include "llvm/Module.h"
|
||||
#include "llvm/ModuleProvider.h"
|
||||
#include "llvm/PassManager.h"
|
||||
@ -1357,7 +1358,7 @@ static PrototypeAST *ParseExtern() {
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
static Module *TheModule;
|
||||
static IRBuilder<> Builder;
|
||||
static IRBuilder<> Builder(getGlobalContext());
|
||||
static std::map<std::string, Value*> NamedValues;
|
||||
static FunctionPassManager *TheFPM;
|
||||
|
||||
@ -1747,7 +1748,7 @@ int main() {
|
||||
getNextToken();
|
||||
|
||||
// Make the module, which holds all the code.
|
||||
TheModule = new Module("my cool jit");
|
||||
TheModule = new Module("my cool jit", getGlobalContext());
|
||||
|
||||
// Create the JIT.
|
||||
TheExecutionEngine = ExecutionEngine::create(TheModule);
|
||||
|
@ -1003,6 +1003,7 @@ variables and var/in support. To build this example, use:
|
||||
<pre>
|
||||
#include "llvm/DerivedTypes.h"
|
||||
#include "llvm/ExecutionEngine/ExecutionEngine.h"
|
||||
#include "llvm/LLVMContext.h"
|
||||
#include "llvm/Module.h"
|
||||
#include "llvm/ModuleProvider.h"
|
||||
#include "llvm/PassManager.h"
|
||||
@ -1605,7 +1606,7 @@ static PrototypeAST *ParseExtern() {
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
static Module *TheModule;
|
||||
static IRBuilder<> Builder;
|
||||
static IRBuilder<> Builder(getGlobalContext());
|
||||
static std::map<std::string, AllocaInst*> NamedValues;
|
||||
static FunctionPassManager *TheFPM;
|
||||
|
||||
@ -2099,7 +2100,7 @@ int main() {
|
||||
getNextToken();
|
||||
|
||||
// Make the module, which holds all the code.
|
||||
TheModule = new Module("my cool jit");
|
||||
TheModule = new Module("my cool jit", getGlobalContext());
|
||||
|
||||
// Create the JIT.
|
||||
TheExecutionEngine = ExecutionEngine::create(TheModule);
|
||||
|
@ -604,7 +604,7 @@ static PrototypeAST *ParseExtern() {
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
static Module *TheModule;
|
||||
static IRBuilder<> Builder;
|
||||
static IRBuilder<> Builder(getGlobalContext());
|
||||
static std::map<std::string, AllocaInst*> NamedValues;
|
||||
static FunctionPassManager *TheFPM;
|
||||
|
||||
|
@ -37,7 +37,8 @@ namespace llvm {
|
||||
friend struct SCEVVisitor<SCEVExpander, Value*>;
|
||||
public:
|
||||
explicit SCEVExpander(ScalarEvolution &se)
|
||||
: SE(se), Builder(TargetFolder(se.TD, se.getContext())) {}
|
||||
: SE(se), Builder(*se.getContext(),
|
||||
TargetFolder(se.TD, se.getContext())) {}
|
||||
|
||||
/// clear - Erase the contents of the InsertedExpressions map so that users
|
||||
/// trying to expand the same expression into multiple BasicBlocks or
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include "llvm/GlobalAlias.h"
|
||||
#include "llvm/GlobalVariable.h"
|
||||
#include "llvm/Function.h"
|
||||
#include "llvm/LLVMContext.h"
|
||||
#include "llvm/Support/ConstantFolder.h"
|
||||
|
||||
namespace llvm {
|
||||
@ -42,12 +43,20 @@ template <bool preserveNames=true, typename T = ConstantFolder> class IRBuilder{
|
||||
BasicBlock *BB;
|
||||
BasicBlock::iterator InsertPt;
|
||||
T Folder;
|
||||
LLVMContext &Context;
|
||||
public:
|
||||
IRBuilder(const T& F = T()) : Folder(F) { ClearInsertionPoint(); }
|
||||
IRBuilder(LLVMContext &C, const T& F = T()) :
|
||||
Folder(F), Context(C) { ClearInsertionPoint(); }
|
||||
|
||||
explicit IRBuilder(BasicBlock *TheBB, const T& F = T())
|
||||
: Folder(F) { SetInsertPoint(TheBB); }
|
||||
: Folder(F), Context(*TheBB->getParent()->getContext()) {
|
||||
SetInsertPoint(TheBB);
|
||||
}
|
||||
|
||||
IRBuilder(BasicBlock *TheBB, BasicBlock::iterator IP, const T& F = T())
|
||||
: Folder(F) { SetInsertPoint(TheBB, IP); }
|
||||
: Folder(F), Context(*TheBB->getParent()->getContext()) {
|
||||
SetInsertPoint(TheBB, IP);
|
||||
}
|
||||
|
||||
/// getFolder - Get the constant folder being used.
|
||||
const T& getFolder() { return Folder; }
|
||||
@ -125,7 +134,7 @@ public:
|
||||
///
|
||||
ReturnInst *CreateAggregateRet(Value * const* retVals, unsigned N) {
|
||||
const Type *RetType = BB->getParent()->getReturnType();
|
||||
Value *V = UndefValue::get(RetType);
|
||||
Value *V = Context.getUndef(RetType);
|
||||
for (unsigned i = 0; i != N; ++i)
|
||||
V = CreateInsertValue(V, retVals[i], i, "mrv");
|
||||
return Insert(ReturnInst::Create(V));
|
||||
@ -349,7 +358,7 @@ public:
|
||||
return Insert(GetElementPtrInst::Create(Ptr, Idx), Name);
|
||||
}
|
||||
Value *CreateConstGEP1_32(Value *Ptr, unsigned Idx0, const char *Name = "") {
|
||||
Value *Idx = ConstantInt::get(Type::Int32Ty, Idx0);
|
||||
Value *Idx = Context.getConstantInt(Type::Int32Ty, Idx0);
|
||||
|
||||
if (Constant *PC = dyn_cast<Constant>(Ptr))
|
||||
return Folder.CreateGetElementPtr(PC, &Idx, 1);
|
||||
@ -359,8 +368,8 @@ public:
|
||||
Value *CreateConstGEP2_32(Value *Ptr, unsigned Idx0, unsigned Idx1,
|
||||
const char *Name = "") {
|
||||
Value *Idxs[] = {
|
||||
ConstantInt::get(Type::Int32Ty, Idx0),
|
||||
ConstantInt::get(Type::Int32Ty, Idx1)
|
||||
Context.getConstantInt(Type::Int32Ty, Idx0),
|
||||
Context.getConstantInt(Type::Int32Ty, Idx1)
|
||||
};
|
||||
|
||||
if (Constant *PC = dyn_cast<Constant>(Ptr))
|
||||
@ -369,7 +378,7 @@ public:
|
||||
return Insert(GetElementPtrInst::Create(Ptr, Idxs, Idxs+2), Name);
|
||||
}
|
||||
Value *CreateConstGEP1_64(Value *Ptr, uint64_t Idx0, const char *Name = "") {
|
||||
Value *Idx = ConstantInt::get(Type::Int64Ty, Idx0);
|
||||
Value *Idx = Context.getConstantInt(Type::Int64Ty, Idx0);
|
||||
|
||||
if (Constant *PC = dyn_cast<Constant>(Ptr))
|
||||
return Folder.CreateGetElementPtr(PC, &Idx, 1);
|
||||
@ -379,8 +388,8 @@ public:
|
||||
Value *CreateConstGEP2_64(Value *Ptr, uint64_t Idx0, uint64_t Idx1,
|
||||
const char *Name = "") {
|
||||
Value *Idxs[] = {
|
||||
ConstantInt::get(Type::Int64Ty, Idx0),
|
||||
ConstantInt::get(Type::Int64Ty, Idx1)
|
||||
Context.getConstantInt(Type::Int64Ty, Idx0),
|
||||
Context.getConstantInt(Type::Int64Ty, Idx1)
|
||||
};
|
||||
|
||||
if (Constant *PC = dyn_cast<Constant>(Ptr))
|
||||
@ -392,7 +401,7 @@ public:
|
||||
return CreateConstGEP2_32(Ptr, 0, Idx, Name);
|
||||
}
|
||||
Value *CreateGlobalString(const char *Str = "", const char *Name = "") {
|
||||
Constant *StrConstant = ConstantArray::get(Str, true);
|
||||
Constant *StrConstant = Context.getConstantArray(Str, true);
|
||||
GlobalVariable *gv = new GlobalVariable(*BB->getParent()->getParent(),
|
||||
StrConstant->getType(),
|
||||
true,
|
||||
@ -406,7 +415,7 @@ public:
|
||||
}
|
||||
Value *CreateGlobalStringPtr(const char *Str = "", const char *Name = "") {
|
||||
Value *gv = CreateGlobalString(Str, Name);
|
||||
Value *zero = ConstantInt::get(Type::Int32Ty, 0);
|
||||
Value *zero = Context.getConstantInt(Type::Int32Ty, 0);
|
||||
Value *Args[] = { zero, zero };
|
||||
return CreateGEP(gv, Args, Args+2, Name);
|
||||
}
|
||||
@ -683,13 +692,13 @@ public:
|
||||
|
||||
/// CreateIsNull - Return an i1 value testing if \arg Arg is null.
|
||||
Value *CreateIsNull(Value *Arg, const char *Name = "") {
|
||||
return CreateICmpEQ(Arg, Constant::getNullValue(Arg->getType()),
|
||||
return CreateICmpEQ(Arg, Context.getNullValue(Arg->getType()),
|
||||
Name);
|
||||
}
|
||||
|
||||
/// CreateIsNotNull - Return an i1 value testing if \arg Arg is not null.
|
||||
Value *CreateIsNotNull(Value *Arg, const char *Name = "") {
|
||||
return CreateICmpNE(Arg, Constant::getNullValue(Arg->getType()),
|
||||
return CreateICmpNE(Arg, Context.getNullValue(Arg->getType()),
|
||||
Name);
|
||||
}
|
||||
|
||||
@ -704,7 +713,7 @@ public:
|
||||
Value *RHS_int = CreatePtrToInt(RHS, Type::Int64Ty);
|
||||
Value *Difference = CreateSub(LHS_int, RHS_int);
|
||||
return CreateSDiv(Difference,
|
||||
ConstantExpr::getSizeOf(ArgType->getElementType()),
|
||||
Context.getConstantExprSizeOf(ArgType->getElementType()),
|
||||
Name);
|
||||
}
|
||||
};
|
||||
|
@ -301,7 +301,7 @@ static Value *LowerCTLZ(Value *V, Instruction *IP) {
|
||||
/// the bits are returned in inverse order.
|
||||
/// @brief Lowering of llvm.part.select intrinsic.
|
||||
static Instruction *LowerPartSelect(CallInst *CI) {
|
||||
IRBuilder<> Builder;
|
||||
IRBuilder<> Builder(*CI->getParent()->getContext());
|
||||
|
||||
// Make sure we're dealing with a part select intrinsic here
|
||||
Function *F = CI->getCalledFunction();
|
||||
@ -472,7 +472,7 @@ static Instruction *LowerPartSelect(CallInst *CI) {
|
||||
/// greater than %High then the inverse set of bits are replaced.
|
||||
/// @brief Lowering of llvm.bit.part.set intrinsic.
|
||||
static Instruction *LowerPartSet(CallInst *CI) {
|
||||
IRBuilder<> Builder;
|
||||
IRBuilder<> Builder(*CI->getParent()->getContext());
|
||||
|
||||
// Make sure we're dealing with a part select intrinsic here
|
||||
Function *F = CI->getCalledFunction();
|
||||
|
@ -93,7 +93,7 @@ namespace {
|
||||
|
||||
public:
|
||||
EscapeEnumerator(Function &F, const char *N = "cleanup")
|
||||
: F(F), CleanupBBName(N), State(0) {}
|
||||
: F(F), CleanupBBName(N), State(0), Builder(*F.getContext()) {}
|
||||
|
||||
IRBuilder<> *Next() {
|
||||
switch (State) {
|
||||
|
@ -1639,7 +1639,7 @@ bool SimplifyLibCalls::runOnFunction(Function &F) {
|
||||
|
||||
const TargetData &TD = getAnalysis<TargetData>();
|
||||
|
||||
IRBuilder<> Builder;
|
||||
IRBuilder<> Builder(*Context);
|
||||
|
||||
bool Changed = false;
|
||||
for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB) {
|
||||
|
@ -1132,7 +1132,7 @@ LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index) {
|
||||
/*===-- Instruction builders ----------------------------------------------===*/
|
||||
|
||||
LLVMBuilderRef LLVMCreateBuilder(void) {
|
||||
return wrap(new IRBuilder<>());
|
||||
return wrap(new IRBuilder<>(getGlobalContext()));
|
||||
}
|
||||
|
||||
void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
|
||||
|
Loading…
x
Reference in New Issue
Block a user