Add more LLVM library bindings to rustc.

This commit is contained in:
Graydon Hoare 2010-08-12 12:10:36 -07:00
parent bc0d1fbae5
commit 5267b77d3b

View File

@ -20,6 +20,14 @@ native mod llvm = "libLLVM-2.7.so" {
type PassManagerRef;
type UseRef;
/* FIXME: These are enums in the C header. Represent them how, in rust? */
type Linkage;
type Attribute;
type Visibility;
type CallConv;
type IntPredicate;
type RealPredicate;
type Opcode;
/* Create and destroy contexts. */
fn ContextCreate() -> ContextRef;
@ -29,7 +37,7 @@ native mod llvm = "libLLVM-2.7.so" {
fn GetMDKindID(sbuf Name, uint SLen) -> uint;
/* Create and destroy modules. */
fn ModuleCreateWithName(sbuf ModuleID) -> ModuleRef;
fn ModuleCreateWithNameInContext(sbuf ModuleID, ContextRef C) -> ModuleRef;
fn DisposeModule(ModuleRef M);
/** Data layout. See Module::getDataLayout. */
@ -274,4 +282,344 @@ native mod llvm = "libLLVM-2.7.so" {
Bool HasSideEffects, Bool IsAlignStack) -> ValueRef;
fn BlockAddress(ValueRef F, BasicBlockRef BB) -> ValueRef;
}
/* Operations on global variables, functions, and aliases (globals) */
fn GetGlobalParent(ValueRef Global) -> ModuleRef;
fn IsDeclaration(ValueRef Global) -> Bool;
fn GetLinkage(ValueRef Global) -> Linkage;
fn SetLinkage(ValueRef Global, Linkage Link);
fn GetSection(ValueRef Global) -> sbuf;
fn SetSection(ValueRef Global, sbuf Section);
fn GetVisibility(ValueRef Global) -> Visibility;
fn SetVisibility(ValueRef Global, Visibility Viz);
fn GetAlignment(ValueRef Global) -> uint;
fn SetAlignment(ValueRef Global, uint Bytes);
/* Operations on global variables */
fn AddGlobal(ModuleRef M, TypeRef Ty, sbuf Name) -> ValueRef;
fn AddGlobalInAddressSpace(ModuleRef M, TypeRef Ty,
sbuf Name,
uint AddressSpace) -> ValueRef;
fn GetNamedGlobal(ModuleRef M, sbuf Name) -> ValueRef;
fn GetFirstGlobal(ModuleRef M) -> ValueRef;
fn GetLastGlobal(ModuleRef M) -> ValueRef;
fn GetNextGlobal(ValueRef GlobalVar) -> ValueRef;
fn GetPreviousGlobal(ValueRef GlobalVar) -> ValueRef;
fn DeleteGlobal(ValueRef GlobalVar);
fn GetInitializer(ValueRef GlobalVar) -> ValueRef;
fn SetInitializer(ValueRef GlobalVar, ValueRef ConstantVal);
fn IsThreadLocal(ValueRef GlobalVar) -> Bool;
fn SetThreadLocal(ValueRef GlobalVar, Bool IsThreadLocal);
fn IsGlobalConstant(ValueRef GlobalVar) -> Bool;
fn SetGlobalConstant(ValueRef GlobalVar, Bool IsConstant);
/* Operations on aliases */
fn AddAlias(ModuleRef M, TypeRef Ty, ValueRef Aliasee,
sbuf Name) -> ValueRef;
/* Operations on functions */
fn AddFunction(ModuleRef M, sbuf Name,
TypeRef FunctionTy) -> ValueRef;
fn GetNamedFunction(ModuleRef M, sbuf Name) -> ValueRef;
fn GetFirstFunction(ModuleRef M) -> ValueRef;
fn GetLastFunction(ModuleRef M) -> ValueRef;
fn GetNextFunction(ValueRef Fn) -> ValueRef;
fn GetPreviousFunction(ValueRef Fn) -> ValueRef;
fn DeleteFunction(ValueRef Fn);
fn GetIntrinsicID(ValueRef Fn) -> uint;
fn GetFunctionCallConv(ValueRef Fn) -> uint;
fn SetFunctionCallConv(ValueRef Fn, uint CC);
fn GetGC(ValueRef Fn) -> sbuf;
fn SetGC(ValueRef Fn, sbuf Name);
fn AddFunctionAttr(ValueRef Fn, Attribute PA);
fn GetFunctionAttr(ValueRef Fn) -> Attribute;
fn RemoveFunctionAttr(ValueRef Fn, Attribute PA);
/* Operations on parameters */
fn CountParams(ValueRef Fn) -> uint;
fn GetParams(ValueRef Fn, vbuf Params);
fn GetParam(ValueRef Fn, uint Index) -> ValueRef;
fn GetParamParent(ValueRef Inst) -> ValueRef;
fn GetFirstParam(ValueRef Fn) -> ValueRef;
fn GetLastParam(ValueRef Fn) -> ValueRef;
fn GetNextParam(ValueRef Arg) -> ValueRef;
fn GetPreviousParam(ValueRef Arg) -> ValueRef;
fn AddAttribute(ValueRef Arg, Attribute PA);
fn RemoveAttribute(ValueRef Arg, Attribute PA);
fn GetAttribute(ValueRef Arg) -> Attribute;
fn SetParamAlignment(ValueRef Arg, uint align);
/* Operations on basic blocks */
fn BasicBlockAsValue(BasicBlockRef BB) -> ValueRef;
fn ValueIsBasicBlock(ValueRef Val) -> Bool;
fn ValueAsBasicBlock(ValueRef Val) -> BasicBlockRef;
fn GetBasicBlockParent(BasicBlockRef BB) -> ValueRef;
fn CountBasicBlocks(ValueRef Fn) -> uint;
fn GetBasicBlocks(ValueRef Fn, vbuf BasicBlocks);
fn GetFirstBasicBlock(ValueRef Fn) -> BasicBlockRef;
fn GetLastBasicBlock(ValueRef Fn) -> BasicBlockRef;
fn GetNextBasicBlock(BasicBlockRef BB) -> BasicBlockRef;
fn GetPreviousBasicBlock(BasicBlockRef BB) -> BasicBlockRef;
fn GetEntryBasicBlock(ValueRef Fn) -> BasicBlockRef;
fn AppendBasicBlockInContext(ContextRef C, ValueRef Fn,
sbuf Name) -> BasicBlockRef;
fn InsertBasicBlockInContext(ContextRef C, BasicBlockRef BB,
sbuf Name) -> BasicBlockRef;
fn AppendBasicBlock(ValueRef Fn, sbuf Name) -> BasicBlockRef;
fn InsertBasicBlock(BasicBlockRef InsertBeforeBB,
sbuf Name) -> BasicBlockRef;
fn DeleteBasicBlock(BasicBlockRef BB);
/* Operations on instructions */
fn GetInstructionParent(ValueRef Inst) -> BasicBlockRef;
fn GetFirstInstruction(BasicBlockRef BB) -> ValueRef;
fn GetLastInstruction(BasicBlockRef BB) -> ValueRef;
fn GetNextInstruction(ValueRef Inst) -> ValueRef;
fn GetPreviousInstruction(ValueRef Inst) -> ValueRef;
/* Operations on call sites */
fn SetInstructionCallConv(ValueRef Instr, uint CC);
fn GetInstructionCallConv(ValueRef Instr) -> uint;
fn AddInstrAttribute(ValueRef Instr, uint index, Attribute IA);
fn RemoveInstrAttribute(ValueRef Instr, uint index, Attribute IA);
fn SetInstrParamAlignment(ValueRef Instr, uint index, uint align);
/* Operations on call instructions (only) */
fn IsTailCall(ValueRef CallInst) -> Bool;
fn SetTailCall(ValueRef CallInst, Bool IsTailCall);
/* Operations on phi nodes */
fn AddIncoming(ValueRef PhiNode, vbuf IncomingValues,
vbuf IncomingBlocks, uint Count);
fn CountIncoming(ValueRef PhiNode) -> uint;
fn GetIncomingValue(ValueRef PhiNode, uint Index) -> ValueRef;
fn GetIncomingBlock(ValueRef PhiNode, uint Index) -> BasicBlockRef;
/* Instruction builders */
fn CreateBuilderInContext(ContextRef C) -> BuilderRef;
fn CreateBuilder() -> BuilderRef;
fn PositionBuilder(BuilderRef Builder, BasicBlockRef Block,
ValueRef Instr);
fn PositionBuilderBefore(BuilderRef Builder, ValueRef Instr);
fn PositionBuilderAtEnd(BuilderRef Builder, BasicBlockRef Block);
fn GetInsertBlock(BuilderRef Builder) -> BasicBlockRef;
fn ClearInsertionPosition(BuilderRef Builder);
fn InsertIntoBuilder(BuilderRef Builder, ValueRef Instr);
fn InsertIntoBuilderWithName(BuilderRef Builder, ValueRef Instr,
sbuf Name);
fn DisposeBuilder(BuilderRef Builder);
/* Metadata */
fn SetCurrentDebugLocation(BuilderRef Builder, ValueRef L);
fn GetCurrentDebugLocation(BuilderRef Builder) -> ValueRef;
fn SetInstDebugLocation(BuilderRef Builder, ValueRef Inst);
/* Terminators */
fn BuildRetVoid(BuilderRef B) -> ValueRef;
fn BuildRet(BuilderRef B, ValueRef V) -> ValueRef;
fn BuildAggregateRet(BuilderRef B, vbuf RetVals,
uint N) -> ValueRef;
fn BuildBr(BuilderRef B, BasicBlockRef Dest) -> ValueRef;
fn BuildCondBr(BuilderRef B, ValueRef If,
BasicBlockRef Then, BasicBlockRef Else) -> ValueRef;
fn BuildSwitch(BuilderRef B, ValueRef V,
BasicBlockRef Else, uint NumCases) -> ValueRef;
fn BuildIndirectBr(BuilderRef B, ValueRef Addr,
uint NumDests) -> ValueRef;
fn BuildInvoke(BuilderRef B, ValueRef Fn,
vbuf Args, uint NumArgs,
BasicBlockRef Then, BasicBlockRef Catch,
sbuf Name) -> ValueRef;
fn BuildUnwind(BuilderRef B) -> ValueRef;
fn BuildUnreachable(BuilderRef B) -> ValueRef;
/* Add a case to the switch instruction */
fn AddCase(ValueRef Switch, ValueRef OnVal,
BasicBlockRef Dest);
/* Add a destination to the indirectbr instruction */
fn AddDestination(ValueRef IndirectBr, BasicBlockRef Dest);
/* Arithmetic */
fn BuildAdd(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildNSWAdd(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildNUWAdd(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildFAdd(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildSub(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildNSWSub(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildNUWSub(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildFSub(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildMul(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildNSWMul(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildNUWMul(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildFMul(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildUDiv(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildSDiv(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildExactSDiv(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildFDiv(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildURem(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildSRem(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildFRem(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildShl(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildLShr(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildAShr(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildAnd(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildOr(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildXor(BuilderRef B, ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildBinOp(BuilderRef B, Opcode Op,
ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildNeg(BuilderRef B, ValueRef V, sbuf Name) -> ValueRef;
fn BuildNSWNeg(BuilderRef B, ValueRef V,
sbuf Name) -> ValueRef;
fn BuildNUWNeg(BuilderRef B, ValueRef V,
sbuf Name) -> ValueRef;
fn BuildFNeg(BuilderRef B, ValueRef V, sbuf Name) -> ValueRef;
fn BuildNot(BuilderRef B, ValueRef V, sbuf Name) -> ValueRef;
/* Memory */
fn BuildMalloc(BuilderRef B, TypeRef Ty, sbuf Name) -> ValueRef;
fn BuildArrayMalloc(BuilderRef B, TypeRef Ty,
ValueRef Val, sbuf Name) -> ValueRef;
fn BuildAlloca(BuilderRef B, TypeRef Ty, sbuf Name) -> ValueRef;
fn BuildArrayAlloca(BuilderRef B, TypeRef Ty,
ValueRef Val, sbuf Name) -> ValueRef;
fn BuildFree(BuilderRef B, ValueRef PointerVal) -> ValueRef;
fn BuildLoad(BuilderRef B, ValueRef PointerVal,
sbuf Name) -> ValueRef;
fn BuildStore(BuilderRef B, ValueRef Val, ValueRef Ptr) -> ValueRef;
fn BuildGEP(BuilderRef B, ValueRef Pointer,
vbuf Indices, uint NumIndices,
sbuf Name) -> ValueRef;
fn BuildInBoundsGEP(BuilderRef B, ValueRef Pointer,
vbuf Indices, uint NumIndices,
sbuf Name) -> ValueRef;
fn BuildStructGEP(BuilderRef B, ValueRef Pointer,
uint Idx, sbuf Name) -> ValueRef;
fn BuildGlobalString(BuilderRef B, sbuf Str,
sbuf Name) -> ValueRef;
fn BuildGlobalStringPtr(BuilderRef B, sbuf Str,
sbuf Name) -> ValueRef;
/* Casts */
fn BuildTrunc(BuilderRef B, ValueRef Val,
TypeRef DestTy, sbuf Name) -> ValueRef;
fn BuildZExt(BuilderRef B, ValueRef Val,
TypeRef DestTy, sbuf Name) -> ValueRef;
fn BuildSExt(BuilderRef B, ValueRef Val,
TypeRef DestTy, sbuf Name) -> ValueRef;
fn BuildFPToUI(BuilderRef B, ValueRef Val,
TypeRef DestTy, sbuf Name) -> ValueRef;
fn BuildFPToSI(BuilderRef B, ValueRef Val,
TypeRef DestTy, sbuf Name) -> ValueRef;
fn BuildUIToFP(BuilderRef B, ValueRef Val,
TypeRef DestTy, sbuf Name) -> ValueRef;
fn BuildSIToFP(BuilderRef B, ValueRef Val,
TypeRef DestTy, sbuf Name) -> ValueRef;
fn BuildFPTrunc(BuilderRef B, ValueRef Val,
TypeRef DestTy, sbuf Name) -> ValueRef;
fn BuildFPExt(BuilderRef B, ValueRef Val,
TypeRef DestTy, sbuf Name) -> ValueRef;
fn BuildPtrToInt(BuilderRef B, ValueRef Val,
TypeRef DestTy, sbuf Name) -> ValueRef;
fn BuildIntToPtr(BuilderRef B, ValueRef Val,
TypeRef DestTy, sbuf Name) -> ValueRef;
fn BuildBitCast(BuilderRef B, ValueRef Val,
TypeRef DestTy, sbuf Name) -> ValueRef;
fn BuildZExtOrBitCast(BuilderRef B, ValueRef Val,
TypeRef DestTy, sbuf Name) -> ValueRef;
fn BuildSExtOrBitCast(BuilderRef B, ValueRef Val,
TypeRef DestTy, sbuf Name) -> ValueRef;
fn BuildTruncOrBitCast(BuilderRef B, ValueRef Val,
TypeRef DestTy, sbuf Name) -> ValueRef;
fn BuildCast(BuilderRef B, Opcode Op, ValueRef Val,
TypeRef DestTy, sbuf Name) -> ValueRef;
fn BuildPointerCast(BuilderRef B, ValueRef Val,
TypeRef DestTy, sbuf Name) -> ValueRef;
fn BuildIntCast(BuilderRef B, ValueRef Val,
TypeRef DestTy, sbuf Name) -> ValueRef;
fn BuildFPCast(BuilderRef B, ValueRef Val,
TypeRef DestTy, sbuf Name) -> ValueRef;
/* Comparisons */
fn BuildICmp(BuilderRef B, IntPredicate Op,
ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
fn BuildFCmp(BuilderRef B, RealPredicate Op,
ValueRef LHS, ValueRef RHS,
sbuf Name) -> ValueRef;
/* Miscellaneous instructions */
fn BuildPhi(BuilderRef B, TypeRef Ty, sbuf Name) -> ValueRef;
fn BuildCall(BuilderRef B, ValueRef Fn,
vbuf Args, uint NumArgs,
sbuf Name) -> ValueRef;
fn BuildSelect(BuilderRef B, ValueRef If,
ValueRef Then, ValueRef Else,
sbuf Name) -> ValueRef;
fn BuildVAArg(BuilderRef B, ValueRef List, TypeRef Ty,
sbuf Name) -> ValueRef;
fn BuildExtractElement(BuilderRef B, ValueRef VecVal,
ValueRef Index, sbuf Name) -> ValueRef;
fn BuildInsertElement(BuilderRef B, ValueRef VecVal,
ValueRef EltVal, ValueRef Index,
sbuf Name) -> ValueRef;
fn BuildShuffleVector(BuilderRef B, ValueRef V1,
ValueRef V2, ValueRef Mask,
sbuf Name) -> ValueRef;
fn BuildExtractValue(BuilderRef B, ValueRef AggVal,
uint Index, sbuf Name) -> ValueRef;
fn BuildInsertValue(BuilderRef B, ValueRef AggVal,
ValueRef EltVal, uint Index,
sbuf Name) -> ValueRef;
fn BuildIsNull(BuilderRef B, ValueRef Val,
sbuf Name) -> ValueRef;
fn BuildIsNotNull(BuilderRef B, ValueRef Val,
sbuf Name) -> ValueRef;
fn BuildPtrDiff(BuilderRef B, ValueRef LHS,
ValueRef RHS, sbuf Name) -> ValueRef;
}
//
// Local Variables:
// mode: rust
// fill-column: 78;
// indent-tabs-mode: nil
// c-basic-offset: 4
// buffer-file-coding-system: utf-8-unix
// compile-command: "make -k -C ../.. 2>&1 | sed -e 's/\\/x\\//x:\\//g'";
// End:
//