llvm-project/clang/utils
Jim Grosbach d10f1c04aa ARM: Improve codegen for vget_low_* and vget_high_ intrinsics.
These intrinsics use the __builtin_shuffle() function to extract the
low and high half, respectively, of a 128-bit NEON vector. Currently,
they're defined to use bitcasts to simplify the emitter, so we get code
like:
uint16x4_t vget_low_u32(uint16x8_t __a) {
  return (uint32x2_t) __builtin_shufflevector((int64x2_t) __a,
                                              (int64x2_t) __a,
                                              0);
}

While this works, it results in those bitcasts going all the way through
to the IR, resulting in code like:
  %1 = bitcast <8 x i16> %in to <2 x i64>
  %2 = shufflevector <2 x i64> %1, <2 x i64> undef, <1 x i32>
  %zeroinitializer
  %3 = bitcast <1 x i64> %2 to <4 x i16>

We can instead easily perform the operation directly on the input vector
like:

uint16x4_t vget_low_u16(uint16x8_t __a) {
  return __builtin_shufflevector(__a, __a, 0, 1, 2, 3);
}

Not only is that much easier to read on its own, it also results in
cleaner IR like:

  %1 = shufflevector <8 x i16> %in, <8 x i16> undef,
                     <4 x i32> <i32 0, i32 1, i32 2, i32 3>

This is both easier to read and easier for the back end to reason
about effectively since the operation is obfuscating the source with
bitcasts.

rdar://13894163

llvm-svn: 181865
2013-05-15 02:40:04 +00:00
..
ABITest utils/ABITest: Factor out type naming code slightly. 2010-09-27 20:13:24 +00:00
CIndex Wrap 'data' key in quotes. 2010-04-17 00:37:35 +00:00
TableGen ARM: Improve codegen for vget_low_* and vget_high_ intrinsics. 2013-05-15 02:40:04 +00:00
TestUtils Fix typo in test program 2010-07-14 00:09:17 +00:00
VtableTest More magic. 2010-03-29 03:26:49 +00:00
analyzer [analyzer] Re-enable cplusplus.NewDelete (but not NewDeleteLeaks). 2013-04-05 17:55:07 +00:00
valgrind clang/utils/valgrind/x86_64-pc-linux-gnu_gcc-4.3.3.supp: Add /usr/bin/cmp. 2013-01-20 15:30:41 +00:00
CaptureCmd
ClangDataFormat.py [utils/ClangDataFormat.py] Don't use lldb.frame directly, get the frame from the value. 2013-01-09 23:22:08 +00:00
CmpDriver fix a bunch of comment typos found by codespell. Patch by 2011-04-15 05:22:18 +00:00
FindSpecRefs
FuzzTest [utils/FuzzTest] Add '--stop-on-fail' to stop the script on the first failure 2012-03-08 20:29:39 +00:00
builtin-defines.c
clang-completion-mode.el Minor comments and changes to clang-completion-mode.el, from David Wood! 2012-06-07 22:33:29 +00:00
clangVisualizers.txt Updating the visualizers to include more datatypes. Patch thanks to Jay Blanchard. 2012-05-31 19:27:30 +00:00
find-unused-diagnostics.sh Turns out there is a simpler way of getting a set difference in bash than parsing diff output. 2013-01-14 15:00:48 +00:00
token-delta.py