aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
diff options
context:
space:
mode:
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>2014-11-05 13:04:14 +0000
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>2014-11-05 13:04:14 +0000
commitce46b97b4839d065521bf187e43425ab9b77643f (patch)
treecafa7fe9b61c538588aa8af362aa671caecbb09a /llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
parentc8d452eed8a80820e96843831a1c4e75ba87cd99 (diff)
downloadllvm-ce46b97b4839d065521bf187e43425ab9b77643f.zip
llvm-ce46b97b4839d065521bf187e43425ab9b77643f.tar.gz
llvm-ce46b97b4839d065521bf187e43425ab9b77643f.tar.bz2
[X86] Teach method 'isVectorClearMaskLegal' how to check for legal blend masks.
This patch improves the folding of vector AND nodes into blend operations for targets that feature SSE4.1. A vector AND node where one of the operands is a constant build_vector with elements that are either zero or all-ones can be converted into a blend. This allows for example to simplify the following code: define <4 x i32> @test(<4 x i32> %A, <4 x i32> %B) { %1 = and <4 x i32> %A, <i32 0, i32 0, i32 0, i32 -1> %2 = and <4 x i32> %B, <i32 -1, i32 -1, i32 -1, i32 0> %3 = or <4 x i32> %1, %2 ret <4 x i32> %3 } Before this patch llc (-mcpu=corei7) generated: andps LCPI1_0(%rip), %xmm0, %xmm0 andps LCPI1_1(%rip), %xmm1, %xmm1 orps %xmm1, %xmm0, %xmm0 retq With this patch we generate a single 'vpblendw'. llvm-svn: 221343
Diffstat (limited to 'llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp')
0 files changed, 0 insertions, 0 deletions