mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-09-04 09:30:13 +00:00
I asked Devang to do back on Sep 27. Instead of going through the MetadataContext class with methods like getMD() and getMDs(), just ask the instruction directly for its metadata with getMetadata() and getAllMetadata(). This includes a variety of other fixes and improvements: previously all Value*'s were bloated because the HasMetadata bit was thrown into value, adding a 9th bit to a byte. Now this is properly sunk down to the Instruction class (the only place where it makes sense) and it will be folded away somewhere soon. This also fixes some confusion in getMDs and its clients about whether the returned list is indexed by the MDID or densely packed. This is now returned sorted and densely packed and the comments make this clear. This introduces a number of fixme's which I'll follow up on. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92235 91177308-0d34-0410-b5e6-96231b3b80d8
53 lines
2.0 KiB
C++
53 lines
2.0 KiB
C++
//===---- IRBuilder.cpp - Builder for LLVM Instrs -------------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file implements the IRBuilder class, which is used as a convenient way
|
|
// to create LLVM instructions with a consistent and simplified interface.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Support/IRBuilder.h"
|
|
#include "llvm/GlobalVariable.h"
|
|
#include "llvm/Function.h"
|
|
#include "llvm/Metadata.h"
|
|
#include "llvm/LLVMContext.h"
|
|
using namespace llvm;
|
|
|
|
/// CreateGlobalString - Make a new global variable with an initializer that
|
|
/// has array of i8 type filled in the the nul terminated string value
|
|
/// specified. If Name is specified, it is the name of the global variable
|
|
/// created.
|
|
Value *IRBuilderBase::CreateGlobalString(const char *Str, const Twine &Name) {
|
|
Constant *StrConstant = ConstantArray::get(Context, Str, true);
|
|
Module &M = *BB->getParent()->getParent();
|
|
GlobalVariable *GV = new GlobalVariable(M, StrConstant->getType(),
|
|
true, GlobalValue::InternalLinkage,
|
|
StrConstant, "", 0, false);
|
|
GV->setName(Name);
|
|
return GV;
|
|
}
|
|
|
|
/// SetCurrentDebugLocation - Set location information used by debugging
|
|
/// information.
|
|
void IRBuilderBase::SetCurrentDebugLocation(MDNode *L) {
|
|
if (DbgMDKind == 0)
|
|
DbgMDKind = Context.getMetadata().getMDKindID("dbg");
|
|
CurDbgLocation = L;
|
|
}
|
|
|
|
void IRBuilderBase::SetInstDebugLocation(Instruction *I) const {
|
|
if (CurDbgLocation)
|
|
I->setMetadata(DbgMDKind, CurDbgLocation);
|
|
}
|
|
|
|
const Type *IRBuilderBase::getCurrentFunctionReturnType() const {
|
|
assert(BB && BB->getParent() && "No current function!");
|
|
return BB->getParent()->getReturnType();
|
|
}
|