diff options
| author | Veikka Tuominen <git@vexu.eu> | 2022-11-21 13:48:23 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-21 13:48:23 +0200 |
| commit | 7c527c6dfe590a1251b51f6e1cfe8a4ba9bb0d67 (patch) | |
| tree | 2bf79b09302f3c574b18b50591fdad9a555b6e8f /src/zig_llvm.cpp | |
| parent | 89c374cd2dff36477ac1513006c03721ef946a2a (diff) | |
| parent | bbcd959c2b1721d81af5829b56e01cc472b58816 (diff) | |
| download | zig-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.cpp | 30 |
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) { |
