summaryrefslogtreecommitdiff
path: root/include/llvm/IntrinsicsARM.td
diff options
context:
space:
mode:
authorJim Grosbach <grosbach@apple.com>2012-09-21 00:18:20 +0000
committerJim Grosbach <grosbach@apple.com>2012-09-21 00:18:20 +0000
commitced674e470bb949d0adce90d79563789439333a8 (patch)
tree2882d1ce74924c07a1228e276526e1f3b0d23857 /include/llvm/IntrinsicsARM.td
parente6e2d8cd90ceb5190aa646dc06584027f7d492d0 (diff)
downloadllvm-ced674e470bb949d0adce90d79563789439333a8.tar.gz
llvm-ced674e470bb949d0adce90d79563789439333a8.tar.bz2
llvm-ced674e470bb949d0adce90d79563789439333a8.tar.xz
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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164340 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/IntrinsicsARM.td')
-rw-r--r--include/llvm/IntrinsicsARM.td5
1 files changed, 5 insertions, 0 deletions
diff --git a/include/llvm/IntrinsicsARM.td b/include/llvm/IntrinsicsARM.td
index 790fce6109..93b1ae1dc8 100644
--- a/include/llvm/IntrinsicsARM.td
+++ b/include/llvm/IntrinsicsARM.td
@@ -421,4 +421,9 @@ def int_arm_neon_vst4lane : Intrinsic<[],
LLVMMatchType<0>, llvm_i32_ty,
llvm_i32_ty], [IntrReadWriteArgMem]>;
+// Vector bitwise select.
+def int_arm_neon_vbsl : Intrinsic<[llvm_anyvector_ty],
+ [LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>],
+ [IntrNoMem]>;
+
} // end TargetPrefix