Removed LLVM 3.0 compatibility code.

There might be still some pieces left here and there, and
there is certainly code that could be rewritten in a nicer
way with the 3.0 requirement out of the picture.
This commit is contained in:
David Nadlinger 2013-05-31 20:22:38 +02:00
parent 84a00b3fe9
commit c02b38fe9a
11 changed files with 6 additions and 254 deletions

View file

@ -512,13 +512,11 @@ int main(int argc, char** argv)
// FIXME: Detect O32/N32 variants (MIPS_{O32,N32}[_SoftFP,_HardFP]). // FIXME: Detect O32/N32 variants (MIPS_{O32,N32}[_SoftFP,_HardFP]).
VersionCondition::addPredefinedGlobalIdent("MIPS"); VersionCondition::addPredefinedGlobalIdent("MIPS");
break; break;
#if LDC_LLVM_VER >= 301
case llvm::Triple::mips64: case llvm::Triple::mips64:
case llvm::Triple::mips64el: case llvm::Triple::mips64el:
// FIXME: Detect N64 variants (MIPS64_N64[_SoftFP,_HardFP]). // FIXME: Detect N64 variants (MIPS64_N64[_SoftFP,_HardFP]).
VersionCondition::addPredefinedGlobalIdent("MIPS64"); VersionCondition::addPredefinedGlobalIdent("MIPS64");
break; break;
#endif
case llvm::Triple::sparc: case llvm::Triple::sparc:
// FIXME: Detect SPARC v8+ (SPARC_V8Plus). // FIXME: Detect SPARC v8+ (SPARC_V8Plus).
// FIXME: Detect soft float (SPARC_SoftFP/SPARC_HardFP). // FIXME: Detect soft float (SPARC_SoftFP/SPARC_HardFP).

View file

@ -13,7 +13,6 @@
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#include "driver/target.h" #include "driver/target.h"
#include "gen/llvmcompat.h"
#include "llvm/ADT/Triple.h" #include "llvm/ADT/Triple.h"
#include "llvm/MC/SubtargetFeature.h" #include "llvm/MC/SubtargetFeature.h"
#include "llvm/Support/Host.h" #include "llvm/Support/Host.h"
@ -88,19 +87,11 @@ llvm::TargetMachine* createTargetMachine(
std::string defaultTriple = llvm::sys::getDefaultTargetTriple(); std::string defaultTriple = llvm::sys::getDefaultTargetTriple();
if (sizeof(void*) == 4 && bitness == ExplicitBitness::M64) if (sizeof(void*) == 4 && bitness == ExplicitBitness::M64)
{ {
#if LDC_LLVM_VER >= 301
defaultTriple = llvm::Triple(defaultTriple).get64BitArchVariant().str(); defaultTriple = llvm::Triple(defaultTriple).get64BitArchVariant().str();
#else
defaultTriple = llvm::Triple__get64BitArchVariant(defaultTriple).str();
#endif
} }
else if (sizeof(void*) == 8 && bitness == ExplicitBitness::M32) else if (sizeof(void*) == 8 && bitness == ExplicitBitness::M32)
{ {
#if LDC_LLVM_VER >= 301
defaultTriple = llvm::Triple(defaultTriple).get32BitArchVariant().str(); defaultTriple = llvm::Triple(defaultTriple).get32BitArchVariant().str();
#else
defaultTriple = llvm::Triple__get32BitArchVariant(defaultTriple).str();
#endif
} }
llvm::Triple triple; llvm::Triple triple;
@ -182,12 +173,6 @@ llvm::TargetMachine* createTargetMachine(
relocModel = llvm::Reloc::PIC_; relocModel = llvm::Reloc::PIC_;
} }
#if LDC_LLVM_VER == 300
llvm::NoFramePointerElim = genDebugInfo;
return theTarget->createTargetMachine(triple.str(), cpu, FeaturesStr,
relocModel, codeModel);
#else
llvm::TargetOptions targetOptions; llvm::TargetOptions targetOptions;
targetOptions.NoFramePointerElim = genDebugInfo; targetOptions.NoFramePointerElim = genDebugInfo;
@ -200,5 +185,4 @@ llvm::TargetMachine* createTargetMachine(
codeModel, codeModel,
codeGenOptLevel codeGenOptLevel
); );
#endif
} }

