aboutsummaryrefslogtreecommitdiff
path: root/src/zig_llvm.cpp
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-11-21 13:48:23 +0200
committerGitHub <noreply@github.com>2022-11-21 13:48:23 +0200
commit7c527c6dfe590a1251b51f6e1cfe8a4ba9bb0d67 (patch)
tree2bf79b09302f3c574b18b50591fdad9a555b6e8f /src/zig_llvm.cpp
parent89c374cd2dff36477ac1513006c03721ef946a2a (diff)
parentbbcd959c2b1721d81af5829b56e01cc472b58816 (diff)
downloadzig-7c527c6dfe590a1251b51f6e1cfe8a4ba9bb0d67.tar.gz
zig-7c527c6dfe590a1251b51f6e1cfe8a4ba9bb0d67.zip
Merge pull request #13585 from Vexu/stage2-fixes
Stage2 bug fixes
Diffstat (limited to 'src/zig_llvm.cpp')
-rw-r--r--src/zig_llvm.cpp30
1 files changed, 24 insertions, 6 deletions
diff --git a/src/zig_llvm.cpp b/src/zig_llvm.cpp
index 7134df6a9c..c38e311f67 100644
--- a/src/zig_llvm.cpp
+++ b/src/zig_llvm.cpp
@@ -444,6 +444,15 @@ LLVMValueRef ZigLLVMBuildCall(LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef Fn,
return wrap(call_inst);
}
+void ZigLLVMAddAttributeAtIndex(LLVMValueRef Val, unsigned Idx, LLVMAttributeRef A) {
+ if (isa<Function>(unwrap(Val))) {
+ unwrap<Function>(Val)->addAttributeAtIndex(Idx, unwrap(A));
+ } else {
+ unwrap<CallInst>(Val)->addAttributeAtIndex(Idx, unwrap(A));
+ }
+}
+
+
LLVMValueRef ZigLLVMBuildMemCpy(LLVMBuilderRef B, LLVMValueRef Dst, unsigned DstAlign,
LLVMValueRef Src, unsigned SrcAlign, LLVMValueRef Size, bool isVolatile)
{
@@ -1065,12 +1074,21 @@ void ZigLLVMSetFastMath(LLVMBuilderRef builder_wrapped, bool on_state) {
}
}
-void ZigLLVMAddByValAttr(LLVMValueRef fn_ref, unsigned ArgNo, LLVMTypeRef type_val) {
- Function *func = unwrap<Function>(fn_ref);
- AttrBuilder attr_builder(func->getContext());
- Type *llvm_type = unwrap<Type>(type_val);
- attr_builder.addByValAttr(llvm_type);
- func->addParamAttrs(ArgNo, attr_builder);
+void ZigLLVMAddByValAttr(LLVMValueRef Val, unsigned ArgNo, LLVMTypeRef type_val) {
+ if (isa<Function>(unwrap(Val))) {
+ Function *func = unwrap<Function>(Val);
+ AttrBuilder attr_builder(func->getContext());
+ Type *llvm_type = unwrap<Type>(type_val);
+ attr_builder.addByValAttr(llvm_type);
+ func->addParamAttrs(ArgNo, attr_builder);
+ } else {
+ CallInst *call = unwrap<CallInst>(Val);
+ AttrBuilder attr_builder(call->getContext());
+ Type *llvm_type = unwrap<Type>(type_val);
+ attr_builder.addByValAttr(llvm_type);
+ // NOTE: +1 here since index 0 refers to the return value
+ call->addAttributeAtIndex(ArgNo + 1, attr_builder.getAttribute(Attribute::ByVal));
+ }
}
void ZigLLVMAddSretAttr(LLVMValueRef fn_ref, LLVMTypeRef type_val) {