diff options
Diffstat (limited to 'bindings/go/llvm/ir.go')
-rw-r--r-- | bindings/go/llvm/ir.go | 72 |
1 files changed, 47 insertions, 25 deletions
diff --git a/bindings/go/llvm/ir.go b/bindings/go/llvm/ir.go index 222097034307..a336c0ef44c7 100644 --- a/bindings/go/llvm/ir.go +++ b/bindings/go/llvm/ir.go @@ -15,6 +15,7 @@ package llvm /* #include "llvm-c/Core.h" +#include "llvm-c/Comdat.h" #include "IRBindings.h" #include <stdlib.h> */ @@ -37,6 +38,9 @@ type ( Value struct { C C.LLVMValueRef } + Comdat struct { + C C.LLVMComdatRef + } BasicBlock struct { C C.LLVMBasicBlockRef } @@ -61,14 +65,15 @@ type ( Attribute struct { C C.LLVMAttributeRef } - Opcode C.LLVMOpcode - TypeKind C.LLVMTypeKind - Linkage C.LLVMLinkage - Visibility C.LLVMVisibility - CallConv C.LLVMCallConv - IntPredicate C.LLVMIntPredicate - FloatPredicate C.LLVMRealPredicate - LandingPadClause C.LLVMLandingPadClauseTy + Opcode C.LLVMOpcode + TypeKind C.LLVMTypeKind + Linkage C.LLVMLinkage + Visibility C.LLVMVisibility + CallConv C.LLVMCallConv + ComdatSelectionKind C.LLVMComdatSelectionKind + IntPredicate C.LLVMIntPredicate + FloatPredicate C.LLVMRealPredicate + LandingPadClause C.LLVMLandingPadClauseTy ) func (c Context) IsNil() bool { return c.C == nil } @@ -249,6 +254,18 @@ const ( ) //------------------------------------------------------------------------- +// llvm.ComdatSelectionKind +//------------------------------------------------------------------------- + +const ( + AnyComdatSelectionKind ComdatSelectionKind = C.LLVMAnyComdatSelectionKind + ExactMatchComdatSelectionKind ComdatSelectionKind = C.LLVMExactMatchComdatSelectionKind + LargestComdatSelectionKind ComdatSelectionKind = C.LLVMLargestComdatSelectionKind + NoDuplicatesComdatSelectionKind ComdatSelectionKind = C.LLVMNoDuplicatesComdatSelectionKind + SameSizeComdatSelectionKind ComdatSelectionKind = C.LLVMSameSizeComdatSelectionKind +) + +//------------------------------------------------------------------------- // llvm.IntPredicate //------------------------------------------------------------------------- @@ -767,11 +784,6 @@ func (c Context) MDNode(mds []Metadata) (md Metadata) { md.C = C.LLVMMDNode2(c.C, ptr, nvals) return } -func (c Context) TemporaryMDNode(mds []Metadata) (md Metadata) { - ptr, nvals := llvmMetadataRefs(mds) - md.C = C.LLVMTemporaryMDNode(c.C, ptr, nvals) - return -} func (v Value) ConstantAsMetadata() (md Metadata) { md.C = C.LLVMConstantAsMetadata(v.C) return @@ -1020,6 +1032,8 @@ func (v Value) IsThreadLocal() bool { return C.LLVMIsThreadLocal(v.C) != 0 func (v Value) SetThreadLocal(tl bool) { C.LLVMSetThreadLocal(v.C, boolToLLVMBool(tl)) } func (v Value) IsGlobalConstant() bool { return C.LLVMIsGlobalConstant(v.C) != 0 } func (v Value) SetGlobalConstant(gc bool) { C.LLVMSetGlobalConstant(v.C, boolToLLVMBool(gc)) } +func (v Value) IsVolatile() bool { return C.LLVMGetVolatile(v.C) != 0 } +func (v Value) SetVolatile(volatile bool) { C.LLVMSetVolatile(v.C, boolToLLVMBool(volatile)) } // Operations on aliases func AddAlias(m Module, t Type, aliasee Value, name string) (v Value) { @@ -1029,6 +1043,25 @@ func AddAlias(m Module, t Type, aliasee Value, name string) (v Value) { return } +// Operations on comdat +func (m Module) Comdat(name string) (c Comdat) { + cname := C.CString(name) + defer C.free(unsafe.Pointer(cname)) + c.C = C.LLVMGetOrInsertComdat(m.C, cname) + return +} + +func (v Value) Comdat() (c Comdat) { c.C = C.LLVMGetComdat(v.C); return } +func (v Value) SetComdat(c Comdat) { C.LLVMSetComdat(v.C, c.C) } + +func (c Comdat) SelectionKind() ComdatSelectionKind { + return ComdatSelectionKind(C.LLVMGetComdatSelectionKind(c.C)) +} + +func (c Comdat) SetSelectionKind(k ComdatSelectionKind) { + C.LLVMSetComdatSelectionKind(c.C, (C.LLVMComdatSelectionKind)(k)) +} + // Operations on functions func AddFunction(m Module, name string, ft Type) (v Value) { cname := C.CString(name) @@ -1102,9 +1135,6 @@ func (v Value) AddTargetDependentFunctionAttr(attr, value string) { func (v Value) SetPersonality(p Value) { C.LLVMSetPersonalityFn(v.C, p.C) } -func (v Value) SetSubprogram(sp Metadata) { - C.LLVMSetSubprogram(v.C, sp.C) -} // Operations on parameters func (v Value) ParamsCount() int { return int(C.LLVMCountParams(v.C)) } @@ -1872,7 +1902,7 @@ func (pm PassManager) InitializeFunc() bool { return C.LLVMInitializeFunctionPas // See llvm::FunctionPassManager::run(Function&). func (pm PassManager) RunFunc(f Value) bool { return C.LLVMRunFunctionPassManager(pm.C, f.C) != 0 } -// Finalizes all of the function passes scheduled in in the function pass +// Finalizes all of the function passes scheduled in the function pass // manager. Returns 1 if any of the passes modified the module, 0 otherwise. // See llvm::FunctionPassManager::doFinalization. func (pm PassManager) FinalizeFunc() bool { return C.LLVMFinalizeFunctionPassManager(pm.C) != 0 } @@ -1881,11 +1911,3 @@ func (pm PassManager) FinalizeFunc() bool { return C.LLVMFinalizeFunctionPassMan // the module provider. // See llvm::PassManagerBase::~PassManagerBase. func (pm PassManager) Dispose() { C.LLVMDisposePassManager(pm.C) } - -//------------------------------------------------------------------------- -// llvm.Metadata -//------------------------------------------------------------------------- - -func (md Metadata) ReplaceAllUsesWith(new Metadata) { - C.LLVMMetadataReplaceAllUsesWith(md.C, new.C) -} |