在llvm中内在的cvta_shared_yes,cvta_shared_yes_64,cvta_to_shared_yes_64等的目的是什么

时间:2016-01-15 03:32:10

标签: llvm llvm-clang llvm-ir

在LLVM源代码文件夹中,我们可以看到内在的cvta_shared_yes,cvta_shared_yes_64,cvta_to_shared_yes_64,类似于其他内存类型,如全局,本地,常量等。这是什么目的。它是否定义了内存类型的行为?如果是这样我们可以添加一个新的内在?

1 个答案:

答案 0 :(得分:1)

NVPTX后端使用这些内在函数发出PTX特殊操作,将指向全局,本地,共享或常量内存的指针转换为通用地址空间并返回。 这是NVPTX后端特定的,代表Nvidia(CUDA)GPU上的内存层次结构。

如果要向LLVM添加内在函数,请查看llvm/include/llvm/IR/Intrinsics*.td TableGen文件。这些文件用于生成内在函数所需的所有内容。 例如:

def int_memcpy  : Intrinsic<[],
                               [llvm_anyptr_ty, llvm_anyptr_ty, llvm_anyint_ty,
                                llvm_i32_ty, llvm_i1_ty],
                              [IntrReadWriteArgMem, NoCapture<0>, NoCapture<1>,
                               ReadOnly<1>]>;

将生成llvm.memcpy内在函数,后端可以使用该内在函数生成对特定系统的memcpy函数的调用。

但是,请记住,后端必须以某种方式支持您的新内在函数。您可以查看./llvm/lib/Target/X86/X86ISelLowering.cpp X86后端如何处理llvm.memcpy内在函数。