[PATCH] D44678: [ARM] Do not convert some vmov instructions
Mikhail Maltsev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 4 01:58:45 PDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL329158: [ARM] Do not convert some vmov instructions (authored by miyuki, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D44678?vs=139101&id=140916#toc
Repository:
rL LLVM
https://reviews.llvm.org/D44678
Files:
llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
llvm/trunk/test/MC/ARM/vmov-vmvn-replicate.s
Index: llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
===================================================================
--- llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
+++ llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
@@ -1868,8 +1868,7 @@
((Value & 0xffffffffff00ffff) == 0xffff);
}
- bool isNEONReplicate(unsigned Width, unsigned NumElems, bool Inv,
- bool AllowMinusOne) const {
+ bool isNEONReplicate(unsigned Width, unsigned NumElems, bool Inv) const {
assert((Width == 8 || Width == 16 || Width == 32) &&
"Invalid element width");
assert(NumElems * Width <= 64 && "Invalid result width");
@@ -1888,8 +1887,6 @@
uint64_t Mask = (1ull << Width) - 1;
uint64_t Elem = Value & Mask;
- if (!AllowMinusOne && Elem == Mask)
- return false;
if (Width == 16 && (Elem & 0x00ff) != 0 && (Elem & 0xff00) != 0)
return false;
if (Width == 32 && !isValidNEONi32vmovImm(Elem))
@@ -1904,7 +1901,7 @@
}
bool isNEONByteReplicate(unsigned NumBytes) const {
- return isNEONReplicate(8, NumBytes, false, true);
+ return isNEONReplicate(8, NumBytes, false);
}
static void checkNeonReplicateArgs(unsigned FromW, unsigned ToW) {
@@ -1918,14 +1915,15 @@
template<unsigned FromW, unsigned ToW>
bool isNEONmovReplicate() const {
checkNeonReplicateArgs(FromW, ToW);
- bool AllowMinusOne = ToW != 64;
- return isNEONReplicate(FromW, ToW / FromW, false, AllowMinusOne);
+ if (ToW == 64 && isNEONi64splat())
+ return false;
+ return isNEONReplicate(FromW, ToW / FromW, false);
}
template<unsigned FromW, unsigned ToW>
bool isNEONinvReplicate() const {
checkNeonReplicateArgs(FromW, ToW);
- return isNEONReplicate(FromW, ToW / FromW, true, true);
+ return isNEONReplicate(FromW, ToW / FromW, true);
}
bool isNEONi32vmov() const {
Index: llvm/trunk/test/MC/ARM/vmov-vmvn-replicate.s
===================================================================
--- llvm/trunk/test/MC/ARM/vmov-vmvn-replicate.s
+++ llvm/trunk/test/MC/ARM/vmov-vmvn-replicate.s
@@ -23,6 +23,8 @@
@ CHECK: vmov.i8 q2, #0xab @ encoding: [0x5b,0x4e,0x82,0xf3]
@ CHECK: vmov.i8 q2, #0xab @ encoding: [0x5b,0x4e,0x82,0xf3]
+ vmov.i64 d2, #0xff00ff00ff00ff00
+ vmov.i64 q2, #0xff00ff00ff00ff00
vmov.i64 d2, #0x00a500a500a500a5
vmov.i64 q2, #0x00a500a500a500a5
vmov.i32 d2, #0x00a500a5
@@ -32,6 +34,8 @@
vmov.i32 d2, #0xa500a500
vmov.i32 q2, #0xa500a500
+@ CHECK: vmov.i64 d2, #0xff00ff00ff00ff00 @ encoding: [0x3a,0x2e,0x82,0xf3]
+@ CHECK: vmov.i64 q2, #0xff00ff00ff00ff00 @ encoding: [0x7a,0x4e,0x82,0xf3]
@ CHECK: vmov.i16 d2, #0xa5 @ encoding: [0x15,0x28,0x82,0xf3]
@ CHECK: vmov.i16 q2, #0xa5 @ encoding: [0x55,0x48,0x82,0xf3]
@ CHECK: vmov.i16 d2, #0xa5 @ encoding: [0x15,0x28,0x82,0xf3]
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D44678.140916.patch
Type: text/x-patch
Size: 2950 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180404/84138112/attachment.bin>
More information about the llvm-commits
mailing list