如何使用llvm elementwise原子内部函数?

如何使用llvm elementwise原子内部函数?,llvm,atomic,intrinsics,llvm-ir,Llvm,Atomic,Intrinsics,Llvm Ir,LLVM具有元素级原子本质。但是,当我尝试使用它们时,IR如下所示: call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 4 %Q, i32 4, i32 1) 然后,当我尝试链接时,会出现错误: undefined reference to `__llvm_memcpy_element_unordered_atomic_1' 有没有我需要链接的特殊图书馆 此外,使

LLVM具有元素级原子本质。但是,当我尝试使用它们时,IR如下所示:

 call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 4 %Q, i32 4, i32 1)
然后,当我尝试链接时,会出现错误:

 undefined reference to `__llvm_memcpy_element_unordered_atomic_1'
有没有我需要链接的特殊图书馆


此外,使用
IRBuilder::CreateElementUnorderedAtomicMemCpy
方法生成的代码也会出现这种情况。

我没有听说过这些LLVM-IR内部函数,但可能是
-latomic
?如果在启用优化的情况下编译,它是否内联?对于4 x 1字节元素的固定len,对于任何32位或64位目标,这应该绝对内联到单个4字节加载/存储。如果它被编译成asm并进行实际的函数调用,那么在这一点上它不是很有用,除了大的副本。有趣的是。。。对于本例,它使用
-O1
将其内联。然而,这只是一个例子,真正的用例是一个编译器,它可能使用也可能不使用优化选项,长度可能大于4(或动态),好吧,那就好了。我的观点是,在这种情况下,如果它没有在
-O3
处内联,那么它就不值得与当前的LLVM一起使用。(我想知道它是否根本就没有被识别出来,只是被当作一个未知的外部函数名来对待。但是再看一眼,这个名称并不完全匹配,因为LLVM将它理解为一个内在函数。)您是否尝试过在LLVM的库目录中查找-type f-exec nm{}+(或者
nm--dynamic
),要查看符号名称是否出现在任何共享/静态库中,我没有找到任何内容。我想知道用户是否需要提供这些功能的实现。但如果是这样的话,似乎在任何地方都没有记录。