aboutsummaryrefslogtreecommitdiff
path: root/src/zig_llvm.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-07-01 19:19:13 -0700
committerAndrew Kelley <andrew@ziglang.org>2022-07-01 19:19:13 -0700
commit1fa4a58d2c2a649e528b9424f01f16eac6af376c (patch)
tree841c61dff18b7146194e26b841e3fcc5404a54e9 /src/zig_llvm.cpp
parent41a0b8173147e403c23b2911bdca1438cdd920b6 (diff)
downloadzig-1fa4a58d2c2a649e528b9424f01f16eac6af376c.tar.gz
zig-1fa4a58d2c2a649e528b9424f01f16eac6af376c.zip
stage1: update to LLVM 14 API
Diffstat (limited to 'src/zig_llvm.cpp')
-rw-r--r--src/zig_llvm.cpp22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/zig_llvm.cpp b/src/zig_llvm.cpp
index 2a80129778..7cef3d01f7 100644
--- a/src/zig_llvm.cpp
+++ b/src/zig_llvm.cpp
@@ -1064,12 +1064,20 @@ void ZigLLVMAddByValAttr(LLVMValueRef fn_ref, unsigned ArgNo, LLVMTypeRef type_v
func->addParamAttrs(ArgNo + 1, attr_builder);
}
-void ZigLLVMAddSretAttr(LLVMValueRef fn_ref, unsigned ArgNo, LLVMTypeRef type_val) {
+void ZigLLVMAddSretAttr(LLVMValueRef fn_ref, LLVMTypeRef type_val) {
Function *func = unwrap<Function>(fn_ref);
AttrBuilder attr_builder(func->getContext());
Type *llvm_type = unwrap<Type>(type_val);
attr_builder.addStructRetAttr(llvm_type);
- func->addParamAttrs(ArgNo + 1, attr_builder);
+ func->addParamAttrs(AttributeList::ReturnIndex, attr_builder);
+}
+
+void ZigLLVMAddFunctionElemTypeAttr(LLVMValueRef fn_ref, size_t arg_index, LLVMTypeRef elem_ty) {
+ Function *func = unwrap<Function>(fn_ref);
+ AttrBuilder attr_builder(func->getContext());
+ Type *llvm_type = unwrap<Type>(elem_ty);
+ attr_builder.addTypeAttr(Attribute::ElementType, llvm_type);
+ func->addParamAttrs(AttributeList::FirstArgIndex + arg_index, attr_builder);
}
void ZigLLVMAddFunctionAttr(LLVMValueRef fn_ref, const char *attr_name, const char *attr_value) {
@@ -1174,7 +1182,15 @@ void ZigLLVMSetTailCall(LLVMValueRef Call) {
void ZigLLVMSetCallSret(LLVMValueRef Call, LLVMTypeRef return_type) {
CallInst *call_inst = unwrap<CallInst>(Call);
Type *llvm_type = unwrap<Type>(return_type);
- call_inst->addParamAttr(1, Attribute::getWithStructRetType(call_inst->getContext(), llvm_type));
+ call_inst->addParamAttr(AttributeList::ReturnIndex,
+ Attribute::getWithStructRetType(call_inst->getContext(), llvm_type));
+}
+
+void ZigLLVMSetCallElemTypeAttr(LLVMValueRef Call, size_t arg_index, LLVMTypeRef return_type) {
+ CallInst *call_inst = unwrap<CallInst>(Call);
+ Type *llvm_type = unwrap<Type>(return_type);
+ call_inst->addParamAttr(arg_index,
+ Attribute::get(call_inst->getContext(), Attribute::ElementType, llvm_type));
}
void ZigLLVMFunctionSetPrefixData(LLVMValueRef function, LLVMValueRef data) {