[llvm-dev] new @llvm.memcpy and @llvm.memset API in trunk - how to use alignment?
Friedman, Eli via llvm-dev
llvm-dev at lists.llvm.org
Thu Mar 22 15:32:50 PDT 2018
On 3/22/2018 3:15 PM, Andrew Kelley via llvm-dev wrote:
> The new @llvm.memcpy API does not have an alignment parameter. Instead
> the docs say to use the align <n> attribute. How is this supposed to
> work with different alignments?
>
> For example, I have one memcpy with align 4, align 4, and another with
> align 1, align 1.
>
> ; Function Attrs: argmemonly nounwind
> declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly align
> 4, i8* nocapture readonly align 4, i64, i1) #3
>
> ; Function Attrs: argmemonly nounwind
> declare void @llvm.memcpy.p0i8.p0i8.i64.1(i8* nocapture writeonly
> align 1, i8* nocapture readonly align 1, i64, i1) #3
>
>
> When I add these multiple definitions to the module, llvm mangles the
> name, adding `.1` to the second one, and I get "Intrinsic name not
> mangled correctly for type arguments!"
>
> What's the correct way to do this?
You're not supposed to add the alignment to the function declaration;
just add it to the call itself. (If you're using IRBuilder,
CreateMemCpy will take care of this for you.)
-Eli
--
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
More information about the llvm-dev
mailing list