summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGBuiltin.cpp
diff options
context:
space:
mode:
authorJim Grosbach <grosbach@apple.com>2012-09-21 00:18:30 +0000
committerJim Grosbach <grosbach@apple.com>2012-09-21 00:18:30 +0000
commit11b6fe5e9c3d853a4233ce4323021199092bb3c6 (patch)
tree01f6575f81ec0337c8fe9d0dd171c15d9ba83156 /clang/lib/CodeGen/CGBuiltin.cpp
parentd3608f433adf2fbdbc739d0573f84bd77df6d99f (diff)
downloadbcm5719-llvm-11b6fe5e9c3d853a4233ce4323021199092bb3c6.tar.gz
bcm5719-llvm-11b6fe5e9c3d853a4233ce4323021199092bb3c6.zip
ARM: Use a dedicated intrinsic for vector bitwise select.
The expression based expansion too often results in IR level optimizations splitting the intermediate values into separate basic blocks, preventing the formation of the VBSL instruction as the code author intended. In particular, LICM would often hoist part of the computation out of a loop. rdar://11011471 llvm-svn: 164342
Diffstat (limited to 'clang/lib/CodeGen/CGBuiltin.cpp')
-rw-r--r--clang/lib/CodeGen/CGBuiltin.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
index 4ba52aa405a..b5b6c145f8b 100644
--- a/clang/lib/CodeGen/CGBuiltin.cpp
+++ b/clang/lib/CodeGen/CGBuiltin.cpp
@@ -1707,6 +1707,10 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID,
unsigned Int;
switch (BuiltinID) {
default: return 0;
+ case ARM::BI__builtin_neon_vbsl_v:
+ case ARM::BI__builtin_neon_vbslq_v:
+ return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vbsl, Ty),
+ Ops, "vbsl");
case ARM::BI__builtin_neon_vabd_v:
case ARM::BI__builtin_neon_vabdq_v:
Int = usgn ? Intrinsic::arm_neon_vabdu : Intrinsic::arm_neon_vabds;
OpenPOWER on IntegriCloud