aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/llvm/bindings.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/codegen/llvm/bindings.zig')
-rw-r--r--src/codegen/llvm/bindings.zig278
1 files changed, 186 insertions, 92 deletions
diff --git a/src/codegen/llvm/bindings.zig b/src/codegen/llvm/bindings.zig
index b093588e80..3b99ae1fe1 100644
--- a/src/codegen/llvm/bindings.zig
+++ b/src/codegen/llvm/bindings.zig
@@ -40,21 +40,42 @@ pub const Context = opaque {
pub const halfType = LLVMHalfTypeInContext;
extern fn LLVMHalfTypeInContext(C: *Context) *Type;
+ pub const bfloatType = LLVMBFloatTypeInContext;
+ extern fn LLVMBFloatTypeInContext(C: *Context) *Type;
+
pub const floatType = LLVMFloatTypeInContext;
extern fn LLVMFloatTypeInContext(C: *Context) *Type;
pub const doubleType = LLVMDoubleTypeInContext;
extern fn LLVMDoubleTypeInContext(C: *Context) *Type;
- pub const x86FP80Type = LLVMX86FP80TypeInContext;
- extern fn LLVMX86FP80TypeInContext(C: *Context) *Type;
-
pub const fp128Type = LLVMFP128TypeInContext;
extern fn LLVMFP128TypeInContext(C: *Context) *Type;
+ pub const x86_fp80Type = LLVMX86FP80TypeInContext;
+ extern fn LLVMX86FP80TypeInContext(C: *Context) *Type;
+
+ pub const ppc_fp128Type = LLVMPPCFP128TypeInContext;
+ extern fn LLVMPPCFP128TypeInContext(C: *Context) *Type;
+
+ pub const x86_amxType = LLVMX86AMXTypeInContext;
+ extern fn LLVMX86AMXTypeInContext(C: *Context) *Type;
+
+ pub const x86_mmxType = LLVMX86MMXTypeInContext;
+ extern fn LLVMX86MMXTypeInContext(C: *Context) *Type;
+
pub const voidType = LLVMVoidTypeInContext;
extern fn LLVMVoidTypeInContext(C: *Context) *Type;
+ pub const labelType = LLVMLabelTypeInContext;
+ extern fn LLVMLabelTypeInContext(C: *Context) *Type;
+
+ pub const tokenType = LLVMTokenTypeInContext;
+ extern fn LLVMTokenTypeInContext(C: *Context) *Type;
+
+ pub const metadataType = LLVMMetadataTypeInContext;
+ extern fn LLVMMetadataTypeInContext(C: *Context) *Type;
+
pub const structType = LLVMStructTypeInContext;
extern fn LLVMStructTypeInContext(
C: *Context,
@@ -114,9 +135,6 @@ pub const Value = opaque {
pub const getNextInstruction = LLVMGetNextInstruction;
extern fn LLVMGetNextInstruction(Inst: *Value) ?*Value;
- pub const typeOf = LLVMTypeOf;
- extern fn LLVMTypeOf(Val: *Value) *Type;
-
pub const setGlobalConstant = LLVMSetGlobalConstant;
extern fn LLVMSetGlobalConstant(GlobalVar: *Value, IsConstant: Bool) void;
@@ -147,36 +165,135 @@ pub const Value = opaque {
pub const setAliasee = LLVMAliasSetAliasee;
extern fn LLVMAliasSetAliasee(Alias: *Value, Aliasee: *Value) void;
- pub const constBitCast = LLVMConstBitCast;
- extern fn LLVMConstBitCast(ConstantVal: *Value, ToType: *Type) *Value;
+ pub const constZExtOrBitCast = LLVMConstZExtOrBitCast;
+ extern fn LLVMConstZExtOrBitCast(ConstantVal: *Value, ToType: *Type) *Value;
- pub const constIntToPtr = LLVMConstIntToPtr;
- extern fn LLVMConstIntToPtr(ConstantVal: *Value, ToType: *Type) *Value;
+ pub const constNeg = LLVMConstNeg;
+ extern fn LLVMConstNeg(ConstantVal: *Value) *Value;
- pub const constPtrToInt = LLVMConstPtrToInt;
- extern fn LLVMConstPtrToInt(ConstantVal: *Value, ToType: *Type) *Value;
+ pub const constNSWNeg = LLVMConstNSWNeg;
+ extern fn LLVMConstNSWNeg(ConstantVal: *Value) *Value;
- pub const constShl = LLVMConstShl;
- extern fn LLVMConstShl(LHSConstant: *Value, RHSConstant: *Value) *Value;
+ pub const constNUWNeg = LLVMConstNUWNeg;
+ extern fn LLVMConstNUWNeg(ConstantVal: *Value) *Value;
+
+ pub const constNot = LLVMConstNot;
+ extern fn LLVMConstNot(ConstantVal: *Value) *Value;
+
+ pub const constAdd = LLVMConstAdd;
+ extern fn LLVMConstAdd(LHSConstant: *Value, RHSConstant: *Value) *Value;
+
+ pub const constNSWAdd = LLVMConstNSWAdd;
+ extern fn LLVMConstNSWAdd(LHSConstant: *Value, RHSConstant: *Value) *Value;
+
+ pub const constNUWAdd = LLVMConstNUWAdd;
+ extern fn LLVMConstNUWAdd(LHSConstant: *Value, RHSConstant: *Value) *Value;
+
+ pub const constSub = LLVMConstSub;
+ extern fn LLVMConstSub(LHSConstant: *Value, RHSConstant: *Value) *Value;
+
+ pub const constNSWSub = LLVMConstNSWSub;
+ extern fn LLVMConstNSWSub(LHSConstant: *Value, RHSConstant: *Value) *Value;
+
+ pub const constNUWSub = LLVMConstNUWSub;
+ extern fn LLVMConstNUWSub(LHSConstant: *Value, RHSConstant: *Value) *Value;
+
+ pub const constMul = LLVMConstMul;
+ extern fn LLVMConstMul(LHSConstant: *Value, RHSConstant: *Value) *Value;
+
+ pub const constNSWMul = LLVMConstNSWMul;
+ extern fn LLVMConstNSWMul(LHSConstant: *Value, RHSConstant: *Value) *Value;
+
+ pub const constNUWMul = LLVMConstNUWMul;
+ extern fn LLVMConstNUWMul(LHSConstant: *Value, RHSConstant: *Value) *Value;
+
+ pub const constAnd = LLVMConstAnd;
+ extern fn LLVMConstAnd(LHSConstant: *Value, RHSConstant: *Value) *Value;
pub const constOr = LLVMConstOr;
extern fn LLVMConstOr(LHSConstant: *Value, RHSConstant: *Value) *Value;
+ pub const constXor = LLVMConstXor;
+ extern fn LLVMConstXor(LHSConstant: *Value, RHSConstant: *Value) *Value;
+
+ pub const constShl = LLVMConstShl;
+ extern fn LLVMConstShl(LHSConstant: *Value, RHSConstant: *Value) *Value;
+
+ pub const constLShr = LLVMConstLShr;
+ extern fn LLVMConstLShr(LHSConstant: *Value, RHSConstant: *Value) *Value;
+
+ pub const constAShr = LLVMConstAShr;
+ extern fn LLVMConstAShr(LHSConstant: *Value, RHSConstant: *Value) *Value;
+
+ pub const constTrunc = LLVMConstTrunc;
+ extern fn LLVMConstTrunc(ConstantVal: *Value, ToType: *Type) *Value;
+
+ pub const constSExt = LLVMConstSExt;
+ extern fn LLVMConstSExt(ConstantVal: *Value, ToType: *Type) *Value;
+
pub const constZExt = LLVMConstZExt;
extern fn LLVMConstZExt(ConstantVal: *Value, ToType: *Type) *Value;
- pub const constZExtOrBitCast = LLVMConstZExtOrBitCast;
- extern fn LLVMConstZExtOrBitCast(ConstantVal: *Value, ToType: *Type) *Value;
+ pub const constFPTrunc = LLVMConstFPTrunc;
+ extern fn LLVMConstFPTrunc(ConstantVal: *Value, ToType: *Type) *Value;
- pub const constNot = LLVMConstNot;
- extern fn LLVMConstNot(ConstantVal: *Value) *Value;
+ pub const constFPExt = LLVMConstFPExt;
+ extern fn LLVMConstFPExt(ConstantVal: *Value, ToType: *Type) *Value;
- pub const constAdd = LLVMConstAdd;
- extern fn LLVMConstAdd(LHSConstant: *Value, RHSConstant: *Value) *Value;
+ pub const constUIToFP = LLVMConstUIToFP;
+ extern fn LLVMConstUIToFP(ConstantVal: *Value, ToType: *Type) *Value;
+
+ pub const constSIToFP = LLVMConstSIToFP;
+ extern fn LLVMConstSIToFP(ConstantVal: *Value, ToType: *Type) *Value;
+
+ pub const constFPToUI = LLVMConstFPToUI;
+ extern fn LLVMConstFPToUI(ConstantVal: *Value, ToType: *Type) *Value;
+
+ pub const constFPToSI = LLVMConstFPToSI;
+ extern fn LLVMConstFPToSI(ConstantVal: *Value, ToType: *Type) *Value;
+
+ pub const constPtrToInt = LLVMConstPtrToInt;
+ extern fn LLVMConstPtrToInt(ConstantVal: *Value, ToType: *Type) *Value;
+
+ pub const constIntToPtr = LLVMConstIntToPtr;
+ extern fn LLVMConstIntToPtr(ConstantVal: *Value, ToType: *Type) *Value;
+
+ pub const constBitCast = LLVMConstBitCast;
+ extern fn LLVMConstBitCast(ConstantVal: *Value, ToType: *Type) *Value;
pub const constAddrSpaceCast = LLVMConstAddrSpaceCast;
extern fn LLVMConstAddrSpaceCast(ConstantVal: *Value, ToType: *Type) *Value;
+ pub const constSelect = LLVMConstSelect;
+ extern fn LLVMConstSelect(
+ ConstantCondition: *Value,
+ ConstantIfTrue: *Value,
+ ConstantIfFalse: *Value,
+ ) *Value;
+
+ pub const constExtractElement = LLVMConstExtractElement;
+ extern fn LLVMConstExtractElement(VectorConstant: *Value, IndexConstant: *Value) *Value;
+
+ pub const constInsertElement = LLVMConstInsertElement;
+ extern fn LLVMConstInsertElement(
+ VectorConstant: *Value,
+ ElementValueConstant: *Value,
+ IndexConstant: *Value,
+ ) *Value;
+
+ pub const constShuffleVector = LLVMConstShuffleVector;
+ extern fn LLVMConstShuffleVector(
+ VectorAConstant: *Value,
+ VectorBConstant: *Value,
+ MaskConstant: *Value,
+ ) *Value;
+
+ pub const isConstant = LLVMIsConstant;
+ extern fn LLVMIsConstant(Val: *Value) Bool;
+
+ pub const blockAddress = LLVMBlockAddress;
+ extern fn LLVMBlockAddress(F: *Value, BB: *BasicBlock) *Value;
+
pub const setWeak = LLVMSetWeak;
extern fn LLVMSetWeak(CmpXchgInst: *Value, IsWeak: Bool) void;
@@ -186,6 +303,9 @@ pub const Value = opaque {
pub const setVolatile = LLVMSetVolatile;
extern fn LLVMSetVolatile(MemoryAccessInst: *Value, IsVolatile: Bool) void;
+ pub const setAtomicSingleThread = LLVMSetAtomicSingleThread;
+ extern fn LLVMSetAtomicSingleThread(AtomicInst: *Value, SingleThread: Bool) void;
+
pub const setAlignment = LLVMSetAlignment;
extern fn LLVMSetAlignment(V: *Value, Bytes: c_uint) void;
@@ -231,17 +351,9 @@ pub const Value = opaque {
pub const addCase = LLVMAddCase;
extern fn LLVMAddCase(Switch: *Value, OnVal: *Value, Dest: *BasicBlock) void;
- pub inline fn isPoison(Val: *Value) bool {
- return LLVMIsPoison(Val).toBool();
- }
- extern fn LLVMIsPoison(Val: *Value) Bool;
-
pub const replaceAllUsesWith = LLVMReplaceAllUsesWith;
extern fn LLVMReplaceAllUsesWith(OldVal: *Value, NewVal: *Value) void;
- pub const globalGetValueType = LLVMGlobalGetValueType;
- extern fn LLVMGlobalGetValueType(Global: *Value) *Type;
-
pub const getLinkage = LLVMGetLinkage;
extern fn LLVMGetLinkage(Global: *Value) Linkage;
@@ -259,6 +371,9 @@ pub const Value = opaque {
pub const attachMetaData = ZigLLVMAttachMetaData;
extern fn ZigLLVMAttachMetaData(GlobalVar: *Value, DIG: *DIGlobalVariableExpression) void;
+
+ pub const dump = LLVMDumpValue;
+ extern fn LLVMDumpValue(Val: *Value) void;
};
pub const Type = opaque {
@@ -290,12 +405,18 @@ pub const Type = opaque {
pub const getUndef = LLVMGetUndef;
extern fn LLVMGetUndef(Ty: *Type) *Value;
+ pub const getPoison = LLVMGetPoison;
+ extern fn LLVMGetPoison(Ty: *Type) *Value;
+
pub const arrayType = LLVMArrayType;
extern fn LLVMArrayType(ElementType: *Type, ElementCount: c_uint) *Type;
pub const vectorType = LLVMVectorType;
extern fn LLVMVectorType(ElementType: *Type, ElementCount: c_uint) *Type;
+ pub const scalableVectorType = LLVMScalableVectorType;
+ extern fn LLVMScalableVectorType(ElementType: *Type, ElementCount: c_uint) *Type;
+
pub const structSetBody = LLVMStructSetBody;
extern fn LLVMStructSetBody(
StructTy: *Type,
@@ -304,23 +425,13 @@ pub const Type = opaque {
Packed: Bool,
) void;
- pub const structGetTypeAtIndex = LLVMStructGetTypeAtIndex;
- extern fn LLVMStructGetTypeAtIndex(StructTy: *Type, i: c_uint) *Type;
-
- pub const getTypeKind = LLVMGetTypeKind;
- extern fn LLVMGetTypeKind(Ty: *Type) TypeKind;
-
- pub const getElementType = LLVMGetElementType;
- extern fn LLVMGetElementType(Ty: *Type) *Type;
-
- pub const countStructElementTypes = LLVMCountStructElementTypes;
- extern fn LLVMCountStructElementTypes(StructTy: *Type) c_uint;
-
- pub const isOpaqueStruct = LLVMIsOpaqueStruct;
- extern fn LLVMIsOpaqueStruct(StructTy: *Type) Bool;
-
- pub const isSized = LLVMTypeIsSized;
- extern fn LLVMTypeIsSized(Ty: *Type) Bool;
+ pub const constGEP = LLVMConstGEP2;
+ extern fn LLVMConstGEP2(
+ Ty: *Type,
+ ConstantVal: *Value,
+ ConstantIndices: [*]const *Value,
+ NumIndices: c_uint,
+ ) *Value;
pub const constInBoundsGEP = LLVMConstInBoundsGEP2;
extern fn LLVMConstInBoundsGEP2(
@@ -329,6 +440,9 @@ pub const Type = opaque {
ConstantIndices: [*]const *Value,
NumIndices: c_uint,
) *Value;
+
+ pub const dump = LLVMDumpType;
+ extern fn LLVMDumpType(Ty: *Type) void;
};
pub const Module = opaque {
@@ -439,15 +553,18 @@ pub const VerifierFailureAction = enum(c_int) {
ReturnStatus,
};
-pub const constNeg = LLVMConstNeg;
-extern fn LLVMConstNeg(ConstantVal: *Value) *Value;
-
pub const constVector = LLVMConstVector;
extern fn LLVMConstVector(
ScalarConstantVals: [*]*Value,
Size: c_uint,
) *Value;
+pub const constICmp = LLVMConstICmp;
+extern fn LLVMConstICmp(Predicate: IntPredicate, LHSConstant: *Value, RHSConstant: *Value) *Value;
+
+pub const constFCmp = LLVMConstFCmp;
+extern fn LLVMConstFCmp(Predicate: RealPredicate, LHSConstant: *Value, RHSConstant: *Value) *Value;
+
pub const getEnumAttributeKindForName = LLVMGetEnumAttributeKindForName;
extern fn LLVMGetEnumAttributeKindForName(Name: [*]const u8, SLen: usize) c_uint;
@@ -484,7 +601,7 @@ pub const Builder = opaque {
extern fn LLVMPositionBuilder(
Builder: *Builder,
Block: *BasicBlock,
- Instr: *Value,
+ Instr: ?*Value,
) void;
pub const positionBuilderAtEnd = LLVMPositionBuilderAtEnd;
@@ -678,6 +795,16 @@ pub const Builder = opaque {
pub const buildBitCast = LLVMBuildBitCast;
extern fn LLVMBuildBitCast(*Builder, Val: *Value, DestTy: *Type, Name: [*:0]const u8) *Value;
+ pub const buildGEP = LLVMBuildGEP2;
+ extern fn LLVMBuildGEP2(
+ B: *Builder,
+ Ty: *Type,
+ Pointer: *Value,
+ Indices: [*]const *Value,
+ NumIndices: c_uint,
+ Name: [*:0]const u8,
+ ) *Value;
+
pub const buildInBoundsGEP = LLVMBuildInBoundsGEP2;
extern fn LLVMBuildInBoundsGEP2(
B: *Builder,
@@ -731,14 +858,6 @@ pub const Builder = opaque {
Name: [*:0]const u8,
) *Value;
- pub const buildVectorSplat = LLVMBuildVectorSplat;
- extern fn LLVMBuildVectorSplat(
- *Builder,
- ElementCount: c_uint,
- EltVal: *Value,
- Name: [*:0]const u8,
- ) *Value;
-
pub const buildPtrToInt = LLVMBuildPtrToInt;
extern fn LLVMBuildPtrToInt(
*Builder,
@@ -755,15 +874,6 @@ pub const Builder = opaque {
Name: [*:0]const u8,
) *Value;
- pub const buildStructGEP = LLVMBuildStructGEP2;
- extern fn LLVMBuildStructGEP2(
- B: *Builder,
- Ty: *Type,
- Pointer: *Value,
- Idx: c_uint,
- Name: [*:0]const u8,
- ) *Value;
-
pub const buildTrunc = LLVMBuildTrunc;
extern fn LLVMBuildTrunc(
*Builder,
@@ -1019,9 +1129,6 @@ pub const RealPredicate = enum(c_uint) {
pub const BasicBlock = opaque {
pub const deleteBasicBlock = LLVMDeleteBasicBlock;
extern fn LLVMDeleteBasicBlock(BB: *BasicBlock) void;
-
- pub const getFirstInstruction = LLVMGetFirstInstruction;
- extern fn LLVMGetFirstInstruction(BB: *BasicBlock) ?*Value;
};
pub const TargetMachine = opaque {
@@ -1071,6 +1178,9 @@ pub const TargetData = opaque {
pub const abiSizeOfType = LLVMABISizeOfType;
extern fn LLVMABISizeOfType(TD: *TargetData, Ty: *Type) c_ulonglong;
+
+ pub const stringRep = LLVMCopyStringRepOfTargetData;
+ extern fn LLVMCopyStringRepOfTargetData(TD: *TargetData) [*:0]const u8;
};
pub const CodeModel = enum(c_int) {
@@ -1440,29 +1550,6 @@ pub const AtomicRMWBinOp = enum(c_int) {
FMin,
};
-pub const TypeKind = enum(c_int) {
- Void,
- Half,
- Float,
- Double,
- X86_FP80,
- FP128,
- PPC_FP128,
- Label,
- Integer,
- Function,
- Struct,
- Array,
- Pointer,
- Vector,
- Metadata,
- X86_MMX,
- Token,
- ScalableVector,
- BFloat,
- X86_AMX,
-};
-
pub const CallConv = enum(c_uint) {
C = 0,
Fast = 8,
@@ -1588,6 +1675,13 @@ pub const address_space = struct {
pub const constant_buffer_14: c_uint = 22;
pub const constant_buffer_15: c_uint = 23;
};
+
+ // See llvm/lib/Target/WebAssembly/Utils/WebAssemblyTypetilities.h
+ pub const wasm = struct {
+ pub const variable: c_uint = 1;
+ pub const externref: c_uint = 10;
+ pub const funcref: c_uint = 20;
+ };
};
pub const DIEnumerator = opaque {};