View file

@ -16,9 +16,6 @@
#define LDC_DRIVER_TARGET_H #define LDC_DRIVER_TARGET_H
#include "llvm/Support/CodeGen.h" #include "llvm/Support/CodeGen.h"
#if LDC_LLVM_VER == 300
#include "llvm/Target/TargetMachine.h" // For llvm::CodeGenOpt::Level.
#endif
#include <string> #include <string>
#include <vector> #include <vector>

View file

@ -1,169 +0,0 @@
//===-- llvmcompat.cpp ----------------------------------------------------===//
//
// LDC the LLVM D compiler
//
// This file is distributed under the BSD-style LDC license. See the LICENSE
// file for details.
//
//===----------------------------------------------------------------------===//
#include "gen/llvmcompat.h"
#include "llvm/ADT/Triple.h"
#include "llvm/Config/llvm-config.h"
#if LDC_LLVM_VER >= 303
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/IRBuilder.h"
#else
#include "llvm/DerivedTypes.h"
#include "llvm/Function.h"
#include "llvm/Module.h"
#if LDC_LLVM_VER == 302
#include "llvm/IRBuilder.h"
#else
#include "llvm/Support/IRBuilder.h"
#endif
#endif
#include <string>
#if LDC_LLVM_VER == 300
using namespace llvm;
std::string llvm::sys::getDefaultTargetTriple() {
return LLVM_HOSTTRIPLE;
}
Triple llvm::Triple__get32BitArchVariant(const std::string& triple) {
Triple T(triple);
switch (T.getArch()) {
case Triple::UnknownArch:
case Triple::msp430:
#if LDC_LLVM_VER == 300
case Triple::alpha:
case Triple::systemz:
#endif
T.setArch(Triple::UnknownArch);
break;
case Triple::amdil:
case Triple::arm:
case Triple::cellspu:
case Triple::le32:
case Triple::mblaze:
case Triple::mips:
case Triple::mipsel:
case Triple::ppc:
case Triple::sparc:
case Triple::tce:
case Triple::thumb:
case Triple::x86:
case Triple::xcore:
#if LDC_LLVM_VER == 300
case Triple::bfin:
#endif
// Already 32-bit.
break;
case Triple::mips64: T.setArch(Triple::mips); break;
case Triple::mips64el: T.setArch(Triple::mipsel); break;
case Triple::ppc64: T.setArch(Triple::ppc); break;
case Triple::sparcv9: T.setArch(Triple::sparc); break;
case Triple::x86_64: T.setArch(Triple::x86); break;
#if LDC_LLVM_VER == 300
case Triple::ptx64: T.setArch(Triple::ptx32); break;
#endif
}
return T;
}
Triple llvm::Triple__get64BitArchVariant(const std::string& triple) {
Triple T(triple);
switch (T.getArch()) {
case Triple::UnknownArch:
case Triple::amdil:
case Triple::arm:
case Triple::cellspu:
case Triple::le32:
case Triple::mblaze:
case Triple::msp430:
case Triple::tce:
case Triple::thumb:
case Triple::xcore:
#if LDC_LLVM_VER == 300
case Triple::bfin:
#endif
T.setArch(Triple::UnknownArch);
break;
#if LDC_LLVM_VER == 300
case Triple::alpha:
case Triple::systemz:
#endif
case Triple::mips64:
case Triple::mips64el:
case Triple::ppc64:
case Triple::sparcv9:
case Triple::x86_64:
// Already 64-bit.
break;
case Triple::mips: T.setArch(Triple::mips64); break;
case Triple::mipsel: T.setArch(Triple::mips64el); break;
case Triple::ppc: T.setArch(Triple::ppc64); break;
case Triple::sparc: T.setArch(Triple::sparcv9); break;
case Triple::x86: T.setArch(Triple::x86_64); break;
#if LDC_LLVM_VER == 300
case Triple::ptx32: T.setArch(Triple::ptx64); break;
#endif
}
return T;
}
static void appendToGlobalArray(const char *Array,
Module &M, Function *F, int Priority) {
IRBuilder<> IRB(M.getContext());
FunctionType *FnTy = FunctionType::get(IRB.getVoidTy(), false);
StructType *Ty = StructType::get(
IRB.getInt32Ty(), PointerType::getUnqual(FnTy), NULL);
Constant *RuntimeCtorInit = ConstantStruct::get(
Ty, IRB.getInt32(Priority), F, NULL);
// Get the current set of static global constructors and add the new ctor
// to the list.
SmallVector<Constant *, 16> CurrentCtors;
if (GlobalVariable * GVCtor = M.getNamedGlobal(Array)) {
if (Constant *Init = GVCtor->getInitializer()) {
unsigned n = Init->getNumOperands();
CurrentCtors.reserve(n + 1);
for (unsigned i = 0; i != n; ++i)
CurrentCtors.push_back(cast<Constant>(Init->getOperand(i)));
}
GVCtor->eraseFromParent();
}
CurrentCtors.push_back(RuntimeCtorInit);
// Create a new initializer.
ArrayType *AT = ArrayType::get(RuntimeCtorInit->getType(),
CurrentCtors.size());
Constant *NewInit = ConstantArray::get(AT, CurrentCtors);
// Create the new global variable and replace all uses of
// the old global variable with the new one.
(void)new GlobalVariable(M, NewInit->getType(), false,
GlobalValue::AppendingLinkage, NewInit, Array);
}
void llvm::appendToGlobalCtors(Module &M, Function *F, int Priority) {
appendToGlobalArray("llvm.global_ctors", M, F, Priority);
}
void llvm::appendToGlobalDtors(Module &M, Function *F, int Priority) {
appendToGlobalArray("llvm.global_dtors", M, F, Priority);
}
#endif

