[NVPTX] Auto-upgrade some NVPTX intrinsics to LLVM target-generic code.
authorJustin Lebar <jlebar@google.com>
Sat, 21 Jan 2017 01:00:32 +0000 (01:00 +0000)
committerJustin Lebar <jlebar@google.com>
Sat, 21 Jan 2017 01:00:32 +0000 (01:00 +0000)
commit46624a822d3a3df4a4b6dff0d231acb45d269853
tree6bbc8395441b94ec4debd95283741b709bcd8468
parent077f8fb1689d24d0118248ca41447aea2cd0f6d9
[NVPTX] Auto-upgrade some NVPTX intrinsics to LLVM target-generic code.

Summary:
Specifically, we upgrade llvm.nvvm.:

 * brev{32,64}
 * clz.{i,ll}
 * popc.{i,ll}
 * abs.{i,ll}
 * {min,max}.{i,ll,u,ull}
 * h2f

These either map directly to an existing LLVM target-generic
intrinsic or map to a simple LLVM target-generic idiom.

In all cases, we check that the code we generate is lowered to PTX as we
expect.

These builtins don't need to be backfilled in clang: They're not
accessible to user code from nvcc.

Reviewers: tra

Subscribers: majnemer, cfe-commits, llvm-commits, jholewinski

Differential Revision: https://reviews.llvm.org/D28793

llvm-svn: 292694
clang/include/clang/Basic/BuiltinsNVPTX.def
llvm/include/llvm/IR/IntrinsicsNVVM.td
llvm/lib/IR/AutoUpgrade.cpp
llvm/lib/Target/NVPTX/NVPTXIntrinsics.td
llvm/test/Assembler/auto_upgrade_nvvm_intrinsics.ll [new file with mode: 0644]