mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-05 01:20:51 +03:00
48 lines
1.2 KiB
C++
48 lines
1.2 KiB
C++
//===-- irmodule.cpp ------------------------------------------------------===//
|
||
//
|
||
// LDC – the LLVM D compiler
|
||
//
|
||
// This file is distributed under the BSD-style LDC license. See the LICENSE
|
||
// file for details.
|
||
//
|
||
//===----------------------------------------------------------------------===//
|
||
|
||
#include "ir/irmodule.h"
|
||
#include "module.h"
|
||
#include "gen/llvm.h"
|
||
#include "gen/irstate.h"
|
||
#include "gen/tollvm.h"
|
||
#include "ir/irdsymbol.h"
|
||
#include "ir/irfunction.h"
|
||
|
||
IrModule::IrModule(Module *module) : M(module) {}
|
||
|
||
llvm::GlobalVariable *IrModule::moduleInfoSymbol() {
|
||
if (moduleInfoVar) {
|
||
return moduleInfoVar;
|
||
}
|
||
|
||
std::string name("_D");
|
||
name.append(mangle(M));
|
||
name.append("12__ModuleInfoZ");
|
||
|
||
moduleInfoVar = new llvm::GlobalVariable(
|
||
gIR->module, llvm::StructType::create(gIR->context()), false,
|
||
llvm::GlobalValue::ExternalLinkage, nullptr, name);
|
||
return moduleInfoVar;
|
||
}
|
||
|
||
IrModule *getIrModule(Module *m) {
|
||
if (!m) {
|
||
m = gIR->func()->decl->getModule();
|
||
}
|
||
|
||
assert(m && "null module");
|
||
if (m->ir->m_type == IrDsymbol::NotSet) {
|
||
m->ir->irModule = new IrModule(m);
|
||
m->ir->m_type = IrDsymbol::ModuleType;
|
||
}
|
||
|
||
assert(m->ir->m_type == IrDsymbol::ModuleType);
|
||
return m->ir->irModule;
|
||
}
|