View file

@ -20,31 +20,10 @@
#ifndef LDC_LLVMCOMPAT_H #ifndef LDC_LLVMCOMPAT_H
#define LDC_LLVMCOMPAT_H #define LDC_LLVMCOMPAT_H
#include "llvm/ADT/Triple.h"
#include <string>
#if !defined(LDC_LLVM_VER) #if !defined(LDC_LLVM_VER)
#error "Please specify value for LDC_LLVM_VER." #error "Please specify value for LDC_LLVM_VER."
#endif #endif
#if LDC_LLVM_VER == 300
namespace llvm {
class Module;
class Function;
namespace sys {
std::string getDefaultTargetTriple();
}
Triple Triple__get32BitArchVariant(const std::string&_this);
Triple Triple__get64BitArchVariant(const std::string& _this);
// From Transforms/Utils/ModuleUtils
void appendToGlobalCtors(Module &M, Function *F, int Priority);
void appendToGlobalDtors(Module &M, Function *F, int Priority);
}
#endif
#if LDC_LLVM_VER >= 302 #if LDC_LLVM_VER >= 302
#define ADDRESS_SPACE 0 #define ADDRESS_SPACE 0
#define HAS_ATTRIBUTES(x) (x).hasAttributes() #define HAS_ATTRIBUTES(x) (x).hasAttributes()

View file

