X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FVMCore%2FCore.cpp;h=f85dbe76119e0e9b1c224d250e4d5c53f18dc267;hb=b983d67465a939c43173e381f9063d9d9245f45b;hp=bb4f43d69ae16f2d904fff9033563e01fb84a1cf;hpb=4d515d0b09d43af59cd040bfb8bf1b7a2b992980;p=oota-llvm.git diff --git a/lib/VMCore/Core.cpp b/lib/VMCore/Core.cpp index bb4f43d69ae..f85dbe76119 100644 --- a/lib/VMCore/Core.cpp +++ b/lib/VMCore/Core.cpp @@ -17,8 +17,11 @@ #include "llvm/Constants.h" #include "llvm/DerivedTypes.h" #include "llvm/GlobalVariable.h" +#include "llvm/GlobalAlias.h" #include "llvm/TypeSymbolTable.h" #include "llvm/ModuleProvider.h" +#include "llvm/InlineAsm.h" +#include "llvm/IntrinsicInst.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/CallSite.h" #include @@ -250,6 +253,17 @@ void LLVMDumpValue(LLVMValueRef Val) { unwrap(Val)->dump(); } + +/*--.. Conversion functions ................................................--*/ + +#define LLVM_DEFINE_VALUE_CAST(name) \ + LLVMValueRef LLVMIsA##name(LLVMValueRef Val) { \ + return wrap(static_cast(dyn_cast_or_null(unwrap(Val)))); \ + } + +LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DEFINE_VALUE_CAST) + + /*--.. Operations on constants of any type .................................--*/ LLVMValueRef LLVMConstNull(LLVMTypeRef Ty) { @@ -302,7 +316,9 @@ static const fltSemantics &SemanticsForType(Type *Ty) { LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N) { APFloat APN(N); - APN.convert(SemanticsForType(unwrap(RealTy)), APFloat::rmNearestTiesToEven); + bool ignored; + APN.convert(SemanticsForType(unwrap(RealTy)), APFloat::rmNearestTiesToEven, + &ignored); return wrap(ConstantFP::get(APN)); } @@ -340,6 +356,10 @@ LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size) { /*--.. Constant expressions ................................................--*/ +LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty) { + return wrap(ConstantExpr::getAlignOf(unwrap(Ty))); +} + LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty) { return wrap(ConstantExpr::getSizeOf(unwrap(Ty))); } @@ -539,6 +559,26 @@ LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant, unwrap(MaskConstant))); } +LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList, + unsigned NumIdx) { + return wrap(ConstantExpr::getExtractValue(unwrap(AggConstant), + IdxList, NumIdx)); +} + +LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant, + LLVMValueRef ElementValueConstant, + unsigned *IdxList, unsigned NumIdx) { + return wrap(ConstantExpr::getInsertValue(unwrap(AggConstant), + unwrap(ElementValueConstant), + IdxList, NumIdx)); +} + +LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty, const char *AsmString, + const char *Constraints, int HasSideEffects) { + return wrap(InlineAsm::get(dyn_cast(unwrap(Ty)), AsmString, + Constraints, HasSideEffects)); +} + /*--.. Operations on global variables, functions, and aliases (globals) ....--*/ LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global) { @@ -632,10 +672,6 @@ void LLVMDeleteGlobal(LLVMValueRef GlobalVar) { unwrap(GlobalVar)->eraseFromParent(); } -int LLVMHasInitializer(LLVMValueRef GlobalVar) { - return unwrap(GlobalVar)->hasInitializer(); -} - LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar) { return wrap(unwrap(GlobalVar)->getInitializer()); } @@ -661,6 +697,14 @@ void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, int IsConstant) { unwrap(GlobalVar)->setConstant(IsConstant != 0); } +/*--.. Operations on aliases ......................................--*/ + +LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee, + const char *Name) { + return wrap(new GlobalAlias(unwrap(Ty), GlobalValue::ExternalLinkage, Name, + unwrap(Aliasee), unwrap (M))); +} + /*--.. Operations on functions .............................................--*/ LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name, @@ -723,17 +767,31 @@ void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC) { return unwrap(Fn)->setCallingConv(CC); } -const char *LLVMGetCollector(LLVMValueRef Fn) { +const char *LLVMGetGC(LLVMValueRef Fn) { Function *F = unwrap(Fn); - return F->hasCollector()? F->getCollector() : 0; + return F->hasGC()? F->getGC() : 0; } -void LLVMSetCollector(LLVMValueRef Fn, const char *Coll) { +void LLVMSetGC(LLVMValueRef Fn, const char *GC) { Function *F = unwrap(Fn); - if (Coll) - F->setCollector(Coll); + if (GC) + F->setGC(GC); else - F->clearCollector(); + F->clearGC(); +} + +void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA) { + Function *Func = unwrap(Fn); + const AttrListPtr PAL = Func->getAttributes(); + const AttrListPtr PALnew = PAL.addAttr(0, PA); + Func->setAttributes(PALnew); +} + +void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA) { + Function *Func = unwrap(Fn); + const AttrListPtr PAL = Func->getAttributes(); + const AttrListPtr PALnew = PAL.removeAttr(0, PA); + Func->setAttributes(PALnew); } /*--.. Operations on parameters ............................................--*/ @@ -794,17 +852,17 @@ LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg) { return wrap(--I); } -void LLVMAddParamAttr(LLVMValueRef Arg, LLVMParamAttr PA) { +void LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA) { unwrap(Arg)->addAttr(PA); } -void LLVMRemoveParamAttr(LLVMValueRef Arg, LLVMParamAttr PA) { +void LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA) { unwrap(Arg)->removeAttr(PA); } void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align) { unwrap(Arg)->addAttr( - ParamAttr::constructAlignmentFromInt(align)); + Attribute::constructAlignmentFromInt(align)); } /*--.. Operations on basic blocks ..........................................--*/ @@ -945,26 +1003,36 @@ void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC) { assert(0 && "LLVMSetInstructionCallConv applies only to call and invoke!"); } -void LLVMAddInstrParamAttr(LLVMValueRef Instr, unsigned index, - LLVMParamAttr PA) { +void LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, + LLVMAttribute PA) { CallSite Call = CallSite(unwrap(Instr)); - Call.setParamAttrs( - Call.getParamAttrs().addAttr(index, PA)); + Call.setAttributes( + Call.getAttributes().addAttr(index, PA)); } -void LLVMRemoveInstrParamAttr(LLVMValueRef Instr, unsigned index, - LLVMParamAttr PA) { +void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index, + LLVMAttribute PA) { CallSite Call = CallSite(unwrap(Instr)); - Call.setParamAttrs( - Call.getParamAttrs().removeAttr(index, PA)); + Call.setAttributes( + Call.getAttributes().removeAttr(index, PA)); } void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index, unsigned align) { CallSite Call = CallSite(unwrap(Instr)); - Call.setParamAttrs( - Call.getParamAttrs().addAttr(index, - ParamAttr::constructAlignmentFromInt(align))); + Call.setAttributes( + Call.getAttributes().addAttr(index, + Attribute::constructAlignmentFromInt(align))); +} + +/*--.. Operations on call instructions (only) ..............................--*/ + +int LLVMIsTailCall(LLVMValueRef Call) { + return unwrap(Call)->isTailCall(); +} + +void LLVMSetTailCall(LLVMValueRef Call, int isTailCall) { + unwrap(Call)->setTailCall(isTailCall); } /*--.. Operations on phi nodes .............................................--*/ @@ -992,7 +1060,7 @@ LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index) { /*===-- Instruction builders ----------------------------------------------===*/ LLVMBuilderRef LLVMCreateBuilder(void) { - return wrap(new IRBuilder()); + return wrap(new IRBuilder<>()); } void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block, @@ -1016,6 +1084,14 @@ LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder) { return wrap(unwrap(Builder)->GetInsertBlock()); } +void LLVMClearInsertionPosition(LLVMBuilderRef Builder) { + unwrap(Builder)->ClearInsertionPoint (); +} + +void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr) { + unwrap(Builder)->Insert(unwrap(Instr)); +} + void LLVMDisposeBuilder(LLVMBuilderRef Builder) { delete unwrap(Builder); } @@ -1318,6 +1394,18 @@ LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef B, LLVMValueRef V1, unwrap(Mask), Name)); } +LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef B, LLVMValueRef AggVal, + unsigned Index, const char *Name) { + return wrap(unwrap(B)->CreateExtractValue(unwrap(AggVal), Index, Name)); +} + +LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef B, LLVMValueRef AggVal, + LLVMValueRef EltVal, unsigned Index, + const char *Name) { + return wrap(unwrap(B)->CreateInsertValue(unwrap(AggVal), unwrap(EltVal), + Index, Name)); +} + /*===-- Module providers --------------------------------------------------===*/