Mercurial > projects > ldc
view ir/irvar.cpp @ 1287:6c8af78364f5
There's an issue with LLVM metadata support; it triggers an assert when trying
to generate asm for code with metadata globals.
This new pass is used as a workaround: it strips metadata from the module before
it reaches the code generator.
Obviously, this is disabled if LLVM doesn't support metadata.
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Sat, 02 May 2009 12:19:43 +0200 |
parents | 212ec2d9d176 |
children | 0c03ba6f7c24 |
line wrap: on
line source
#include "gen/llvm.h" #include "declaration.h" #include "ir/irvar.h" ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// IrVar::IrVar(VarDeclaration* var) { V = var; value = NULL; } ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// IrGlobal::IrGlobal(VarDeclaration* v): IrVar(v), type(llvm::OpaqueType::get()) { constInit = NULL; } ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// IrLocal::IrLocal(VarDeclaration* v) : IrVar(v) { nestedIndex = -1; } ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// IrField::IrField(VarDeclaration* v, size_t idx, size_t offset) : IrVar(v) { index = idx; unionOffset = offset; constInit = NULL; assert(V->ir.irField == NULL && "field for this variable already exists"); V->ir.irField = this; } extern LLConstant* get_default_initializer( VarDeclaration* vd, Initializer* init); llvm::Constant * IrField::getDefaultInit() { if (constInit) return constInit; constInit = get_default_initializer(V, V->init); return constInit; } ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////