@ -31,9 +31,7 @@
#include "ir/irmodule.h" #include "ir/irmodule.h"
#include "llvm/MC/MCAsmInfo.h" #include "llvm/MC/MCAsmInfo.h"
#include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetMachine.h"
#if LDC_LLVM_VER >= 301
#include "llvm/Transforms/Utils/ModuleUtils.h" #include "llvm/Transforms/Utils/ModuleUtils.h"
#endif
#include <stack> #include <stack>
/****************************************************************************************/ /****************************************************************************************/
@ -1446,13 +1444,7 @@ LLConstant* DtoConstExpInit(Loc loc, Type* type, Expression* exp)
assert(tv->basetype->ty == Tsarray); assert(tv->basetype->ty == Tsarray);
dinteger_t elemCount = dinteger_t elemCount =
static_cast<TypeSArray *>(tv->basetype)->dim->toInteger(); static_cast<TypeSArray *>(tv->basetype)->dim->toInteger();
#if LDC_LLVM_VER == 300
std::vector<LLConstant*> Elts(elemCount, val);
return llvm::ConstantVector::get(Elts);
#else
return llvm::ConstantVector::getSplat(elemCount, val); return llvm::ConstantVector::getSplat(elemCount, val);
#endif
} }
error(loc, "LDC internal error: cannot yet convert default initializer %s of type %s to %s", error(loc, "LDC internal error: cannot yet convert default initializer %s of type %s to %s",

View file

@ -196,17 +196,11 @@ static void addOptimizationPasses(PassManagerBase &mpm, FunctionPassManager &fpm
#endif // USE_METADATA #endif // USE_METADATA
} }
#if LDC_LLVM_VER >= 301
// EP_OptimizerLast does not exist in LLVM 3.0, add it manually below. // EP_OptimizerLast does not exist in LLVM 3.0, add it manually below.
builder.addExtension(PassManagerBuilder::EP_OptimizerLast, addStripExternalsPass); builder.addExtension(PassManagerBuilder::EP_OptimizerLast, addStripExternalsPass);
#endif
builder.populateFunctionPassManager(fpm); builder.populateFunctionPassManager(fpm);
builder.populateModulePassManager(mpm); builder.populateModulePassManager(mpm);
#if LDC_LLVM_VER < 301
addStripExternalsPass(builder, mpm);
#endif
} }
////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////

View file

@ -16,11 +16,7 @@
#define LDC_GEN_OPTIMIZER_H #define LDC_GEN_OPTIMIZER_H
// For llvm::CodeGenOpt::Level // For llvm::CodeGenOpt::Level
#if LDC_LLVM_VER == 300
#include "llvm/Target/TargetMachine.h"
#else
#include "llvm/Support/CodeGen.h" #include "llvm/Support/CodeGen.h"
#endif
namespace llvm { class Module; } namespace llvm { class Module; }

View file

@ -200,11 +200,8 @@ namespace {
APInt Mask = APInt::getLowBitsSet(Bits, BitsLimit); APInt Mask = APInt::getLowBitsSet(Bits, BitsLimit);
Mask.flipAllBits(); Mask.flipAllBits();
APInt KnownZero(Bits, 0), KnownOne(Bits, 0); APInt KnownZero(Bits, 0), KnownOne(Bits, 0);
#if LDC_LLVM_VER >= 301
ComputeMaskedBits(arrSize, KnownZero, KnownOne, &A.TD); ComputeMaskedBits(arrSize, KnownZero, KnownOne, &A.TD);
#else
ComputeMaskedBits(arrSize, Mask, KnownZero, KnownOne, &A.TD);
#endif
if ((KnownZero & Mask) != Mask) if ((KnownZero & Mask) != Mask)
return false; return false;
} }

View file

