diff options
author | Craig Topper <craig.topper@gmail.com> | 2016-07-06 04:24:29 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2016-07-06 04:24:29 +0000 |
commit | 46e7555d4b94d73cf29257a25e2eaeb1e33e6bb6 (patch) | |
tree | b2795e6793378ab81600936d77f3a1055734ce50 /clang/lib/CodeGen/CGBuiltin.cpp | |
parent | 2839045e285b8bc641c820f2f8663d76b76dd8ab (diff) | |
download | bcm5719-llvm-46e7555d4b94d73cf29257a25e2eaeb1e33e6bb6.tar.gz bcm5719-llvm-46e7555d4b94d73cf29257a25e2eaeb1e33e6bb6.zip |
[AVX512] Use the generic ctlz intrinsic to implement the vplzcntd/q builtins.
llvm-svn: 274603
Diffstat (limited to 'clang/lib/CodeGen/CGBuiltin.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGBuiltin.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index 6f450071722..dc0b164e6ab 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -7163,6 +7163,18 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID, return EmitX86MaskedCompare(*this, CC, false, Ops); } + case X86::BI__builtin_ia32_vplzcntd_128_mask: + case X86::BI__builtin_ia32_vplzcntd_256_mask: + case X86::BI__builtin_ia32_vplzcntd_512_mask: + case X86::BI__builtin_ia32_vplzcntq_128_mask: + case X86::BI__builtin_ia32_vplzcntq_256_mask: + case X86::BI__builtin_ia32_vplzcntq_512_mask: { + Function *F = CGM.getIntrinsic(Intrinsic::ctlz, Ops[0]->getType()); + return EmitX86Select(*this, Ops[2], + Builder.CreateCall(F, {Ops[0],Builder.getInt1(false)}), + Ops[1]); + } + // TODO: Handle 64/512-bit vector widths of min/max. case X86::BI__builtin_ia32_pmaxsb128: case X86::BI__builtin_ia32_pmaxsw128: |