@ -255,17 +255,13 @@ static llvm::DIType dwarfCompositeType(Type* type)
// set diCompositeType to handle recursive types properly // set diCompositeType to handle recursive types properly
if (!ir->diCompositeType) { if (!ir->diCompositeType) {
#if LDC_LLVM_VER >= 301
unsigned tag = (t->ty == Tstruct) ? llvm::dwarf::DW_TAG_structure_type unsigned tag = (t->ty == Tstruct) ? llvm::dwarf::DW_TAG_structure_type
: llvm::dwarf::DW_TAG_class_type; : llvm::dwarf::DW_TAG_class_type;
ir->diCompositeType = gIR->dibuilder.createForwardDecl(tag, name, ir->diCompositeType = gIR->dibuilder.createForwardDecl(tag, name,
#if LDC_LLVM_VER >= 302 #if LDC_LLVM_VER >= 302
llvm::DIDescriptor(file), llvm::DIDescriptor(file),
#endif #endif
file, linnum); file, linnum);
#else
ir->diCompositeType = gIR->dibuilder.createTemporaryType();
#endif
} }
if (!ir->aggrdecl->isInterfaceDeclaration()) // plain interfaces don't have one if (!ir->aggrdecl->isInterfaceDeclaration()) // plain interfaces don't have one
@ -542,9 +538,7 @@ llvm::DISubprogram DtoDwarfSubProgram(FuncDeclaration* fd)
DIFnType, // type DIFnType, // type
fd->protection == PROTprivate, // is local to unit fd->protection == PROTprivate, // is local to unit
gIR->dmodule == getDefinedModule(fd), // isdefinition gIR->dmodule == getDefinedModule(fd), // isdefinition
#if LDC_LLVM_VER >= 301
fd->loc.linnum, // FIXME: scope line fd->loc.linnum, // FIXME: scope line
#endif
0, // Flags 0, // Flags
false, // isOptimized false, // isOptimized
fd->ir.irFunc->func fd->ir.irFunc->func
@ -583,10 +577,8 @@ llvm::DISubprogram DtoDwarfSubProgramInternal(const char* prettyname, const char
0, // line no 0, // line no
DIFnType, // return type. TODO: fill it up DIFnType, // return type. TODO: fill it up
true, // is local to unit true, // is local to unit
true // isdefinition true, // isdefinition
#if LDC_LLVM_VER >= 301 0 // FIXME: scope line
, 0 // FIXME: scope line
#endif
); );
} }

View file

@ -673,11 +673,7 @@ LLConstant* DtoConstFP(Type* t, longdouble value)
LLConstant* DtoConstString(const char* str) LLConstant* DtoConstString(const char* str)
{ {
llvm::StringRef s(str ? str : ""); llvm::StringRef s(str ? str : "");
#if LDC_LLVM_VER == 300
LLConstant* init = LLConstantArray::get(gIR->context(), s, true);
#else
LLConstant* init = llvm::ConstantDataArray::getString(gIR->context(), s, true); LLConstant* init = llvm::ConstantDataArray::getString(gIR->context(), s, true);
#endif
llvm::GlobalVariable* gvar = new llvm::GlobalVariable( llvm::GlobalVariable* gvar = new llvm::GlobalVariable(
*gIR->module, init->getType(), true, llvm::GlobalValue::InternalLinkage, init, ".str"); *gIR->module, init->getType(), true, llvm::GlobalValue::InternalLinkage, init, ".str");
gvar->setUnnamedAddr(true); gvar->setUnnamedAddr(true);
@ -691,12 +687,8 @@ LLConstant* DtoConstString(const char* str)
LLConstant* DtoConstStringPtr(const char* str, const char* section) LLConstant* DtoConstStringPtr(const char* str, const char* section)
{ {
llvm::StringRef s(str); llvm::StringRef s(str);
#if LDC_LLVM_VER == 300 LLConstant* init = llvm::ConstantDataArray::getString(gIR->context(), s, true);
LLConstant* init = LLConstantArray::get(gIR->context(), s, true);
#else
LLConstant* init = llvm::ConstantDataArray::getString(gIR->context(), s, true);
#endif
llvm::GlobalVariable* gvar = new llvm::GlobalVariable( llvm::GlobalVariable* gvar = new llvm::GlobalVariable(
*gIR->module, init->getType(), true, llvm::GlobalValue::InternalLinkage, init, ".str"); *gIR->module, init->getType(), true, llvm::GlobalValue::InternalLinkage, init, ".str");
if (section) gvar->setSection(section); if (section) gvar->setSection(section);