xref: /llvm-project/llvm/unittests/Target/ARM/MachineInstrTest.cpp (revision bb3f5e1fed7c6ba733b7f273e93f5d3930976185)
126a475afSSam Parker #include "ARMBaseInstrInfo.h"
226a475afSSam Parker #include "ARMSubtarget.h"
326a475afSSam Parker #include "ARMTargetMachine.h"
489b57061SReid Kleckner #include "llvm/MC/TargetRegistry.h"
526a475afSSam Parker #include "llvm/Support/TargetSelect.h"
626a475afSSam Parker #include "llvm/Target/TargetMachine.h"
726a475afSSam Parker #include "llvm/Target/TargetOptions.h"
826a475afSSam Parker 
926a475afSSam Parker #include "gtest/gtest.h"
1026a475afSSam Parker 
1126a475afSSam Parker using namespace llvm;
1226a475afSSam Parker 
130e6aa083SSam Parker TEST(MachineInstructionDoubleWidthResult, IsCorrect) {
140e6aa083SSam Parker   using namespace ARM;
150e6aa083SSam Parker 
160e6aa083SSam Parker   auto DoubleWidthResult = [](unsigned Opcode) {
170e6aa083SSam Parker     switch (Opcode) {
180e6aa083SSam Parker     default:
190e6aa083SSam Parker       break;
200e6aa083SSam Parker     case MVE_VMULLBp16:
210e6aa083SSam Parker     case MVE_VMULLBp8:
220e6aa083SSam Parker     case MVE_VMULLBs16:
230e6aa083SSam Parker     case MVE_VMULLBs32:
240e6aa083SSam Parker     case MVE_VMULLBs8:
250e6aa083SSam Parker     case MVE_VMULLBu16:
260e6aa083SSam Parker     case MVE_VMULLBu32:
270e6aa083SSam Parker     case MVE_VMULLBu8:
280e6aa083SSam Parker     case MVE_VMULLTp16:
290e6aa083SSam Parker     case MVE_VMULLTp8:
300e6aa083SSam Parker     case MVE_VMULLTs16:
310e6aa083SSam Parker     case MVE_VMULLTs32:
320e6aa083SSam Parker     case MVE_VMULLTs8:
330e6aa083SSam Parker     case MVE_VMULLTu16:
340e6aa083SSam Parker     case MVE_VMULLTu32:
350e6aa083SSam Parker     case MVE_VMULLTu8:
360e6aa083SSam Parker     case MVE_VQDMULL_qr_s16bh:
370e6aa083SSam Parker     case MVE_VQDMULL_qr_s16th:
380e6aa083SSam Parker     case MVE_VQDMULL_qr_s32bh:
390e6aa083SSam Parker     case MVE_VQDMULL_qr_s32th:
400e6aa083SSam Parker     case MVE_VQDMULLs16bh:
410e6aa083SSam Parker     case MVE_VQDMULLs16th:
420e6aa083SSam Parker     case MVE_VQDMULLs32bh:
430e6aa083SSam Parker     case MVE_VQDMULLs32th:
440e6aa083SSam Parker     case MVE_VMOVLs16bh:
450e6aa083SSam Parker     case MVE_VMOVLs16th:
460e6aa083SSam Parker     case MVE_VMOVLs8bh:
470e6aa083SSam Parker     case MVE_VMOVLs8th:
480e6aa083SSam Parker     case MVE_VMOVLu16bh:
490e6aa083SSam Parker     case MVE_VMOVLu16th:
500e6aa083SSam Parker     case MVE_VMOVLu8bh:
510e6aa083SSam Parker     case MVE_VMOVLu8th:
520e6aa083SSam Parker     case MVE_VSHLL_imms16bh:
530e6aa083SSam Parker     case MVE_VSHLL_imms16th:
540e6aa083SSam Parker     case MVE_VSHLL_imms8bh:
550e6aa083SSam Parker     case MVE_VSHLL_imms8th:
560e6aa083SSam Parker     case MVE_VSHLL_immu16bh:
570e6aa083SSam Parker     case MVE_VSHLL_immu16th:
580e6aa083SSam Parker     case MVE_VSHLL_immu8bh:
590e6aa083SSam Parker     case MVE_VSHLL_immu8th:
600e6aa083SSam Parker     case MVE_VSHLL_lws16bh:
610e6aa083SSam Parker     case MVE_VSHLL_lws16th:
620e6aa083SSam Parker     case MVE_VSHLL_lws8bh:
630e6aa083SSam Parker     case MVE_VSHLL_lws8th:
640e6aa083SSam Parker     case MVE_VSHLL_lwu16bh:
650e6aa083SSam Parker     case MVE_VSHLL_lwu16th:
660e6aa083SSam Parker     case MVE_VSHLL_lwu8bh:
670e6aa083SSam Parker     case MVE_VSHLL_lwu8th:
680e6aa083SSam Parker       return true;
690e6aa083SSam Parker     }
700e6aa083SSam Parker     return false;
710e6aa083SSam Parker   };
720e6aa083SSam Parker 
730e6aa083SSam Parker   LLVMInitializeARMTargetInfo();
740e6aa083SSam Parker   LLVMInitializeARMTarget();
750e6aa083SSam Parker   LLVMInitializeARMTargetMC();
760e6aa083SSam Parker 
77eecba950SDavid Green   auto TT(Triple::normalize("thumbv8.1m.main-none-none-eabi"));
780e6aa083SSam Parker   std::string Error;
790e6aa083SSam Parker   const Target *T = TargetRegistry::lookupTarget(TT, Error);
800e6aa083SSam Parker   if (!T) {
810e6aa083SSam Parker     dbgs() << Error;
827fc87159SPaul Robinson     GTEST_SKIP();
830e6aa083SSam Parker   }
840e6aa083SSam Parker 
850e6aa083SSam Parker   TargetOptions Options;
86*bb3f5e1fSMatin Raayai   auto TM = std::unique_ptr<TargetMachine>(
87b6a01caaSKazu Hirata       T->createTargetMachine(TT, "generic", "", Options, std::nullopt,
88*bb3f5e1fSMatin Raayai                              std::nullopt, CodeGenOptLevel::Default));
890e6aa083SSam Parker   ARMSubtarget ST(TM->getTargetTriple(), std::string(TM->getTargetCPU()),
900e6aa083SSam Parker                   std::string(TM->getTargetFeatureString()),
910e6aa083SSam Parker                   *static_cast<const ARMBaseTargetMachine *>(TM.get()), false);
920e6aa083SSam Parker   const ARMBaseInstrInfo *TII = ST.getInstrInfo();
930e6aa083SSam Parker   auto MII = TM->getMCInstrInfo();
940e6aa083SSam Parker 
950e6aa083SSam Parker   for (unsigned i = 0; i < ARM::INSTRUCTION_LIST_END; ++i) {
960e6aa083SSam Parker     const MCInstrDesc &Desc = TII->get(i);
970e6aa083SSam Parker 
980e6aa083SSam Parker     uint64_t Flags = Desc.TSFlags;
990e6aa083SSam Parker     if ((Flags & ARMII::DomainMask) != ARMII::DomainMVE)
1000e6aa083SSam Parker       continue;
1010e6aa083SSam Parker 
1020e6aa083SSam Parker     bool Valid = (Flags & ARMII::DoubleWidthResult) != 0;
1030e6aa083SSam Parker     ASSERT_EQ(DoubleWidthResult(i), Valid)
1040e6aa083SSam Parker               << MII->getName(i)
1050e6aa083SSam Parker               << ": mismatched expectation for tail-predicated safety\n";
1060e6aa083SSam Parker   }
1070e6aa083SSam Parker }
1080e6aa083SSam Parker 
109e8725020SSam Parker TEST(MachineInstructionHorizontalReduction, IsCorrect) {
110e8725020SSam Parker   using namespace ARM;
111e8725020SSam Parker 
112e8725020SSam Parker   auto HorizontalReduction = [](unsigned Opcode) {
113e8725020SSam Parker     switch (Opcode) {
114e8725020SSam Parker     default:
115e8725020SSam Parker       break;
116e8725020SSam Parker     case MVE_VABAVs16:
117e8725020SSam Parker     case MVE_VABAVs32:
118e8725020SSam Parker     case MVE_VABAVs8:
119e8725020SSam Parker     case MVE_VABAVu16:
120e8725020SSam Parker     case MVE_VABAVu32:
121e8725020SSam Parker     case MVE_VABAVu8:
122e8725020SSam Parker     case MVE_VADDLVs32acc:
123e8725020SSam Parker     case MVE_VADDLVs32no_acc:
124e8725020SSam Parker     case MVE_VADDLVu32acc:
125e8725020SSam Parker     case MVE_VADDLVu32no_acc:
126e8725020SSam Parker     case MVE_VADDVs16acc:
127e8725020SSam Parker     case MVE_VADDVs16no_acc:
128e8725020SSam Parker     case MVE_VADDVs32acc:
129e8725020SSam Parker     case MVE_VADDVs32no_acc:
130e8725020SSam Parker     case MVE_VADDVs8acc:
131e8725020SSam Parker     case MVE_VADDVs8no_acc:
132e8725020SSam Parker     case MVE_VADDVu16acc:
133e8725020SSam Parker     case MVE_VADDVu16no_acc:
134e8725020SSam Parker     case MVE_VADDVu32acc:
135e8725020SSam Parker     case MVE_VADDVu32no_acc:
136e8725020SSam Parker     case MVE_VADDVu8acc:
137e8725020SSam Parker     case MVE_VADDVu8no_acc:
138e8725020SSam Parker     case MVE_VMAXAVs16:
139e8725020SSam Parker     case MVE_VMAXAVs32:
140e8725020SSam Parker     case MVE_VMAXAVs8:
141e8725020SSam Parker     case MVE_VMAXNMAVf16:
142e8725020SSam Parker     case MVE_VMAXNMAVf32:
143e8725020SSam Parker     case MVE_VMAXNMVf16:
144e8725020SSam Parker     case MVE_VMAXNMVf32:
145e8725020SSam Parker     case MVE_VMAXVs16:
146e8725020SSam Parker     case MVE_VMAXVs32:
147e8725020SSam Parker     case MVE_VMAXVs8:
148e8725020SSam Parker     case MVE_VMAXVu16:
149e8725020SSam Parker     case MVE_VMAXVu32:
150e8725020SSam Parker     case MVE_VMAXVu8:
151e8725020SSam Parker     case MVE_VMINAVs16:
152e8725020SSam Parker     case MVE_VMINAVs32:
153e8725020SSam Parker     case MVE_VMINAVs8:
154e8725020SSam Parker     case MVE_VMINNMAVf16:
155e8725020SSam Parker     case MVE_VMINNMAVf32:
156e8725020SSam Parker     case MVE_VMINNMVf16:
157e8725020SSam Parker     case MVE_VMINNMVf32:
158e8725020SSam Parker     case MVE_VMINVs16:
159e8725020SSam Parker     case MVE_VMINVs32:
160e8725020SSam Parker     case MVE_VMINVs8:
161e8725020SSam Parker     case MVE_VMINVu16:
162e8725020SSam Parker     case MVE_VMINVu32:
163e8725020SSam Parker     case MVE_VMINVu8:
164e8725020SSam Parker     case MVE_VMLADAVas16:
165e8725020SSam Parker     case MVE_VMLADAVas32:
166e8725020SSam Parker     case MVE_VMLADAVas8:
167e8725020SSam Parker     case MVE_VMLADAVau16:
168e8725020SSam Parker     case MVE_VMLADAVau32:
169e8725020SSam Parker     case MVE_VMLADAVau8:
170e8725020SSam Parker     case MVE_VMLADAVaxs16:
171e8725020SSam Parker     case MVE_VMLADAVaxs32:
172e8725020SSam Parker     case MVE_VMLADAVaxs8:
173e8725020SSam Parker     case MVE_VMLADAVs16:
174e8725020SSam Parker     case MVE_VMLADAVs32:
175e8725020SSam Parker     case MVE_VMLADAVs8:
176e8725020SSam Parker     case MVE_VMLADAVu16:
177e8725020SSam Parker     case MVE_VMLADAVu32:
178e8725020SSam Parker     case MVE_VMLADAVu8:
179e8725020SSam Parker     case MVE_VMLADAVxs16:
180e8725020SSam Parker     case MVE_VMLADAVxs32:
181e8725020SSam Parker     case MVE_VMLADAVxs8:
182e8725020SSam Parker     case MVE_VMLALDAVas16:
183e8725020SSam Parker     case MVE_VMLALDAVas32:
184e8725020SSam Parker     case MVE_VMLALDAVau16:
185e8725020SSam Parker     case MVE_VMLALDAVau32:
186e8725020SSam Parker     case MVE_VMLALDAVaxs16:
187e8725020SSam Parker     case MVE_VMLALDAVaxs32:
188e8725020SSam Parker     case MVE_VMLALDAVs16:
189e8725020SSam Parker     case MVE_VMLALDAVs32:
190e8725020SSam Parker     case MVE_VMLALDAVu16:
191e8725020SSam Parker     case MVE_VMLALDAVu32:
192e8725020SSam Parker     case MVE_VMLALDAVxs16:
193e8725020SSam Parker     case MVE_VMLALDAVxs32:
194e8725020SSam Parker     case MVE_VMLSDAVas16:
195e8725020SSam Parker     case MVE_VMLSDAVas32:
196e8725020SSam Parker     case MVE_VMLSDAVas8:
197e8725020SSam Parker     case MVE_VMLSDAVaxs16:
198e8725020SSam Parker     case MVE_VMLSDAVaxs32:
199e8725020SSam Parker     case MVE_VMLSDAVaxs8:
200e8725020SSam Parker     case MVE_VMLSDAVs16:
201e8725020SSam Parker     case MVE_VMLSDAVs32:
202e8725020SSam Parker     case MVE_VMLSDAVs8:
203e8725020SSam Parker     case MVE_VMLSDAVxs16:
204e8725020SSam Parker     case MVE_VMLSDAVxs32:
205e8725020SSam Parker     case MVE_VMLSDAVxs8:
206e8725020SSam Parker     case MVE_VMLSLDAVas16:
207e8725020SSam Parker     case MVE_VMLSLDAVas32:
208e8725020SSam Parker     case MVE_VMLSLDAVaxs16:
209e8725020SSam Parker     case MVE_VMLSLDAVaxs32:
210e8725020SSam Parker     case MVE_VMLSLDAVs16:
211e8725020SSam Parker     case MVE_VMLSLDAVs32:
212e8725020SSam Parker     case MVE_VMLSLDAVxs16:
213e8725020SSam Parker     case MVE_VMLSLDAVxs32:
214e8725020SSam Parker     case MVE_VRMLALDAVHas32:
215e8725020SSam Parker     case MVE_VRMLALDAVHau32:
216e8725020SSam Parker     case MVE_VRMLALDAVHaxs32:
217e8725020SSam Parker     case MVE_VRMLALDAVHs32:
218e8725020SSam Parker     case MVE_VRMLALDAVHu32:
219e8725020SSam Parker     case MVE_VRMLALDAVHxs32:
220e8725020SSam Parker     case MVE_VRMLSLDAVHas32:
221e8725020SSam Parker     case MVE_VRMLSLDAVHaxs32:
222e8725020SSam Parker     case MVE_VRMLSLDAVHs32:
223e8725020SSam Parker     case MVE_VRMLSLDAVHxs32:
224e8725020SSam Parker       return true;
225e8725020SSam Parker     }
226e8725020SSam Parker     return false;
227e8725020SSam Parker   };
228e8725020SSam Parker 
229e8725020SSam Parker   LLVMInitializeARMTargetInfo();
230e8725020SSam Parker   LLVMInitializeARMTarget();
231e8725020SSam Parker   LLVMInitializeARMTargetMC();
232e8725020SSam Parker 
233eecba950SDavid Green   auto TT(Triple::normalize("thumbv8.1m.main-none-none-eabi"));
234e8725020SSam Parker   std::string Error;
235e8725020SSam Parker   const Target *T = TargetRegistry::lookupTarget(TT, Error);
236e8725020SSam Parker   if (!T) {
237e8725020SSam Parker     dbgs() << Error;
2387fc87159SPaul Robinson     GTEST_SKIP();
239e8725020SSam Parker   }
240e8725020SSam Parker 
241e8725020SSam Parker   TargetOptions Options;
242*bb3f5e1fSMatin Raayai   auto TM = std::unique_ptr<TargetMachine>(
243b6a01caaSKazu Hirata       T->createTargetMachine(TT, "generic", "", Options, std::nullopt,
244*bb3f5e1fSMatin Raayai                              std::nullopt, CodeGenOptLevel::Default));
245e8725020SSam Parker   ARMSubtarget ST(TM->getTargetTriple(), std::string(TM->getTargetCPU()),
246e8725020SSam Parker                   std::string(TM->getTargetFeatureString()),
247e8725020SSam Parker                   *static_cast<const ARMBaseTargetMachine *>(TM.get()), false);
248e8725020SSam Parker   const ARMBaseInstrInfo *TII = ST.getInstrInfo();
249e8725020SSam Parker   auto MII = TM->getMCInstrInfo();
250e8725020SSam Parker 
251e8725020SSam Parker   for (unsigned i = 0; i < ARM::INSTRUCTION_LIST_END; ++i) {
252e8725020SSam Parker     const MCInstrDesc &Desc = TII->get(i);
253e8725020SSam Parker 
254e8725020SSam Parker     uint64_t Flags = Desc.TSFlags;
255e8725020SSam Parker     if ((Flags & ARMII::DomainMask) != ARMII::DomainMVE)
256e8725020SSam Parker       continue;
257e8725020SSam Parker     bool Valid = (Flags & ARMII::HorizontalReduction) != 0;
258e8725020SSam Parker     ASSERT_EQ(HorizontalReduction(i), Valid)
259e8725020SSam Parker               << MII->getName(i)
260e8725020SSam Parker               << ": mismatched expectation for tail-predicated safety\n";
261e8725020SSam Parker   }
262e8725020SSam Parker }
263e8725020SSam Parker 
2646f86e6bfSSam Parker TEST(MachineInstructionRetainsPreviousHalfElement, IsCorrect) {
2656f86e6bfSSam Parker   using namespace ARM;
2666f86e6bfSSam Parker 
2676f86e6bfSSam Parker   auto RetainsPreviousHalfElement = [](unsigned Opcode) {
2686f86e6bfSSam Parker     switch (Opcode) {
2696f86e6bfSSam Parker     default:
2706f86e6bfSSam Parker       break;
2716f86e6bfSSam Parker     case MVE_VMOVNi16bh:
2726f86e6bfSSam Parker     case MVE_VMOVNi16th:
2736f86e6bfSSam Parker     case MVE_VMOVNi32bh:
2746f86e6bfSSam Parker     case MVE_VMOVNi32th:
2756f86e6bfSSam Parker     case MVE_VQMOVNs16bh:
2766f86e6bfSSam Parker     case MVE_VQMOVNs16th:
2776f86e6bfSSam Parker     case MVE_VQMOVNs32bh:
2786f86e6bfSSam Parker     case MVE_VQMOVNs32th:
2796f86e6bfSSam Parker     case MVE_VQMOVNu16bh:
2806f86e6bfSSam Parker     case MVE_VQMOVNu16th:
2816f86e6bfSSam Parker     case MVE_VQMOVNu32bh:
2826f86e6bfSSam Parker     case MVE_VQMOVNu32th:
2836f86e6bfSSam Parker     case MVE_VQMOVUNs16bh:
2846f86e6bfSSam Parker     case MVE_VQMOVUNs16th:
2856f86e6bfSSam Parker     case MVE_VQMOVUNs32bh:
2866f86e6bfSSam Parker     case MVE_VQMOVUNs32th:
2876f86e6bfSSam Parker     case MVE_VQRSHRNbhs16:
2886f86e6bfSSam Parker     case MVE_VQRSHRNbhs32:
2896f86e6bfSSam Parker     case MVE_VQRSHRNbhu16:
2906f86e6bfSSam Parker     case MVE_VQRSHRNbhu32:
2916f86e6bfSSam Parker     case MVE_VQRSHRNths16:
2926f86e6bfSSam Parker     case MVE_VQRSHRNths32:
2936f86e6bfSSam Parker     case MVE_VQRSHRNthu16:
2946f86e6bfSSam Parker     case MVE_VQRSHRNthu32:
2956f86e6bfSSam Parker     case MVE_VQRSHRUNs16bh:
2966f86e6bfSSam Parker     case MVE_VQRSHRUNs16th:
2976f86e6bfSSam Parker     case MVE_VQRSHRUNs32bh:
2986f86e6bfSSam Parker     case MVE_VQRSHRUNs32th:
2996f86e6bfSSam Parker     case MVE_VQSHRNbhs16:
3006f86e6bfSSam Parker     case MVE_VQSHRNbhs32:
3016f86e6bfSSam Parker     case MVE_VQSHRNbhu16:
3026f86e6bfSSam Parker     case MVE_VQSHRNbhu32:
3036f86e6bfSSam Parker     case MVE_VQSHRNths16:
3046f86e6bfSSam Parker     case MVE_VQSHRNths32:
3056f86e6bfSSam Parker     case MVE_VQSHRNthu16:
3066f86e6bfSSam Parker     case MVE_VQSHRNthu32:
3076f86e6bfSSam Parker     case MVE_VQSHRUNs16bh:
3086f86e6bfSSam Parker     case MVE_VQSHRUNs16th:
3096f86e6bfSSam Parker     case MVE_VQSHRUNs32bh:
3106f86e6bfSSam Parker     case MVE_VQSHRUNs32th:
3116f86e6bfSSam Parker     case MVE_VRSHRNi16bh:
3126f86e6bfSSam Parker     case MVE_VRSHRNi16th:
3136f86e6bfSSam Parker     case MVE_VRSHRNi32bh:
3146f86e6bfSSam Parker     case MVE_VRSHRNi32th:
3156f86e6bfSSam Parker     case MVE_VSHRNi16bh:
3166f86e6bfSSam Parker     case MVE_VSHRNi16th:
3176f86e6bfSSam Parker     case MVE_VSHRNi32bh:
3186f86e6bfSSam Parker     case MVE_VSHRNi32th:
3196f86e6bfSSam Parker     case MVE_VCVTf16f32bh:
3206f86e6bfSSam Parker     case MVE_VCVTf16f32th:
3216f86e6bfSSam Parker     case MVE_VCVTf32f16bh:
3226f86e6bfSSam Parker     case MVE_VCVTf32f16th:
3236f86e6bfSSam Parker       return true;
3246f86e6bfSSam Parker     }
3256f86e6bfSSam Parker     return false;
3266f86e6bfSSam Parker   };
3276f86e6bfSSam Parker 
3286f86e6bfSSam Parker   LLVMInitializeARMTargetInfo();
3296f86e6bfSSam Parker   LLVMInitializeARMTarget();
3306f86e6bfSSam Parker   LLVMInitializeARMTargetMC();
3316f86e6bfSSam Parker 
332eecba950SDavid Green   auto TT(Triple::normalize("thumbv8.1m.main-none-none-eabi"));
3336f86e6bfSSam Parker   std::string Error;
3346f86e6bfSSam Parker   const Target *T = TargetRegistry::lookupTarget(TT, Error);
3356f86e6bfSSam Parker   if (!T) {
3366f86e6bfSSam Parker     dbgs() << Error;
3377fc87159SPaul Robinson     GTEST_SKIP();
3386f86e6bfSSam Parker   }
3396f86e6bfSSam Parker 
3406f86e6bfSSam Parker   TargetOptions Options;
341*bb3f5e1fSMatin Raayai   auto TM = std::unique_ptr<TargetMachine>(
342b6a01caaSKazu Hirata       T->createTargetMachine(TT, "generic", "", Options, std::nullopt,
343*bb3f5e1fSMatin Raayai                              std::nullopt, CodeGenOptLevel::Default));
3446f86e6bfSSam Parker   ARMSubtarget ST(TM->getTargetTriple(), std::string(TM->getTargetCPU()),
3456f86e6bfSSam Parker                   std::string(TM->getTargetFeatureString()),
3466f86e6bfSSam Parker                   *static_cast<const ARMBaseTargetMachine *>(TM.get()), false);
3476f86e6bfSSam Parker   const ARMBaseInstrInfo *TII = ST.getInstrInfo();
3486f86e6bfSSam Parker   auto MII = TM->getMCInstrInfo();
3496f86e6bfSSam Parker 
3506f86e6bfSSam Parker   for (unsigned i = 0; i < ARM::INSTRUCTION_LIST_END; ++i) {
3516f86e6bfSSam Parker     const MCInstrDesc &Desc = TII->get(i);
3526f86e6bfSSam Parker 
3536f86e6bfSSam Parker     uint64_t Flags = Desc.TSFlags;
3546f86e6bfSSam Parker     if ((Flags & ARMII::DomainMask) != ARMII::DomainMVE)
3556f86e6bfSSam Parker       continue;
3566f86e6bfSSam Parker 
3576f86e6bfSSam Parker     bool Valid = (Flags & ARMII::RetainsPreviousHalfElement) != 0;
3586f86e6bfSSam Parker     ASSERT_EQ(RetainsPreviousHalfElement(i), Valid)
3596f86e6bfSSam Parker               << MII->getName(i)
3606f86e6bfSSam Parker               << ": mismatched expectation for tail-predicated safety\n";
3616f86e6bfSSam Parker   }
3626f86e6bfSSam Parker }
36326a475afSSam Parker // Test for instructions that aren't immediately obviously valid within a
36426a475afSSam Parker // tail-predicated loop. This should be marked up in their tablegen
365ce39278fSSam Parker // descriptions. Currently we, conservatively, disallow:
366ce39278fSSam Parker // - cross beat carries.
367ce39278fSSam Parker // - complex operations.
368dd8153b7SSam Parker // - horizontal operations with exchange.
369ce39278fSSam Parker // - byte swapping.
370ce39278fSSam Parker // - interleaved memory instructions.
371ce39278fSSam Parker // TODO: Add to this list once we can handle them safely.
372ce39278fSSam Parker TEST(MachineInstrValidTailPredication, IsCorrect) {
373ce39278fSSam Parker 
374ce39278fSSam Parker   using namespace ARM;
375ce39278fSSam Parker 
376ce39278fSSam Parker   auto IsValidTPOpcode = [](unsigned Opcode) {
377ce39278fSSam Parker     switch (Opcode) {
378ce39278fSSam Parker     default:
379ce39278fSSam Parker       return false;
380ce39278fSSam Parker     case MVE_ASRLi:
381ce39278fSSam Parker     case MVE_ASRLr:
382ce39278fSSam Parker     case MVE_LSRL:
38386172ce3SSam Parker     case MVE_LSLLi:
38486172ce3SSam Parker     case MVE_LSLLr:
385ce39278fSSam Parker     case MVE_SQRSHR:
38686172ce3SSam Parker     case MVE_SQRSHRL:
387ce39278fSSam Parker     case MVE_SQSHL:
38886172ce3SSam Parker     case MVE_SQSHLL:
389ce39278fSSam Parker     case MVE_SRSHR:
39086172ce3SSam Parker     case MVE_SRSHRL:
391ce39278fSSam Parker     case MVE_UQRSHL:
39286172ce3SSam Parker     case MVE_UQRSHLL:
393ce39278fSSam Parker     case MVE_UQSHL:
39486172ce3SSam Parker     case MVE_UQSHLL:
395ce39278fSSam Parker     case MVE_URSHR:
39686172ce3SSam Parker     case MVE_URSHRL:
397ce39278fSSam Parker     case MVE_VABDf16:
398ce39278fSSam Parker     case MVE_VABDf32:
399ce39278fSSam Parker     case MVE_VABDs16:
400ce39278fSSam Parker     case MVE_VABDs32:
401ce39278fSSam Parker     case MVE_VABDs8:
402ce39278fSSam Parker     case MVE_VABDu16:
403ce39278fSSam Parker     case MVE_VABDu32:
404ce39278fSSam Parker     case MVE_VABDu8:
405ce39278fSSam Parker     case MVE_VABSf16:
406ce39278fSSam Parker     case MVE_VABSf32:
407ce39278fSSam Parker     case MVE_VABSs16:
408ce39278fSSam Parker     case MVE_VABSs32:
409ce39278fSSam Parker     case MVE_VABSs8:
410ce39278fSSam Parker     case MVE_VADD_qr_f16:
411ce39278fSSam Parker     case MVE_VADD_qr_f32:
412ce39278fSSam Parker     case MVE_VADD_qr_i16:
413ce39278fSSam Parker     case MVE_VADD_qr_i32:
414ce39278fSSam Parker     case MVE_VADD_qr_i8:
41594b195ffSSam Parker     case MVE_VADDVs16acc:
41694b195ffSSam Parker     case MVE_VADDVs16no_acc:
41794b195ffSSam Parker     case MVE_VADDVs32acc:
41894b195ffSSam Parker     case MVE_VADDVs32no_acc:
41994b195ffSSam Parker     case MVE_VADDVs8acc:
42094b195ffSSam Parker     case MVE_VADDVs8no_acc:
42194b195ffSSam Parker     case MVE_VADDVu16acc:
42294b195ffSSam Parker     case MVE_VADDVu16no_acc:
42394b195ffSSam Parker     case MVE_VADDVu32acc:
42494b195ffSSam Parker     case MVE_VADDVu32no_acc:
42594b195ffSSam Parker     case MVE_VADDVu8acc:
42694b195ffSSam Parker     case MVE_VADDVu8no_acc:
427ce39278fSSam Parker     case MVE_VADDf16:
428ce39278fSSam Parker     case MVE_VADDf32:
429ce39278fSSam Parker     case MVE_VADDi16:
430ce39278fSSam Parker     case MVE_VADDi32:
431ce39278fSSam Parker     case MVE_VADDi8:
432ce39278fSSam Parker     case MVE_VAND:
433ce39278fSSam Parker     case MVE_VBIC:
434772e4931SSimon Tatham     case MVE_VBICimmi16:
435772e4931SSimon Tatham     case MVE_VBICimmi32:
436ce39278fSSam Parker     case MVE_VBRSR16:
437ce39278fSSam Parker     case MVE_VBRSR32:
438ce39278fSSam Parker     case MVE_VBRSR8:
439ce39278fSSam Parker     case MVE_VCLSs16:
440ce39278fSSam Parker     case MVE_VCLSs32:
441ce39278fSSam Parker     case MVE_VCLSs8:
442ce39278fSSam Parker     case MVE_VCLZs16:
443ce39278fSSam Parker     case MVE_VCLZs32:
444ce39278fSSam Parker     case MVE_VCLZs8:
445ce39278fSSam Parker     case MVE_VCMPf16:
446ce39278fSSam Parker     case MVE_VCMPf16r:
447ce39278fSSam Parker     case MVE_VCMPf32:
448ce39278fSSam Parker     case MVE_VCMPf32r:
449ce39278fSSam Parker     case MVE_VCMPi16:
450ce39278fSSam Parker     case MVE_VCMPi16r:
451ce39278fSSam Parker     case MVE_VCMPi32:
452ce39278fSSam Parker     case MVE_VCMPi32r:
453ce39278fSSam Parker     case MVE_VCMPi8:
454ce39278fSSam Parker     case MVE_VCMPi8r:
455ce39278fSSam Parker     case MVE_VCMPs16:
456ce39278fSSam Parker     case MVE_VCMPs16r:
457ce39278fSSam Parker     case MVE_VCMPs32:
458ce39278fSSam Parker     case MVE_VCMPs32r:
459ce39278fSSam Parker     case MVE_VCMPs8:
460ce39278fSSam Parker     case MVE_VCMPs8r:
461ce39278fSSam Parker     case MVE_VCMPu16:
462ce39278fSSam Parker     case MVE_VCMPu16r:
463ce39278fSSam Parker     case MVE_VCMPu32:
464ce39278fSSam Parker     case MVE_VCMPu32r:
465ce39278fSSam Parker     case MVE_VCMPu8:
466ce39278fSSam Parker     case MVE_VCMPu8r:
467ce39278fSSam Parker     case MVE_VCTP16:
468ce39278fSSam Parker     case MVE_VCTP32:
469ce39278fSSam Parker     case MVE_VCTP64:
470ce39278fSSam Parker     case MVE_VCTP8:
471ce39278fSSam Parker     case MVE_VCVTf16s16_fix:
472ce39278fSSam Parker     case MVE_VCVTf16s16n:
473ce39278fSSam Parker     case MVE_VCVTf16u16_fix:
474ce39278fSSam Parker     case MVE_VCVTf16u16n:
475ce39278fSSam Parker     case MVE_VCVTf32s32_fix:
476ce39278fSSam Parker     case MVE_VCVTf32s32n:
477ce39278fSSam Parker     case MVE_VCVTf32u32_fix:
478ce39278fSSam Parker     case MVE_VCVTf32u32n:
479ce39278fSSam Parker     case MVE_VCVTs16f16_fix:
480ce39278fSSam Parker     case MVE_VCVTs16f16a:
481ce39278fSSam Parker     case MVE_VCVTs16f16m:
482ce39278fSSam Parker     case MVE_VCVTs16f16n:
483ce39278fSSam Parker     case MVE_VCVTs16f16p:
484ce39278fSSam Parker     case MVE_VCVTs16f16z:
485ce39278fSSam Parker     case MVE_VCVTs32f32_fix:
486ce39278fSSam Parker     case MVE_VCVTs32f32a:
487ce39278fSSam Parker     case MVE_VCVTs32f32m:
488ce39278fSSam Parker     case MVE_VCVTs32f32n:
489ce39278fSSam Parker     case MVE_VCVTs32f32p:
490ce39278fSSam Parker     case MVE_VCVTs32f32z:
491ce39278fSSam Parker     case MVE_VCVTu16f16_fix:
492ce39278fSSam Parker     case MVE_VCVTu16f16a:
493ce39278fSSam Parker     case MVE_VCVTu16f16m:
494ce39278fSSam Parker     case MVE_VCVTu16f16n:
495ce39278fSSam Parker     case MVE_VCVTu16f16p:
496ce39278fSSam Parker     case MVE_VCVTu16f16z:
497ce39278fSSam Parker     case MVE_VCVTu32f32_fix:
498ce39278fSSam Parker     case MVE_VCVTu32f32a:
499ce39278fSSam Parker     case MVE_VCVTu32f32m:
500ce39278fSSam Parker     case MVE_VCVTu32f32n:
501ce39278fSSam Parker     case MVE_VCVTu32f32p:
502ce39278fSSam Parker     case MVE_VCVTu32f32z:
503ce39278fSSam Parker     case MVE_VDDUPu16:
504ce39278fSSam Parker     case MVE_VDDUPu32:
505ce39278fSSam Parker     case MVE_VDDUPu8:
506ce39278fSSam Parker     case MVE_VDUP16:
507ce39278fSSam Parker     case MVE_VDUP32:
508ce39278fSSam Parker     case MVE_VDUP8:
509ce39278fSSam Parker     case MVE_VDWDUPu16:
510ce39278fSSam Parker     case MVE_VDWDUPu32:
511ce39278fSSam Parker     case MVE_VDWDUPu8:
512ce39278fSSam Parker     case MVE_VEOR:
513ce39278fSSam Parker     case MVE_VFMA_qr_Sf16:
514ce39278fSSam Parker     case MVE_VFMA_qr_Sf32:
515ce39278fSSam Parker     case MVE_VFMA_qr_f16:
516ce39278fSSam Parker     case MVE_VFMA_qr_f32:
517a3140500SSam Parker     case MVE_VFMAf16:
518a3140500SSam Parker     case MVE_VFMAf32:
519a3140500SSam Parker     case MVE_VFMSf16:
520a3140500SSam Parker     case MVE_VFMSf32:
5213772ea9dSSam Parker     case MVE_VMAXAs16:
5223772ea9dSSam Parker     case MVE_VMAXAs32:
5233772ea9dSSam Parker     case MVE_VMAXAs8:
5243772ea9dSSam Parker     case MVE_VMAXs16:
5253772ea9dSSam Parker     case MVE_VMAXs32:
5263772ea9dSSam Parker     case MVE_VMAXs8:
5273772ea9dSSam Parker     case MVE_VMAXu16:
5283772ea9dSSam Parker     case MVE_VMAXu32:
5293772ea9dSSam Parker     case MVE_VMAXu8:
53022c38412SDavid Green     case MVE_VMAXNMf16:
53122c38412SDavid Green     case MVE_VMAXNMf32:
53222c38412SDavid Green     case MVE_VMAXNMAf16:
53322c38412SDavid Green     case MVE_VMAXNMAf32:
5343772ea9dSSam Parker     case MVE_VMINAs16:
5353772ea9dSSam Parker     case MVE_VMINAs32:
5363772ea9dSSam Parker     case MVE_VMINAs8:
5373772ea9dSSam Parker     case MVE_VMINs16:
5383772ea9dSSam Parker     case MVE_VMINs32:
5393772ea9dSSam Parker     case MVE_VMINs8:
5403772ea9dSSam Parker     case MVE_VMINu16:
5413772ea9dSSam Parker     case MVE_VMINu32:
5423772ea9dSSam Parker     case MVE_VMINu8:
54322c38412SDavid Green     case MVE_VMINNMf16:
54422c38412SDavid Green     case MVE_VMINNMf32:
54522c38412SDavid Green     case MVE_VMINNMAf16:
54622c38412SDavid Green     case MVE_VMINNMAf32:
547dd8153b7SSam Parker     case MVE_VMLADAVas16:
548dd8153b7SSam Parker     case MVE_VMLADAVas32:
549dd8153b7SSam Parker     case MVE_VMLADAVas8:
550dd8153b7SSam Parker     case MVE_VMLADAVau16:
551dd8153b7SSam Parker     case MVE_VMLADAVau32:
552dd8153b7SSam Parker     case MVE_VMLADAVau8:
553dd8153b7SSam Parker     case MVE_VMLADAVs16:
554dd8153b7SSam Parker     case MVE_VMLADAVs32:
555dd8153b7SSam Parker     case MVE_VMLADAVs8:
556dd8153b7SSam Parker     case MVE_VMLADAVu16:
557dd8153b7SSam Parker     case MVE_VMLADAVu32:
558dd8153b7SSam Parker     case MVE_VMLADAVu8:
559dd8153b7SSam Parker     case MVE_VMLALDAVs16:
560dd8153b7SSam Parker     case MVE_VMLALDAVs32:
561dd8153b7SSam Parker     case MVE_VMLALDAVu16:
562dd8153b7SSam Parker     case MVE_VMLALDAVu32:
563dd8153b7SSam Parker     case MVE_VMLALDAVas16:
564dd8153b7SSam Parker     case MVE_VMLALDAVas32:
565dd8153b7SSam Parker     case MVE_VMLALDAVau16:
566dd8153b7SSam Parker     case MVE_VMLALDAVau32:
567dd8153b7SSam Parker     case MVE_VMLSDAVas16:
568dd8153b7SSam Parker     case MVE_VMLSDAVas32:
569dd8153b7SSam Parker     case MVE_VMLSDAVas8:
570dd8153b7SSam Parker     case MVE_VMLSDAVs16:
571dd8153b7SSam Parker     case MVE_VMLSDAVs32:
572dd8153b7SSam Parker     case MVE_VMLSDAVs8:
573dd8153b7SSam Parker     case MVE_VMLSLDAVas16:
574dd8153b7SSam Parker     case MVE_VMLSLDAVas32:
575dd8153b7SSam Parker     case MVE_VMLSLDAVs16:
576dd8153b7SSam Parker     case MVE_VMLSLDAVs32:
577dd8153b7SSam Parker     case MVE_VRMLALDAVHas32:
578dd8153b7SSam Parker     case MVE_VRMLALDAVHau32:
579dd8153b7SSam Parker     case MVE_VRMLALDAVHs32:
580dd8153b7SSam Parker     case MVE_VRMLALDAVHu32:
581dd8153b7SSam Parker     case MVE_VRMLSLDAVHas32:
582dd8153b7SSam Parker     case MVE_VRMLSLDAVHs32:
583e45cbf99SSimon Tatham     case MVE_VMLAS_qr_i16:
584e45cbf99SSimon Tatham     case MVE_VMLAS_qr_i32:
585e45cbf99SSimon Tatham     case MVE_VMLAS_qr_i8:
586e45cbf99SSimon Tatham     case MVE_VMLA_qr_i16:
587e45cbf99SSimon Tatham     case MVE_VMLA_qr_i32:
588e45cbf99SSimon Tatham     case MVE_VMLA_qr_i8:
589ce39278fSSam Parker     case MVE_VHADD_qr_s16:
590ce39278fSSam Parker     case MVE_VHADD_qr_s32:
591ce39278fSSam Parker     case MVE_VHADD_qr_s8:
592ce39278fSSam Parker     case MVE_VHADD_qr_u16:
593ce39278fSSam Parker     case MVE_VHADD_qr_u32:
594ce39278fSSam Parker     case MVE_VHADD_qr_u8:
595ce39278fSSam Parker     case MVE_VHADDs16:
596ce39278fSSam Parker     case MVE_VHADDs32:
597ce39278fSSam Parker     case MVE_VHADDs8:
598ce39278fSSam Parker     case MVE_VHADDu16:
599ce39278fSSam Parker     case MVE_VHADDu32:
600ce39278fSSam Parker     case MVE_VHADDu8:
601ce39278fSSam Parker     case MVE_VHSUB_qr_s16:
602ce39278fSSam Parker     case MVE_VHSUB_qr_s32:
603ce39278fSSam Parker     case MVE_VHSUB_qr_s8:
604ce39278fSSam Parker     case MVE_VHSUB_qr_u16:
605ce39278fSSam Parker     case MVE_VHSUB_qr_u32:
606ce39278fSSam Parker     case MVE_VHSUB_qr_u8:
607ce39278fSSam Parker     case MVE_VHSUBs16:
608ce39278fSSam Parker     case MVE_VHSUBs32:
609ce39278fSSam Parker     case MVE_VHSUBs8:
610ce39278fSSam Parker     case MVE_VHSUBu16:
611ce39278fSSam Parker     case MVE_VHSUBu32:
612ce39278fSSam Parker     case MVE_VHSUBu8:
613ce39278fSSam Parker     case MVE_VIDUPu16:
614ce39278fSSam Parker     case MVE_VIDUPu32:
615ce39278fSSam Parker     case MVE_VIDUPu8:
616ce39278fSSam Parker     case MVE_VIWDUPu16:
617ce39278fSSam Parker     case MVE_VIWDUPu32:
618ce39278fSSam Parker     case MVE_VIWDUPu8:
6193471520bSDavid Green     case MVE_VLD20_8:
6203471520bSDavid Green     case MVE_VLD21_8:
6213471520bSDavid Green     case MVE_VLD20_16:
6223471520bSDavid Green     case MVE_VLD21_16:
6233471520bSDavid Green     case MVE_VLD20_32:
6243471520bSDavid Green     case MVE_VLD21_32:
6253471520bSDavid Green     case MVE_VLD20_8_wb:
6263471520bSDavid Green     case MVE_VLD21_8_wb:
6273471520bSDavid Green     case MVE_VLD20_16_wb:
6283471520bSDavid Green     case MVE_VLD21_16_wb:
6293471520bSDavid Green     case MVE_VLD20_32_wb:
6303471520bSDavid Green     case MVE_VLD21_32_wb:
6313471520bSDavid Green     case MVE_VLD40_8:
6323471520bSDavid Green     case MVE_VLD41_8:
6333471520bSDavid Green     case MVE_VLD42_8:
6343471520bSDavid Green     case MVE_VLD43_8:
6353471520bSDavid Green     case MVE_VLD40_16:
6363471520bSDavid Green     case MVE_VLD41_16:
6373471520bSDavid Green     case MVE_VLD42_16:
6383471520bSDavid Green     case MVE_VLD43_16:
6393471520bSDavid Green     case MVE_VLD40_32:
6403471520bSDavid Green     case MVE_VLD41_32:
6413471520bSDavid Green     case MVE_VLD42_32:
6423471520bSDavid Green     case MVE_VLD43_32:
6433471520bSDavid Green     case MVE_VLD40_8_wb:
6443471520bSDavid Green     case MVE_VLD41_8_wb:
6453471520bSDavid Green     case MVE_VLD42_8_wb:
6463471520bSDavid Green     case MVE_VLD43_8_wb:
6473471520bSDavid Green     case MVE_VLD40_16_wb:
6483471520bSDavid Green     case MVE_VLD41_16_wb:
6493471520bSDavid Green     case MVE_VLD42_16_wb:
6503471520bSDavid Green     case MVE_VLD43_16_wb:
6513471520bSDavid Green     case MVE_VLD40_32_wb:
6523471520bSDavid Green     case MVE_VLD41_32_wb:
6533471520bSDavid Green     case MVE_VLD42_32_wb:
6543471520bSDavid Green     case MVE_VLD43_32_wb:
655ce39278fSSam Parker     case MVE_VLDRBS16:
656ce39278fSSam Parker     case MVE_VLDRBS16_post:
657ce39278fSSam Parker     case MVE_VLDRBS16_pre:
658ce39278fSSam Parker     case MVE_VLDRBS16_rq:
659ce39278fSSam Parker     case MVE_VLDRBS32:
660ce39278fSSam Parker     case MVE_VLDRBS32_post:
661ce39278fSSam Parker     case MVE_VLDRBS32_pre:
662ce39278fSSam Parker     case MVE_VLDRBS32_rq:
663ce39278fSSam Parker     case MVE_VLDRBU16:
664ce39278fSSam Parker     case MVE_VLDRBU16_post:
665ce39278fSSam Parker     case MVE_VLDRBU16_pre:
666ce39278fSSam Parker     case MVE_VLDRBU16_rq:
667ce39278fSSam Parker     case MVE_VLDRBU32:
668ce39278fSSam Parker     case MVE_VLDRBU32_post:
669ce39278fSSam Parker     case MVE_VLDRBU32_pre:
670ce39278fSSam Parker     case MVE_VLDRBU32_rq:
671ce39278fSSam Parker     case MVE_VLDRBU8:
672ce39278fSSam Parker     case MVE_VLDRBU8_post:
673ce39278fSSam Parker     case MVE_VLDRBU8_pre:
674ce39278fSSam Parker     case MVE_VLDRBU8_rq:
675ce39278fSSam Parker     case MVE_VLDRDU64_qi:
676ce39278fSSam Parker     case MVE_VLDRDU64_qi_pre:
677ce39278fSSam Parker     case MVE_VLDRDU64_rq:
678ce39278fSSam Parker     case MVE_VLDRDU64_rq_u:
679ce39278fSSam Parker     case MVE_VLDRHS32:
680ce39278fSSam Parker     case MVE_VLDRHS32_post:
681ce39278fSSam Parker     case MVE_VLDRHS32_pre:
682ce39278fSSam Parker     case MVE_VLDRHS32_rq:
683ce39278fSSam Parker     case MVE_VLDRHS32_rq_u:
684ce39278fSSam Parker     case MVE_VLDRHU16:
685ce39278fSSam Parker     case MVE_VLDRHU16_post:
686ce39278fSSam Parker     case MVE_VLDRHU16_pre:
687ce39278fSSam Parker     case MVE_VLDRHU16_rq:
688ce39278fSSam Parker     case MVE_VLDRHU16_rq_u:
689ce39278fSSam Parker     case MVE_VLDRHU32:
690ce39278fSSam Parker     case MVE_VLDRHU32_post:
691ce39278fSSam Parker     case MVE_VLDRHU32_pre:
692ce39278fSSam Parker     case MVE_VLDRHU32_rq:
693ce39278fSSam Parker     case MVE_VLDRHU32_rq_u:
694ce39278fSSam Parker     case MVE_VLDRWU32:
695ce39278fSSam Parker     case MVE_VLDRWU32_post:
696ce39278fSSam Parker     case MVE_VLDRWU32_pre:
697ce39278fSSam Parker     case MVE_VLDRWU32_qi:
698ce39278fSSam Parker     case MVE_VLDRWU32_qi_pre:
699ce39278fSSam Parker     case MVE_VLDRWU32_rq:
700ce39278fSSam Parker     case MVE_VLDRWU32_rq_u:
701ce39278fSSam Parker     case MVE_VMOVimmf32:
702ce39278fSSam Parker     case MVE_VMOVimmi16:
703ce39278fSSam Parker     case MVE_VMOVimmi32:
704ce39278fSSam Parker     case MVE_VMOVimmi64:
705ce39278fSSam Parker     case MVE_VMOVimmi8:
7064cf0dddcSSam Parker     case MVE_VMOVNi16bh:
7074cf0dddcSSam Parker     case MVE_VMOVNi16th:
7084cf0dddcSSam Parker     case MVE_VMOVNi32bh:
7094cf0dddcSSam Parker     case MVE_VMOVNi32th:
7104f0fe6b9SSam Parker     case MVE_VMULLBp16:
7114f0fe6b9SSam Parker     case MVE_VMULLBp8:
7124f0fe6b9SSam Parker     case MVE_VMULLBs16:
7134f0fe6b9SSam Parker     case MVE_VMULLBs32:
7144f0fe6b9SSam Parker     case MVE_VMULLBs8:
7154f0fe6b9SSam Parker     case MVE_VMULLBu16:
7164f0fe6b9SSam Parker     case MVE_VMULLBu32:
7174f0fe6b9SSam Parker     case MVE_VMULLBu8:
7184f0fe6b9SSam Parker     case MVE_VMULLTp16:
7194f0fe6b9SSam Parker     case MVE_VMULLTp8:
7204f0fe6b9SSam Parker     case MVE_VMULLTs16:
7214f0fe6b9SSam Parker     case MVE_VMULLTs32:
7224f0fe6b9SSam Parker     case MVE_VMULLTs8:
7234f0fe6b9SSam Parker     case MVE_VMULLTu16:
7244f0fe6b9SSam Parker     case MVE_VMULLTu32:
7254f0fe6b9SSam Parker     case MVE_VMULLTu8:
726ce39278fSSam Parker     case MVE_VMUL_qr_f16:
727ce39278fSSam Parker     case MVE_VMUL_qr_f32:
728ce39278fSSam Parker     case MVE_VMUL_qr_i16:
729ce39278fSSam Parker     case MVE_VMUL_qr_i32:
730ce39278fSSam Parker     case MVE_VMUL_qr_i8:
731ce39278fSSam Parker     case MVE_VMULf16:
732ce39278fSSam Parker     case MVE_VMULf32:
733e8a8dbe9SMark Murray     case MVE_VMULi16:
734e8a8dbe9SMark Murray     case MVE_VMULi8:
735e8a8dbe9SMark Murray     case MVE_VMULi32:
7362cf0e52bSDavid Green     case MVE_VMULHs32:
7372cf0e52bSDavid Green     case MVE_VMULHs16:
7382cf0e52bSDavid Green     case MVE_VMULHs8:
7392cf0e52bSDavid Green     case MVE_VMULHu32:
7402cf0e52bSDavid Green     case MVE_VMULHu16:
7412cf0e52bSDavid Green     case MVE_VMULHu8:
742ce39278fSSam Parker     case MVE_VMVN:
743ce39278fSSam Parker     case MVE_VMVNimmi16:
744ce39278fSSam Parker     case MVE_VMVNimmi32:
745ce39278fSSam Parker     case MVE_VNEGf16:
746ce39278fSSam Parker     case MVE_VNEGf32:
747ce39278fSSam Parker     case MVE_VNEGs16:
748ce39278fSSam Parker     case MVE_VNEGs32:
749ce39278fSSam Parker     case MVE_VNEGs8:
750ce39278fSSam Parker     case MVE_VORN:
751ce39278fSSam Parker     case MVE_VORR:
752772e4931SSimon Tatham     case MVE_VORRimmi16:
753772e4931SSimon Tatham     case MVE_VORRimmi32:
754ce39278fSSam Parker     case MVE_VPST:
755e461921dSSam Parker     case MVE_VPTv16i8:
756e461921dSSam Parker     case MVE_VPTv8i16:
757e461921dSSam Parker     case MVE_VPTv4i32:
758e461921dSSam Parker     case MVE_VPTv16i8r:
759e461921dSSam Parker     case MVE_VPTv8i16r:
760e461921dSSam Parker     case MVE_VPTv4i32r:
761e461921dSSam Parker     case MVE_VPTv16s8:
762e461921dSSam Parker     case MVE_VPTv8s16:
763e461921dSSam Parker     case MVE_VPTv4s32:
764e461921dSSam Parker     case MVE_VPTv16s8r:
765e461921dSSam Parker     case MVE_VPTv8s16r:
766e461921dSSam Parker     case MVE_VPTv4s32r:
767e461921dSSam Parker     case MVE_VPTv16u8:
768e461921dSSam Parker     case MVE_VPTv8u16:
769e461921dSSam Parker     case MVE_VPTv4u32:
770e461921dSSam Parker     case MVE_VPTv16u8r:
771e461921dSSam Parker     case MVE_VPTv8u16r:
772e461921dSSam Parker     case MVE_VPTv4u32r:
773e461921dSSam Parker     case MVE_VPTv8f16:
774e461921dSSam Parker     case MVE_VPTv4f32:
775e461921dSSam Parker     case MVE_VPTv8f16r:
776e461921dSSam Parker     case MVE_VPTv4f32r:
777ce39278fSSam Parker     case MVE_VQABSs16:
778ce39278fSSam Parker     case MVE_VQABSs32:
779ce39278fSSam Parker     case MVE_VQABSs8:
780ce39278fSSam Parker     case MVE_VQADD_qr_s16:
781ce39278fSSam Parker     case MVE_VQADD_qr_s32:
782ce39278fSSam Parker     case MVE_VQADD_qr_s8:
783ce39278fSSam Parker     case MVE_VQADD_qr_u16:
784ce39278fSSam Parker     case MVE_VQADD_qr_u32:
785ce39278fSSam Parker     case MVE_VQADD_qr_u8:
786ce39278fSSam Parker     case MVE_VQADDs16:
787ce39278fSSam Parker     case MVE_VQADDs32:
788ce39278fSSam Parker     case MVE_VQADDs8:
789ce39278fSSam Parker     case MVE_VQADDu16:
790ce39278fSSam Parker     case MVE_VQADDu32:
791ce39278fSSam Parker     case MVE_VQADDu8:
7921919b650SSam Parker     case MVE_VQDMULH_qr_s16:
7931919b650SSam Parker     case MVE_VQDMULH_qr_s32:
7941919b650SSam Parker     case MVE_VQDMULH_qr_s8:
7951919b650SSam Parker     case MVE_VQDMULHi16:
7961919b650SSam Parker     case MVE_VQDMULHi32:
7971919b650SSam Parker     case MVE_VQDMULHi8:
7984f0fe6b9SSam Parker     case MVE_VQDMULL_qr_s16bh:
7994f0fe6b9SSam Parker     case MVE_VQDMULL_qr_s16th:
8004f0fe6b9SSam Parker     case MVE_VQDMULL_qr_s32bh:
8014f0fe6b9SSam Parker     case MVE_VQDMULL_qr_s32th:
8024f0fe6b9SSam Parker     case MVE_VQDMULLs16bh:
8034f0fe6b9SSam Parker     case MVE_VQDMULLs16th:
8044f0fe6b9SSam Parker     case MVE_VQDMULLs32bh:
8054f0fe6b9SSam Parker     case MVE_VQDMULLs32th:
8061919b650SSam Parker     case MVE_VQRDMULH_qr_s16:
8071919b650SSam Parker     case MVE_VQRDMULH_qr_s32:
8081919b650SSam Parker     case MVE_VQRDMULH_qr_s8:
8091919b650SSam Parker     case MVE_VQRDMULHi16:
8101919b650SSam Parker     case MVE_VQRDMULHi32:
8111919b650SSam Parker     case MVE_VQRDMULHi8:
812ce39278fSSam Parker     case MVE_VQNEGs16:
813ce39278fSSam Parker     case MVE_VQNEGs32:
814ce39278fSSam Parker     case MVE_VQNEGs8:
8154cf0dddcSSam Parker     case MVE_VQMOVNs16bh:
8164cf0dddcSSam Parker     case MVE_VQMOVNs16th:
8174cf0dddcSSam Parker     case MVE_VQMOVNs32bh:
8184cf0dddcSSam Parker     case MVE_VQMOVNs32th:
8194cf0dddcSSam Parker     case MVE_VQMOVNu16bh:
8204cf0dddcSSam Parker     case MVE_VQMOVNu16th:
8214cf0dddcSSam Parker     case MVE_VQMOVNu32bh:
8224cf0dddcSSam Parker     case MVE_VQMOVNu32th:
8234cf0dddcSSam Parker     case MVE_VQMOVUNs16bh:
8244cf0dddcSSam Parker     case MVE_VQMOVUNs16th:
8254cf0dddcSSam Parker     case MVE_VQMOVUNs32bh:
8264cf0dddcSSam Parker     case MVE_VQMOVUNs32th:
827ce39278fSSam Parker     case MVE_VQRSHL_by_vecs16:
828ce39278fSSam Parker     case MVE_VQRSHL_by_vecs32:
829ce39278fSSam Parker     case MVE_VQRSHL_by_vecs8:
830ce39278fSSam Parker     case MVE_VQRSHL_by_vecu16:
831ce39278fSSam Parker     case MVE_VQRSHL_by_vecu32:
832ce39278fSSam Parker     case MVE_VQRSHL_by_vecu8:
833ce39278fSSam Parker     case MVE_VQRSHL_qrs16:
834ce39278fSSam Parker     case MVE_VQRSHL_qrs32:
835ce39278fSSam Parker     case MVE_VQRSHL_qrs8:
836ce39278fSSam Parker     case MVE_VQRSHL_qru16:
837ce39278fSSam Parker     case MVE_VQRSHL_qru8:
838ce39278fSSam Parker     case MVE_VQRSHL_qru32:
839ce39278fSSam Parker     case MVE_VQSHLU_imms16:
840ce39278fSSam Parker     case MVE_VQSHLU_imms32:
841ce39278fSSam Parker     case MVE_VQSHLU_imms8:
8423fab4276SSimon Tatham     case MVE_VQSHLimms16:
8433fab4276SSimon Tatham     case MVE_VQSHLimms32:
8443fab4276SSimon Tatham     case MVE_VQSHLimms8:
8453fab4276SSimon Tatham     case MVE_VQSHLimmu16:
8463fab4276SSimon Tatham     case MVE_VQSHLimmu32:
8473fab4276SSimon Tatham     case MVE_VQSHLimmu8:
848ce39278fSSam Parker     case MVE_VQSHL_by_vecs16:
849ce39278fSSam Parker     case MVE_VQSHL_by_vecs32:
850ce39278fSSam Parker     case MVE_VQSHL_by_vecs8:
851ce39278fSSam Parker     case MVE_VQSHL_by_vecu16:
852ce39278fSSam Parker     case MVE_VQSHL_by_vecu32:
853ce39278fSSam Parker     case MVE_VQSHL_by_vecu8:
854ce39278fSSam Parker     case MVE_VQSHL_qrs16:
855ce39278fSSam Parker     case MVE_VQSHL_qrs32:
856ce39278fSSam Parker     case MVE_VQSHL_qrs8:
857ce39278fSSam Parker     case MVE_VQSHL_qru16:
858ce39278fSSam Parker     case MVE_VQSHL_qru32:
859ce39278fSSam Parker     case MVE_VQSHL_qru8:
86077e30758SSam Parker     case MVE_VQRSHRNbhs16:
86177e30758SSam Parker     case MVE_VQRSHRNbhs32:
86277e30758SSam Parker     case MVE_VQRSHRNbhu16:
86377e30758SSam Parker     case MVE_VQRSHRNbhu32:
86477e30758SSam Parker     case MVE_VQRSHRNths16:
86577e30758SSam Parker     case MVE_VQRSHRNths32:
86677e30758SSam Parker     case MVE_VQRSHRNthu16:
86777e30758SSam Parker     case MVE_VQRSHRNthu32:
86877e30758SSam Parker     case MVE_VQRSHRUNs16bh:
86977e30758SSam Parker     case MVE_VQRSHRUNs16th:
87077e30758SSam Parker     case MVE_VQRSHRUNs32bh:
87177e30758SSam Parker     case MVE_VQRSHRUNs32th:
87277e30758SSam Parker     case MVE_VQSHRNbhs16:
87377e30758SSam Parker     case MVE_VQSHRNbhs32:
87477e30758SSam Parker     case MVE_VQSHRNbhu16:
87577e30758SSam Parker     case MVE_VQSHRNbhu32:
87677e30758SSam Parker     case MVE_VQSHRNths16:
87777e30758SSam Parker     case MVE_VQSHRNths32:
87877e30758SSam Parker     case MVE_VQSHRNthu16:
87977e30758SSam Parker     case MVE_VQSHRNthu32:
88077e30758SSam Parker     case MVE_VQSHRUNs16bh:
88177e30758SSam Parker     case MVE_VQSHRUNs16th:
88277e30758SSam Parker     case MVE_VQSHRUNs32bh:
88377e30758SSam Parker     case MVE_VQSHRUNs32th:
884ce39278fSSam Parker     case MVE_VQSUB_qr_s16:
885ce39278fSSam Parker     case MVE_VQSUB_qr_s32:
886ce39278fSSam Parker     case MVE_VQSUB_qr_s8:
887ce39278fSSam Parker     case MVE_VQSUB_qr_u16:
888ce39278fSSam Parker     case MVE_VQSUB_qr_u32:
889ce39278fSSam Parker     case MVE_VQSUB_qr_u8:
890ce39278fSSam Parker     case MVE_VQSUBs16:
891ce39278fSSam Parker     case MVE_VQSUBs32:
892ce39278fSSam Parker     case MVE_VQSUBs8:
893ce39278fSSam Parker     case MVE_VQSUBu16:
894ce39278fSSam Parker     case MVE_VQSUBu32:
895ce39278fSSam Parker     case MVE_VQSUBu8:
896ce39278fSSam Parker     case MVE_VRHADDs16:
897ce39278fSSam Parker     case MVE_VRHADDs32:
898ce39278fSSam Parker     case MVE_VRHADDs8:
899ce39278fSSam Parker     case MVE_VRHADDu16:
900ce39278fSSam Parker     case MVE_VRHADDu32:
901ce39278fSSam Parker     case MVE_VRHADDu8:
902ce39278fSSam Parker     case MVE_VRINTf16A:
903ce39278fSSam Parker     case MVE_VRINTf16M:
904ce39278fSSam Parker     case MVE_VRINTf16N:
905ce39278fSSam Parker     case MVE_VRINTf16P:
906ce39278fSSam Parker     case MVE_VRINTf16X:
907ce39278fSSam Parker     case MVE_VRINTf16Z:
908ce39278fSSam Parker     case MVE_VRINTf32A:
909ce39278fSSam Parker     case MVE_VRINTf32M:
910ce39278fSSam Parker     case MVE_VRINTf32N:
911ce39278fSSam Parker     case MVE_VRINTf32P:
912ce39278fSSam Parker     case MVE_VRINTf32X:
913ce39278fSSam Parker     case MVE_VRINTf32Z:
9142cf0e52bSDavid Green     case MVE_VRMULHs32:
9152cf0e52bSDavid Green     case MVE_VRMULHs16:
9162cf0e52bSDavid Green     case MVE_VRMULHs8:
9172cf0e52bSDavid Green     case MVE_VRMULHu32:
9182cf0e52bSDavid Green     case MVE_VRMULHu16:
9192cf0e52bSDavid Green     case MVE_VRMULHu8:
920ce39278fSSam Parker     case MVE_VRSHL_by_vecs16:
921ce39278fSSam Parker     case MVE_VRSHL_by_vecs32:
922ce39278fSSam Parker     case MVE_VRSHL_by_vecs8:
923ce39278fSSam Parker     case MVE_VRSHL_by_vecu16:
924ce39278fSSam Parker     case MVE_VRSHL_by_vecu32:
925ce39278fSSam Parker     case MVE_VRSHL_by_vecu8:
926ce39278fSSam Parker     case MVE_VRSHL_qrs16:
927ce39278fSSam Parker     case MVE_VRSHL_qrs32:
928ce39278fSSam Parker     case MVE_VRSHL_qrs8:
929ce39278fSSam Parker     case MVE_VRSHL_qru16:
930ce39278fSSam Parker     case MVE_VRSHL_qru32:
931ce39278fSSam Parker     case MVE_VRSHL_qru8:
932ce39278fSSam Parker     case MVE_VRSHR_imms16:
933ce39278fSSam Parker     case MVE_VRSHR_imms32:
934ce39278fSSam Parker     case MVE_VRSHR_imms8:
935ce39278fSSam Parker     case MVE_VRSHR_immu16:
936ce39278fSSam Parker     case MVE_VRSHR_immu32:
937ce39278fSSam Parker     case MVE_VRSHR_immu8:
93877e30758SSam Parker     case MVE_VRSHRNi16bh:
93977e30758SSam Parker     case MVE_VRSHRNi16th:
94077e30758SSam Parker     case MVE_VRSHRNi32bh:
94177e30758SSam Parker     case MVE_VRSHRNi32th:
942ce39278fSSam Parker     case MVE_VSHL_by_vecs16:
943ce39278fSSam Parker     case MVE_VSHL_by_vecs32:
944ce39278fSSam Parker     case MVE_VSHL_by_vecs8:
945ce39278fSSam Parker     case MVE_VSHL_by_vecu16:
946ce39278fSSam Parker     case MVE_VSHL_by_vecu32:
947ce39278fSSam Parker     case MVE_VSHL_by_vecu8:
948ce39278fSSam Parker     case MVE_VSHL_immi16:
949ce39278fSSam Parker     case MVE_VSHL_immi32:
950ce39278fSSam Parker     case MVE_VSHL_immi8:
951ce39278fSSam Parker     case MVE_VSHL_qrs16:
952ce39278fSSam Parker     case MVE_VSHL_qrs32:
953ce39278fSSam Parker     case MVE_VSHL_qrs8:
954ce39278fSSam Parker     case MVE_VSHL_qru16:
955ce39278fSSam Parker     case MVE_VSHL_qru32:
956ce39278fSSam Parker     case MVE_VSHL_qru8:
957ce39278fSSam Parker     case MVE_VSHR_imms16:
958ce39278fSSam Parker     case MVE_VSHR_imms32:
959ce39278fSSam Parker     case MVE_VSHR_imms8:
960ce39278fSSam Parker     case MVE_VSHR_immu16:
961ce39278fSSam Parker     case MVE_VSHR_immu32:
962ce39278fSSam Parker     case MVE_VSHR_immu8:
96377e30758SSam Parker     case MVE_VSHRNi16bh:
96477e30758SSam Parker     case MVE_VSHRNi16th:
96577e30758SSam Parker     case MVE_VSHRNi32bh:
96677e30758SSam Parker     case MVE_VSHRNi32th:
967ce39278fSSam Parker     case MVE_VSLIimm16:
968ce39278fSSam Parker     case MVE_VSLIimm32:
969ce39278fSSam Parker     case MVE_VSLIimm8:
970ce39278fSSam Parker     case MVE_VSRIimm16:
971ce39278fSSam Parker     case MVE_VSRIimm32:
972ce39278fSSam Parker     case MVE_VSRIimm8:
973ce39278fSSam Parker     case MVE_VSTRB16:
974ce39278fSSam Parker     case MVE_VSTRB16_post:
975ce39278fSSam Parker     case MVE_VSTRB16_pre:
976ce39278fSSam Parker     case MVE_VSTRB16_rq:
977ce39278fSSam Parker     case MVE_VSTRB32:
978ce39278fSSam Parker     case MVE_VSTRB32_post:
979ce39278fSSam Parker     case MVE_VSTRB32_pre:
980ce39278fSSam Parker     case MVE_VSTRB32_rq:
981ce39278fSSam Parker     case MVE_VSTRB8_rq:
982ce39278fSSam Parker     case MVE_VSTRBU8:
983ce39278fSSam Parker     case MVE_VSTRBU8_post:
984ce39278fSSam Parker     case MVE_VSTRBU8_pre:
985ce39278fSSam Parker     case MVE_VSTRD64_qi:
986ce39278fSSam Parker     case MVE_VSTRD64_qi_pre:
987ce39278fSSam Parker     case MVE_VSTRD64_rq:
988ce39278fSSam Parker     case MVE_VSTRD64_rq_u:
989ce39278fSSam Parker     case MVE_VSTRH16_rq:
990ce39278fSSam Parker     case MVE_VSTRH16_rq_u:
991ce39278fSSam Parker     case MVE_VSTRH32:
992ce39278fSSam Parker     case MVE_VSTRH32_post:
993ce39278fSSam Parker     case MVE_VSTRH32_pre:
994ce39278fSSam Parker     case MVE_VSTRH32_rq:
995ce39278fSSam Parker     case MVE_VSTRH32_rq_u:
996ce39278fSSam Parker     case MVE_VSTRHU16:
997ce39278fSSam Parker     case MVE_VSTRHU16_post:
998ce39278fSSam Parker     case MVE_VSTRHU16_pre:
999ce39278fSSam Parker     case MVE_VSTRW32_qi:
1000ce39278fSSam Parker     case MVE_VSTRW32_qi_pre:
1001ce39278fSSam Parker     case MVE_VSTRW32_rq:
1002ce39278fSSam Parker     case MVE_VSTRW32_rq_u:
1003ce39278fSSam Parker     case MVE_VSTRWU32:
1004ce39278fSSam Parker     case MVE_VSTRWU32_post:
1005ce39278fSSam Parker     case MVE_VSTRWU32_pre:
1006ce39278fSSam Parker     case MVE_VSUB_qr_f16:
1007ce39278fSSam Parker     case MVE_VSUB_qr_f32:
1008ce39278fSSam Parker     case MVE_VSUB_qr_i16:
1009ce39278fSSam Parker     case MVE_VSUB_qr_i32:
1010ce39278fSSam Parker     case MVE_VSUB_qr_i8:
1011ce39278fSSam Parker     case MVE_VSUBf16:
1012ce39278fSSam Parker     case MVE_VSUBf32:
1013ce39278fSSam Parker     case MVE_VSUBi16:
1014ce39278fSSam Parker     case MVE_VSUBi32:
1015ce39278fSSam Parker     case MVE_VSUBi8:
101686172ce3SSam Parker     case VLDR_P0_off:
101786172ce3SSam Parker     case VLDR_P0_post:
101886172ce3SSam Parker     case VLDR_P0_pre:
101986172ce3SSam Parker     case VLDR_VPR_off:
102086172ce3SSam Parker     case VLDR_VPR_post:
102186172ce3SSam Parker     case VLDR_VPR_pre:
102286172ce3SSam Parker     case VSTR_P0_off:
102386172ce3SSam Parker     case VSTR_P0_post:
102486172ce3SSam Parker     case VSTR_P0_pre:
102586172ce3SSam Parker     case VSTR_VPR_off:
102686172ce3SSam Parker     case VSTR_VPR_post:
102786172ce3SSam Parker     case VSTR_VPR_pre:
102886172ce3SSam Parker     case VMRS_P0:
102986172ce3SSam Parker     case VMRS_VPR:
1030ce39278fSSam Parker       return true;
1031ce39278fSSam Parker     }
1032ce39278fSSam Parker   };
1033ce39278fSSam Parker 
103426a475afSSam Parker   LLVMInitializeARMTargetInfo();
103526a475afSSam Parker   LLVMInitializeARMTarget();
103626a475afSSam Parker   LLVMInitializeARMTargetMC();
103726a475afSSam Parker 
1038eecba950SDavid Green   auto TT(Triple::normalize("thumbv8.1m.main-none-none-eabi"));
103926a475afSSam Parker   std::string Error;
104026a475afSSam Parker   const Target *T = TargetRegistry::lookupTarget(TT, Error);
104126a475afSSam Parker   if (!T) {
104226a475afSSam Parker     dbgs() << Error;
10437fc87159SPaul Robinson     GTEST_SKIP();
104426a475afSSam Parker   }
104526a475afSSam Parker 
104626a475afSSam Parker   TargetOptions Options;
1047*bb3f5e1fSMatin Raayai   auto TM = std::unique_ptr<TargetMachine>(
1048b6a01caaSKazu Hirata       T->createTargetMachine(TT, "generic", "", Options, std::nullopt,
1049*bb3f5e1fSMatin Raayai                              std::nullopt, CodeGenOptLevel::Default));
1050adcd0268SBenjamin Kramer   ARMSubtarget ST(TM->getTargetTriple(), std::string(TM->getTargetCPU()),
1051adcd0268SBenjamin Kramer                   std::string(TM->getTargetFeatureString()),
1052ce39278fSSam Parker                   *static_cast<const ARMBaseTargetMachine *>(TM.get()), false);
105386172ce3SSam Parker 
105426a475afSSam Parker   auto MII = TM->getMCInstrInfo();
105526a475afSSam Parker   for (unsigned i = 0; i < ARM::INSTRUCTION_LIST_END; ++i) {
105626a475afSSam Parker     uint64_t Flags = MII->get(i).TSFlags;
105786172ce3SSam Parker     if ((Flags & ARMII::DomainMask) != ARMII::DomainMVE)
105886172ce3SSam Parker       continue;
1059ce39278fSSam Parker     bool Valid = (Flags & ARMII::ValidForTailPredication) != 0;
1060ce39278fSSam Parker     ASSERT_EQ(IsValidTPOpcode(i), Valid)
106126a475afSSam Parker               << MII->getName(i)
106226a475afSSam Parker               << ": mismatched expectation for tail-predicated safety\n";
106326a475afSSam Parker   }
106426a475afSSam Parker }
106558991ba7SDavid Green 
106658991ba7SDavid Green TEST(MachineInstr, HasSideEffects) {
106758991ba7SDavid Green   using namespace ARM;
1068c697dd9fSDavid Green   std::set<unsigned> UnpredictableOpcodes = {
106974ca67c1SDavid Green       // MVE Instructions
107074ca67c1SDavid Green       MVE_VCTP8,
107174ca67c1SDavid Green       MVE_VCTP16,
107274ca67c1SDavid Green       MVE_VCTP32,
107374ca67c1SDavid Green       MVE_VCTP64,
107474ca67c1SDavid Green       MVE_VPST,
107574ca67c1SDavid Green       MVE_VPTv16i8,
107674ca67c1SDavid Green       MVE_VPTv8i16,
107774ca67c1SDavid Green       MVE_VPTv4i32,
107874ca67c1SDavid Green       MVE_VPTv16i8r,
107974ca67c1SDavid Green       MVE_VPTv8i16r,
108074ca67c1SDavid Green       MVE_VPTv4i32r,
108174ca67c1SDavid Green       MVE_VPTv16s8,
108274ca67c1SDavid Green       MVE_VPTv8s16,
108374ca67c1SDavid Green       MVE_VPTv4s32,
108474ca67c1SDavid Green       MVE_VPTv16s8r,
108574ca67c1SDavid Green       MVE_VPTv8s16r,
108674ca67c1SDavid Green       MVE_VPTv4s32r,
108774ca67c1SDavid Green       MVE_VPTv16u8,
108874ca67c1SDavid Green       MVE_VPTv8u16,
108974ca67c1SDavid Green       MVE_VPTv4u32,
109074ca67c1SDavid Green       MVE_VPTv16u8r,
109174ca67c1SDavid Green       MVE_VPTv8u16r,
109274ca67c1SDavid Green       MVE_VPTv4u32r,
109374ca67c1SDavid Green       MVE_VPTv8f16,
109474ca67c1SDavid Green       MVE_VPTv4f32,
109574ca67c1SDavid Green       MVE_VPTv8f16r,
109674ca67c1SDavid Green       MVE_VPTv4f32r,
109774ca67c1SDavid Green       MVE_VADC,
109874ca67c1SDavid Green       MVE_VADCI,
109974ca67c1SDavid Green       MVE_VSBC,
110074ca67c1SDavid Green       MVE_VSBCI,
110174ca67c1SDavid Green       MVE_VSHLC,
110274ca67c1SDavid Green       // FP Instructions
110374ca67c1SDavid Green       FLDMXIA,
110474ca67c1SDavid Green       FLDMXDB_UPD,
110574ca67c1SDavid Green       FLDMXIA_UPD,
110674ca67c1SDavid Green       FSTMXDB_UPD,
110774ca67c1SDavid Green       FSTMXIA,
110874ca67c1SDavid Green       FSTMXIA_UPD,
110974ca67c1SDavid Green       VLDR_FPCXTNS_off,
111074ca67c1SDavid Green       VLDR_FPCXTNS_off,
111174ca67c1SDavid Green       VLDR_FPCXTNS_post,
111274ca67c1SDavid Green       VLDR_FPCXTNS_pre,
111374ca67c1SDavid Green       VLDR_FPCXTS_off,
111474ca67c1SDavid Green       VLDR_FPCXTS_post,
111574ca67c1SDavid Green       VLDR_FPCXTS_pre,
111674ca67c1SDavid Green       VLDR_FPSCR_NZCVQC_off,
111774ca67c1SDavid Green       VLDR_FPSCR_NZCVQC_post,
111874ca67c1SDavid Green       VLDR_FPSCR_NZCVQC_pre,
111974ca67c1SDavid Green       VLDR_FPSCR_off,
112074ca67c1SDavid Green       VLDR_FPSCR_post,
112174ca67c1SDavid Green       VLDR_FPSCR_pre,
112274ca67c1SDavid Green       VLDR_P0_off,
112374ca67c1SDavid Green       VLDR_P0_post,
112474ca67c1SDavid Green       VLDR_P0_pre,
112574ca67c1SDavid Green       VLDR_VPR_off,
112674ca67c1SDavid Green       VLDR_VPR_post,
112774ca67c1SDavid Green       VLDR_VPR_pre,
112874ca67c1SDavid Green       VLLDM,
11295e688f0dSSivan Shani       VLLDM_T2,
113074ca67c1SDavid Green       VLSTM,
11315e688f0dSSivan Shani       VLSTM_T2,
113274ca67c1SDavid Green       VMRS,
113374ca67c1SDavid Green       VMRS_FPCXTNS,
113474ca67c1SDavid Green       VMRS_FPCXTS,
113574ca67c1SDavid Green       VMRS_FPEXC,
113674ca67c1SDavid Green       VMRS_FPINST,
113774ca67c1SDavid Green       VMRS_FPINST2,
113874ca67c1SDavid Green       VMRS_FPSCR_NZCVQC,
113974ca67c1SDavid Green       VMRS_FPSID,
114074ca67c1SDavid Green       VMRS_MVFR0,
114174ca67c1SDavid Green       VMRS_MVFR1,
114274ca67c1SDavid Green       VMRS_MVFR2,
114374ca67c1SDavid Green       VMRS_P0,
114474ca67c1SDavid Green       VMRS_VPR,
114574ca67c1SDavid Green       VMSR,
114674ca67c1SDavid Green       VMSR_FPCXTNS,
114774ca67c1SDavid Green       VMSR_FPCXTS,
114874ca67c1SDavid Green       VMSR_FPEXC,
114974ca67c1SDavid Green       VMSR_FPINST,
115074ca67c1SDavid Green       VMSR_FPINST2,
115174ca67c1SDavid Green       VMSR_FPSCR_NZCVQC,
115274ca67c1SDavid Green       VMSR_FPSID,
115374ca67c1SDavid Green       VMSR_P0,
115474ca67c1SDavid Green       VMSR_VPR,
115574ca67c1SDavid Green       VSCCLRMD,
115674ca67c1SDavid Green       VSCCLRMS,
115774ca67c1SDavid Green       VSTR_FPCXTNS_off,
115874ca67c1SDavid Green       VSTR_FPCXTNS_post,
115974ca67c1SDavid Green       VSTR_FPCXTNS_pre,
116074ca67c1SDavid Green       VSTR_FPCXTS_off,
116174ca67c1SDavid Green       VSTR_FPCXTS_post,
116274ca67c1SDavid Green       VSTR_FPCXTS_pre,
116374ca67c1SDavid Green       VSTR_FPSCR_NZCVQC_off,
116474ca67c1SDavid Green       VSTR_FPSCR_NZCVQC_post,
116574ca67c1SDavid Green       VSTR_FPSCR_NZCVQC_pre,
116674ca67c1SDavid Green       VSTR_FPSCR_off,
116774ca67c1SDavid Green       VSTR_FPSCR_post,
116874ca67c1SDavid Green       VSTR_FPSCR_pre,
116974ca67c1SDavid Green       VSTR_P0_off,
117074ca67c1SDavid Green       VSTR_P0_post,
117174ca67c1SDavid Green       VSTR_P0_pre,
117274ca67c1SDavid Green       VSTR_VPR_off,
117374ca67c1SDavid Green       VSTR_VPR_post,
117474ca67c1SDavid Green       VSTR_VPR_pre,
117558991ba7SDavid Green   };
117658991ba7SDavid Green 
117758991ba7SDavid Green   LLVMInitializeARMTargetInfo();
117858991ba7SDavid Green   LLVMInitializeARMTarget();
117958991ba7SDavid Green   LLVMInitializeARMTargetMC();
118058991ba7SDavid Green 
1181eecba950SDavid Green   auto TT(Triple::normalize("thumbv8.1m.main-none-none-eabi"));
118258991ba7SDavid Green   std::string Error;
118358991ba7SDavid Green   const Target *T = TargetRegistry::lookupTarget(TT, Error);
118458991ba7SDavid Green   if (!T) {
118558991ba7SDavid Green     dbgs() << Error;
11867fc87159SPaul Robinson     GTEST_SKIP();
118758991ba7SDavid Green   }
118858991ba7SDavid Green 
118958991ba7SDavid Green   TargetOptions Options;
1190*bb3f5e1fSMatin Raayai   auto TM = std::unique_ptr<TargetMachine>(
1191b6a01caaSKazu Hirata       T->createTargetMachine(TT, "generic", "", Options, std::nullopt,
1192*bb3f5e1fSMatin Raayai                              std::nullopt, CodeGenOptLevel::Default));
1193adcd0268SBenjamin Kramer   ARMSubtarget ST(TM->getTargetTriple(), std::string(TM->getTargetCPU()),
1194adcd0268SBenjamin Kramer                   std::string(TM->getTargetFeatureString()),
119558991ba7SDavid Green                   *static_cast<const ARMBaseTargetMachine *>(TM.get()), false);
119658991ba7SDavid Green   const ARMBaseInstrInfo *TII = ST.getInstrInfo();
119758991ba7SDavid Green   auto MII = TM->getMCInstrInfo();
119858991ba7SDavid Green 
1199c697dd9fSDavid Green   for (unsigned Op = 0; Op < ARM::INSTRUCTION_LIST_END; ++Op) {
120058991ba7SDavid Green     const MCInstrDesc &Desc = TII->get(Op);
120130371df8SDavid Green     if ((Desc.TSFlags &
120230371df8SDavid Green          (ARMII::DomainMVE | ARMII::DomainVFP | ARMII::DomainNEONA8)) == 0)
1203c697dd9fSDavid Green       continue;
1204c697dd9fSDavid Green     if (UnpredictableOpcodes.count(Op))
1205c697dd9fSDavid Green       continue;
1206c697dd9fSDavid Green 
120758991ba7SDavid Green     ASSERT_FALSE(Desc.hasUnmodeledSideEffects())
120858991ba7SDavid Green         << MII->getName(Op) << " has unexpected side effects";
120958991ba7SDavid Green   }
121058991ba7SDavid Green }
121102cd8a6bSDavid Green 
121202cd8a6bSDavid Green TEST(MachineInstr, MVEVecSize) {
121302cd8a6bSDavid Green   using namespace ARM;
121402cd8a6bSDavid Green   auto MVEVecSize = [](unsigned Opcode) {
121502cd8a6bSDavid Green     switch (Opcode) {
121602cd8a6bSDavid Green     default:
121702cd8a6bSDavid Green     dbgs() << Opcode << "\n";
121802cd8a6bSDavid Green       llvm_unreachable("Unexpected MVE instruction!");
121902cd8a6bSDavid Green     case MVE_ASRLi:
122002cd8a6bSDavid Green     case MVE_ASRLr:
122102cd8a6bSDavid Green     case MVE_LSLLi:
122202cd8a6bSDavid Green     case MVE_LSLLr:
122302cd8a6bSDavid Green     case MVE_LSRL:
122402cd8a6bSDavid Green     case MVE_SQRSHR:
122502cd8a6bSDavid Green     case MVE_SQRSHRL:
122602cd8a6bSDavid Green     case MVE_SQSHL:
122702cd8a6bSDavid Green     case MVE_SQSHLL:
122802cd8a6bSDavid Green     case MVE_SRSHR:
122902cd8a6bSDavid Green     case MVE_SRSHRL:
123002cd8a6bSDavid Green     case MVE_UQRSHL:
123102cd8a6bSDavid Green     case MVE_UQRSHLL:
123202cd8a6bSDavid Green     case MVE_UQSHL:
123302cd8a6bSDavid Green     case MVE_UQSHLL:
123402cd8a6bSDavid Green     case MVE_URSHR:
123502cd8a6bSDavid Green     case MVE_URSHRL:
123602cd8a6bSDavid Green     case MVE_VABAVs8:
123702cd8a6bSDavid Green     case MVE_VABAVu8:
123802cd8a6bSDavid Green     case MVE_VABDs8:
123902cd8a6bSDavid Green     case MVE_VABDu8:
124002cd8a6bSDavid Green     case MVE_VABSs8:
124102cd8a6bSDavid Green     case MVE_VADDVs8acc:
124202cd8a6bSDavid Green     case MVE_VADDVs8no_acc:
124302cd8a6bSDavid Green     case MVE_VADDVu8acc:
124402cd8a6bSDavid Green     case MVE_VADDVu8no_acc:
124502cd8a6bSDavid Green     case MVE_VADD_qr_i8:
124602cd8a6bSDavid Green     case MVE_VADDi8:
124702cd8a6bSDavid Green     case MVE_VBRSR8:
124802cd8a6bSDavid Green     case MVE_VCADDi8:
124902cd8a6bSDavid Green     case MVE_VCLSs8:
125002cd8a6bSDavid Green     case MVE_VCLZs8:
125102cd8a6bSDavid Green     case MVE_VCMPi8:
125202cd8a6bSDavid Green     case MVE_VCMPi8r:
125302cd8a6bSDavid Green     case MVE_VCMPs8:
125402cd8a6bSDavid Green     case MVE_VCMPs8r:
125502cd8a6bSDavid Green     case MVE_VCMPu8:
125602cd8a6bSDavid Green     case MVE_VCMPu8r:
125702cd8a6bSDavid Green     case MVE_VCTP8:
125802cd8a6bSDavid Green     case MVE_VDDUPu8:
125902cd8a6bSDavid Green     case MVE_VDUP8:
126002cd8a6bSDavid Green     case MVE_VDWDUPu8:
126102cd8a6bSDavid Green     case MVE_VHADD_qr_s8:
126202cd8a6bSDavid Green     case MVE_VHADD_qr_u8:
126302cd8a6bSDavid Green     case MVE_VHADDs8:
126402cd8a6bSDavid Green     case MVE_VHADDu8:
126502cd8a6bSDavid Green     case MVE_VHCADDs8:
126602cd8a6bSDavid Green     case MVE_VHSUB_qr_s8:
126702cd8a6bSDavid Green     case MVE_VHSUB_qr_u8:
126802cd8a6bSDavid Green     case MVE_VHSUBs8:
126902cd8a6bSDavid Green     case MVE_VHSUBu8:
127002cd8a6bSDavid Green     case MVE_VIDUPu8:
127102cd8a6bSDavid Green     case MVE_VIWDUPu8:
127202cd8a6bSDavid Green     case MVE_VLD20_8:
127302cd8a6bSDavid Green     case MVE_VLD20_8_wb:
127402cd8a6bSDavid Green     case MVE_VLD21_8:
127502cd8a6bSDavid Green     case MVE_VLD21_8_wb:
127602cd8a6bSDavid Green     case MVE_VLD40_8:
127702cd8a6bSDavid Green     case MVE_VLD40_8_wb:
127802cd8a6bSDavid Green     case MVE_VLD41_8:
127902cd8a6bSDavid Green     case MVE_VLD41_8_wb:
128002cd8a6bSDavid Green     case MVE_VLD42_8:
128102cd8a6bSDavid Green     case MVE_VLD42_8_wb:
128202cd8a6bSDavid Green     case MVE_VLD43_8:
128302cd8a6bSDavid Green     case MVE_VLD43_8_wb:
128402cd8a6bSDavid Green     case MVE_VLDRBU8:
128502cd8a6bSDavid Green     case MVE_VLDRBU8_post:
128602cd8a6bSDavid Green     case MVE_VLDRBU8_pre:
128702cd8a6bSDavid Green     case MVE_VLDRBU8_rq:
128802cd8a6bSDavid Green     case MVE_VMAXAVs8:
128902cd8a6bSDavid Green     case MVE_VMAXAs8:
129002cd8a6bSDavid Green     case MVE_VMAXVs8:
129102cd8a6bSDavid Green     case MVE_VMAXVu8:
129202cd8a6bSDavid Green     case MVE_VMAXs8:
129302cd8a6bSDavid Green     case MVE_VMAXu8:
129402cd8a6bSDavid Green     case MVE_VMINAVs8:
129502cd8a6bSDavid Green     case MVE_VMINAs8:
129602cd8a6bSDavid Green     case MVE_VMINVs8:
129702cd8a6bSDavid Green     case MVE_VMINVu8:
129802cd8a6bSDavid Green     case MVE_VMINs8:
129902cd8a6bSDavid Green     case MVE_VMINu8:
130002cd8a6bSDavid Green     case MVE_VMLADAVas8:
130102cd8a6bSDavid Green     case MVE_VMLADAVau8:
130202cd8a6bSDavid Green     case MVE_VMLADAVaxs8:
130302cd8a6bSDavid Green     case MVE_VMLADAVs8:
130402cd8a6bSDavid Green     case MVE_VMLADAVu8:
130502cd8a6bSDavid Green     case MVE_VMLADAVxs8:
1306e45cbf99SSimon Tatham     case MVE_VMLAS_qr_i8:
1307e45cbf99SSimon Tatham     case MVE_VMLA_qr_i8:
130802cd8a6bSDavid Green     case MVE_VMLSDAVas8:
130902cd8a6bSDavid Green     case MVE_VMLSDAVaxs8:
131002cd8a6bSDavid Green     case MVE_VMLSDAVs8:
131102cd8a6bSDavid Green     case MVE_VMLSDAVxs8:
131202cd8a6bSDavid Green     case MVE_VMOV_from_lane_s8:
131302cd8a6bSDavid Green     case MVE_VMOV_from_lane_u8:
131402cd8a6bSDavid Green     case MVE_VMOV_to_lane_8:
131502cd8a6bSDavid Green     case MVE_VMOVimmi8:
131602cd8a6bSDavid Green     case MVE_VMULHs8:
131702cd8a6bSDavid Green     case MVE_VMULHu8:
131802cd8a6bSDavid Green     case MVE_VMUL_qr_i8:
131902cd8a6bSDavid Green     case MVE_VMULi8:
132002cd8a6bSDavid Green     case MVE_VNEGs8:
132102cd8a6bSDavid Green     case MVE_VPTv16i8:
132202cd8a6bSDavid Green     case MVE_VPTv16i8r:
132302cd8a6bSDavid Green     case MVE_VPTv16s8:
132402cd8a6bSDavid Green     case MVE_VPTv16s8r:
132502cd8a6bSDavid Green     case MVE_VPTv16u8:
132602cd8a6bSDavid Green     case MVE_VPTv16u8r:
132702cd8a6bSDavid Green     case MVE_VQABSs8:
132802cd8a6bSDavid Green     case MVE_VQADD_qr_s8:
132902cd8a6bSDavid Green     case MVE_VQADD_qr_u8:
133002cd8a6bSDavid Green     case MVE_VQADDs8:
133102cd8a6bSDavid Green     case MVE_VQADDu8:
133202cd8a6bSDavid Green     case MVE_VQDMLADHXs8:
133302cd8a6bSDavid Green     case MVE_VQDMLADHs8:
133402cd8a6bSDavid Green     case MVE_VQDMLAH_qrs8:
133502cd8a6bSDavid Green     case MVE_VQDMLASH_qrs8:
133602cd8a6bSDavid Green     case MVE_VQDMLSDHXs8:
133702cd8a6bSDavid Green     case MVE_VQDMLSDHs8:
133802cd8a6bSDavid Green     case MVE_VQDMULH_qr_s8:
133902cd8a6bSDavid Green     case MVE_VQDMULHi8:
134002cd8a6bSDavid Green     case MVE_VQNEGs8:
134102cd8a6bSDavid Green     case MVE_VQRDMLADHXs8:
134202cd8a6bSDavid Green     case MVE_VQRDMLADHs8:
134302cd8a6bSDavid Green     case MVE_VQRDMLAH_qrs8:
134402cd8a6bSDavid Green     case MVE_VQRDMLASH_qrs8:
134502cd8a6bSDavid Green     case MVE_VQRDMLSDHXs8:
134602cd8a6bSDavid Green     case MVE_VQRDMLSDHs8:
134702cd8a6bSDavid Green     case MVE_VQRDMULH_qr_s8:
134802cd8a6bSDavid Green     case MVE_VQRDMULHi8:
134902cd8a6bSDavid Green     case MVE_VQRSHL_by_vecs8:
135002cd8a6bSDavid Green     case MVE_VQRSHL_by_vecu8:
135102cd8a6bSDavid Green     case MVE_VQRSHL_qrs8:
135202cd8a6bSDavid Green     case MVE_VQRSHL_qru8:
135302cd8a6bSDavid Green     case MVE_VQSHLU_imms8:
135402cd8a6bSDavid Green     case MVE_VQSHL_by_vecs8:
135502cd8a6bSDavid Green     case MVE_VQSHL_by_vecu8:
135602cd8a6bSDavid Green     case MVE_VQSHL_qrs8:
135702cd8a6bSDavid Green     case MVE_VQSHL_qru8:
135802cd8a6bSDavid Green     case MVE_VQSHLimms8:
135902cd8a6bSDavid Green     case MVE_VQSHLimmu8:
136002cd8a6bSDavid Green     case MVE_VQSUB_qr_s8:
136102cd8a6bSDavid Green     case MVE_VQSUB_qr_u8:
136202cd8a6bSDavid Green     case MVE_VQSUBs8:
136302cd8a6bSDavid Green     case MVE_VQSUBu8:
136402cd8a6bSDavid Green     case MVE_VRHADDs8:
136502cd8a6bSDavid Green     case MVE_VRHADDu8:
136602cd8a6bSDavid Green     case MVE_VRMULHs8:
136702cd8a6bSDavid Green     case MVE_VRMULHu8:
136802cd8a6bSDavid Green     case MVE_VRSHL_by_vecs8:
136902cd8a6bSDavid Green     case MVE_VRSHL_by_vecu8:
137002cd8a6bSDavid Green     case MVE_VRSHL_qrs8:
137102cd8a6bSDavid Green     case MVE_VRSHL_qru8:
137202cd8a6bSDavid Green     case MVE_VRSHR_imms8:
137302cd8a6bSDavid Green     case MVE_VRSHR_immu8:
137402cd8a6bSDavid Green     case MVE_VSHL_by_vecs8:
137502cd8a6bSDavid Green     case MVE_VSHL_by_vecu8:
137602cd8a6bSDavid Green     case MVE_VSHL_immi8:
137702cd8a6bSDavid Green     case MVE_VSHL_qru8:
137802cd8a6bSDavid Green     case MVE_VSHL_qrs8:
137902cd8a6bSDavid Green     case MVE_VSHR_imms8:
138002cd8a6bSDavid Green     case MVE_VSHR_immu8:
138102cd8a6bSDavid Green     case MVE_VSLIimm8:
138202cd8a6bSDavid Green     case MVE_VSRIimm8:
138302cd8a6bSDavid Green     case MVE_VST20_8:
138402cd8a6bSDavid Green     case MVE_VST20_8_wb:
138502cd8a6bSDavid Green     case MVE_VST21_8:
138602cd8a6bSDavid Green     case MVE_VST21_8_wb:
138702cd8a6bSDavid Green     case MVE_VST40_8:
138802cd8a6bSDavid Green     case MVE_VST40_8_wb:
138902cd8a6bSDavid Green     case MVE_VST41_8:
139002cd8a6bSDavid Green     case MVE_VST41_8_wb:
139102cd8a6bSDavid Green     case MVE_VST42_8:
139202cd8a6bSDavid Green     case MVE_VST42_8_wb:
139302cd8a6bSDavid Green     case MVE_VST43_8:
139402cd8a6bSDavid Green     case MVE_VST43_8_wb:
139502cd8a6bSDavid Green     case MVE_VSTRB8_rq:
139602cd8a6bSDavid Green     case MVE_VSTRBU8:
139702cd8a6bSDavid Green     case MVE_VSTRBU8_post:
139802cd8a6bSDavid Green     case MVE_VSTRBU8_pre:
139902cd8a6bSDavid Green     case MVE_VSUB_qr_i8:
140002cd8a6bSDavid Green     case MVE_VSUBi8:
140102cd8a6bSDavid Green     case MVE_VAND:
140202cd8a6bSDavid Green     case MVE_VBIC:
140302cd8a6bSDavid Green     case MVE_VEOR:
140402cd8a6bSDavid Green     case MVE_VMVN:
140502cd8a6bSDavid Green     case MVE_VORN:
140602cd8a6bSDavid Green     case MVE_VORR:
140702cd8a6bSDavid Green     case MVE_VPNOT:
140802cd8a6bSDavid Green     case MVE_VPSEL:
140902cd8a6bSDavid Green     case MVE_VPST:
141073346f58SDavid Green     case MQPRCopy:
141102cd8a6bSDavid Green       return 0;
141202cd8a6bSDavid Green     case MVE_VABAVs16:
141302cd8a6bSDavid Green     case MVE_VABAVu16:
141402cd8a6bSDavid Green     case MVE_VABDf16:
141502cd8a6bSDavid Green     case MVE_VABDs16:
141602cd8a6bSDavid Green     case MVE_VABDu16:
141702cd8a6bSDavid Green     case MVE_VABSf16:
141802cd8a6bSDavid Green     case MVE_VABSs16:
141902cd8a6bSDavid Green     case MVE_VADDVs16acc:
142002cd8a6bSDavid Green     case MVE_VADDVs16no_acc:
142102cd8a6bSDavid Green     case MVE_VADDVu16acc:
142202cd8a6bSDavid Green     case MVE_VADDVu16no_acc:
142302cd8a6bSDavid Green     case MVE_VADD_qr_f16:
142402cd8a6bSDavid Green     case MVE_VADD_qr_i16:
142502cd8a6bSDavid Green     case MVE_VADDf16:
142602cd8a6bSDavid Green     case MVE_VADDi16:
142702cd8a6bSDavid Green     case MVE_VBICimmi16:
142802cd8a6bSDavid Green     case MVE_VBRSR16:
142902cd8a6bSDavid Green     case MVE_VCADDf16:
143002cd8a6bSDavid Green     case MVE_VCADDi16:
143102cd8a6bSDavid Green     case MVE_VCLSs16:
143202cd8a6bSDavid Green     case MVE_VCLZs16:
143302cd8a6bSDavid Green     case MVE_VCMLAf16:
143402cd8a6bSDavid Green     case MVE_VCMPf16:
143502cd8a6bSDavid Green     case MVE_VCMPf16r:
143602cd8a6bSDavid Green     case MVE_VCMPi16:
143702cd8a6bSDavid Green     case MVE_VCMPi16r:
143802cd8a6bSDavid Green     case MVE_VCMPs16:
143902cd8a6bSDavid Green     case MVE_VCMPs16r:
144002cd8a6bSDavid Green     case MVE_VCMPu16:
144102cd8a6bSDavid Green     case MVE_VCMPu16r:
144202cd8a6bSDavid Green     case MVE_VCMULf16:
144302cd8a6bSDavid Green     case MVE_VCTP16:
144402cd8a6bSDavid Green     case MVE_VCVTf16s16_fix:
144502cd8a6bSDavid Green     case MVE_VCVTf16s16n:
144602cd8a6bSDavid Green     case MVE_VCVTf16u16_fix:
144702cd8a6bSDavid Green     case MVE_VCVTf16u16n:
144802cd8a6bSDavid Green     case MVE_VCVTs16f16_fix:
144902cd8a6bSDavid Green     case MVE_VCVTs16f16a:
145002cd8a6bSDavid Green     case MVE_VCVTs16f16m:
145102cd8a6bSDavid Green     case MVE_VCVTs16f16n:
145202cd8a6bSDavid Green     case MVE_VCVTs16f16p:
145302cd8a6bSDavid Green     case MVE_VCVTs16f16z:
145402cd8a6bSDavid Green     case MVE_VCVTu16f16_fix:
145502cd8a6bSDavid Green     case MVE_VCVTu16f16a:
145602cd8a6bSDavid Green     case MVE_VCVTu16f16m:
145702cd8a6bSDavid Green     case MVE_VCVTu16f16n:
145802cd8a6bSDavid Green     case MVE_VCVTu16f16p:
145902cd8a6bSDavid Green     case MVE_VCVTu16f16z:
146002cd8a6bSDavid Green     case MVE_VDDUPu16:
146102cd8a6bSDavid Green     case MVE_VDUP16:
146202cd8a6bSDavid Green     case MVE_VDWDUPu16:
146302cd8a6bSDavid Green     case MVE_VFMA_qr_Sf16:
146402cd8a6bSDavid Green     case MVE_VFMA_qr_f16:
146502cd8a6bSDavid Green     case MVE_VFMAf16:
146602cd8a6bSDavid Green     case MVE_VFMSf16:
146702cd8a6bSDavid Green     case MVE_VHADD_qr_s16:
146802cd8a6bSDavid Green     case MVE_VHADD_qr_u16:
146902cd8a6bSDavid Green     case MVE_VHADDs16:
147002cd8a6bSDavid Green     case MVE_VHADDu16:
147102cd8a6bSDavid Green     case MVE_VHCADDs16:
147202cd8a6bSDavid Green     case MVE_VHSUB_qr_s16:
147302cd8a6bSDavid Green     case MVE_VHSUB_qr_u16:
147402cd8a6bSDavid Green     case MVE_VHSUBs16:
147502cd8a6bSDavid Green     case MVE_VHSUBu16:
147602cd8a6bSDavid Green     case MVE_VIDUPu16:
147702cd8a6bSDavid Green     case MVE_VIWDUPu16:
147802cd8a6bSDavid Green     case MVE_VLD20_16:
147902cd8a6bSDavid Green     case MVE_VLD20_16_wb:
148002cd8a6bSDavid Green     case MVE_VLD21_16:
148102cd8a6bSDavid Green     case MVE_VLD21_16_wb:
148202cd8a6bSDavid Green     case MVE_VLD40_16:
148302cd8a6bSDavid Green     case MVE_VLD40_16_wb:
148402cd8a6bSDavid Green     case MVE_VLD41_16:
148502cd8a6bSDavid Green     case MVE_VLD41_16_wb:
148602cd8a6bSDavid Green     case MVE_VLD42_16:
148702cd8a6bSDavid Green     case MVE_VLD42_16_wb:
148802cd8a6bSDavid Green     case MVE_VLD43_16:
148902cd8a6bSDavid Green     case MVE_VLD43_16_wb:
149002cd8a6bSDavid Green     case MVE_VLDRBS16:
149102cd8a6bSDavid Green     case MVE_VLDRBS16_post:
149202cd8a6bSDavid Green     case MVE_VLDRBS16_pre:
149302cd8a6bSDavid Green     case MVE_VLDRBS16_rq:
149402cd8a6bSDavid Green     case MVE_VLDRBU16:
149502cd8a6bSDavid Green     case MVE_VLDRBU16_post:
149602cd8a6bSDavid Green     case MVE_VLDRBU16_pre:
149702cd8a6bSDavid Green     case MVE_VLDRBU16_rq:
149802cd8a6bSDavid Green     case MVE_VLDRHU16:
149902cd8a6bSDavid Green     case MVE_VLDRHU16_post:
150002cd8a6bSDavid Green     case MVE_VLDRHU16_pre:
150102cd8a6bSDavid Green     case MVE_VLDRHU16_rq:
150202cd8a6bSDavid Green     case MVE_VLDRHU16_rq_u:
150302cd8a6bSDavid Green     case MVE_VMAXAVs16:
150402cd8a6bSDavid Green     case MVE_VMAXAs16:
150502cd8a6bSDavid Green     case MVE_VMAXNMAVf16:
150602cd8a6bSDavid Green     case MVE_VMAXNMAf16:
150702cd8a6bSDavid Green     case MVE_VMAXNMVf16:
150802cd8a6bSDavid Green     case MVE_VMAXNMf16:
150902cd8a6bSDavid Green     case MVE_VMAXVs16:
151002cd8a6bSDavid Green     case MVE_VMAXVu16:
151102cd8a6bSDavid Green     case MVE_VMAXs16:
151202cd8a6bSDavid Green     case MVE_VMAXu16:
151302cd8a6bSDavid Green     case MVE_VMINAVs16:
151402cd8a6bSDavid Green     case MVE_VMINAs16:
151502cd8a6bSDavid Green     case MVE_VMINNMAVf16:
151602cd8a6bSDavid Green     case MVE_VMINNMAf16:
151702cd8a6bSDavid Green     case MVE_VMINNMVf16:
151802cd8a6bSDavid Green     case MVE_VMINNMf16:
151902cd8a6bSDavid Green     case MVE_VMINVs16:
152002cd8a6bSDavid Green     case MVE_VMINVu16:
152102cd8a6bSDavid Green     case MVE_VMINs16:
152202cd8a6bSDavid Green     case MVE_VMINu16:
152302cd8a6bSDavid Green     case MVE_VMLADAVas16:
152402cd8a6bSDavid Green     case MVE_VMLADAVau16:
152502cd8a6bSDavid Green     case MVE_VMLADAVaxs16:
152602cd8a6bSDavid Green     case MVE_VMLADAVs16:
152702cd8a6bSDavid Green     case MVE_VMLADAVu16:
152802cd8a6bSDavid Green     case MVE_VMLADAVxs16:
152902cd8a6bSDavid Green     case MVE_VMLALDAVas16:
153002cd8a6bSDavid Green     case MVE_VMLALDAVau16:
153102cd8a6bSDavid Green     case MVE_VMLALDAVaxs16:
153202cd8a6bSDavid Green     case MVE_VMLALDAVs16:
153302cd8a6bSDavid Green     case MVE_VMLALDAVu16:
153402cd8a6bSDavid Green     case MVE_VMLALDAVxs16:
1535e45cbf99SSimon Tatham     case MVE_VMLAS_qr_i16:
1536e45cbf99SSimon Tatham     case MVE_VMLA_qr_i16:
153702cd8a6bSDavid Green     case MVE_VMLSDAVas16:
153802cd8a6bSDavid Green     case MVE_VMLSDAVaxs16:
153902cd8a6bSDavid Green     case MVE_VMLSDAVs16:
154002cd8a6bSDavid Green     case MVE_VMLSDAVxs16:
154102cd8a6bSDavid Green     case MVE_VMLSLDAVas16:
154202cd8a6bSDavid Green     case MVE_VMLSLDAVaxs16:
154302cd8a6bSDavid Green     case MVE_VMLSLDAVs16:
154402cd8a6bSDavid Green     case MVE_VMLSLDAVxs16:
154502cd8a6bSDavid Green     case MVE_VMOVNi16bh:
154602cd8a6bSDavid Green     case MVE_VMOVNi16th:
154702cd8a6bSDavid Green     case MVE_VMOV_from_lane_s16:
154802cd8a6bSDavid Green     case MVE_VMOV_from_lane_u16:
154902cd8a6bSDavid Green     case MVE_VMOV_to_lane_16:
155002cd8a6bSDavid Green     case MVE_VMOVimmi16:
155102cd8a6bSDavid Green     case MVE_VMOVLs8bh:
155202cd8a6bSDavid Green     case MVE_VMOVLs8th:
155302cd8a6bSDavid Green     case MVE_VMOVLu8bh:
155402cd8a6bSDavid Green     case MVE_VMOVLu8th:
155502cd8a6bSDavid Green     case MVE_VMULLBp8:
155602cd8a6bSDavid Green     case MVE_VMULLBs8:
155702cd8a6bSDavid Green     case MVE_VMULLBu8:
155802cd8a6bSDavid Green     case MVE_VMULLTp8:
155902cd8a6bSDavid Green     case MVE_VMULLTs8:
156002cd8a6bSDavid Green     case MVE_VMULLTu8:
156102cd8a6bSDavid Green     case MVE_VMULHs16:
156202cd8a6bSDavid Green     case MVE_VMULHu16:
156302cd8a6bSDavid Green     case MVE_VMUL_qr_f16:
156402cd8a6bSDavid Green     case MVE_VMUL_qr_i16:
156502cd8a6bSDavid Green     case MVE_VMULf16:
156602cd8a6bSDavid Green     case MVE_VMULi16:
156702cd8a6bSDavid Green     case MVE_VMVNimmi16:
156802cd8a6bSDavid Green     case MVE_VNEGf16:
156902cd8a6bSDavid Green     case MVE_VNEGs16:
157002cd8a6bSDavid Green     case MVE_VORRimmi16:
157102cd8a6bSDavid Green     case MVE_VPTv8f16:
157202cd8a6bSDavid Green     case MVE_VPTv8f16r:
157302cd8a6bSDavid Green     case MVE_VPTv8i16:
157402cd8a6bSDavid Green     case MVE_VPTv8i16r:
157502cd8a6bSDavid Green     case MVE_VPTv8s16:
157602cd8a6bSDavid Green     case MVE_VPTv8s16r:
157702cd8a6bSDavid Green     case MVE_VPTv8u16:
157802cd8a6bSDavid Green     case MVE_VPTv8u16r:
157902cd8a6bSDavid Green     case MVE_VQABSs16:
158002cd8a6bSDavid Green     case MVE_VQADD_qr_s16:
158102cd8a6bSDavid Green     case MVE_VQADD_qr_u16:
158202cd8a6bSDavid Green     case MVE_VQADDs16:
158302cd8a6bSDavid Green     case MVE_VQADDu16:
158402cd8a6bSDavid Green     case MVE_VQDMLADHXs16:
158502cd8a6bSDavid Green     case MVE_VQDMLADHs16:
158602cd8a6bSDavid Green     case MVE_VQDMLAH_qrs16:
158702cd8a6bSDavid Green     case MVE_VQDMLASH_qrs16:
158802cd8a6bSDavid Green     case MVE_VQDMLSDHXs16:
158902cd8a6bSDavid Green     case MVE_VQDMLSDHs16:
159002cd8a6bSDavid Green     case MVE_VQDMULH_qr_s16:
159102cd8a6bSDavid Green     case MVE_VQDMULHi16:
159202cd8a6bSDavid Green     case MVE_VQDMULL_qr_s16bh:
159302cd8a6bSDavid Green     case MVE_VQDMULL_qr_s16th:
159402cd8a6bSDavid Green     case MVE_VQDMULLs16bh:
159502cd8a6bSDavid Green     case MVE_VQDMULLs16th:
159602cd8a6bSDavid Green     case MVE_VQMOVNs16bh:
159702cd8a6bSDavid Green     case MVE_VQMOVNs16th:
159802cd8a6bSDavid Green     case MVE_VQMOVNu16bh:
159902cd8a6bSDavid Green     case MVE_VQMOVNu16th:
160002cd8a6bSDavid Green     case MVE_VQMOVUNs16bh:
160102cd8a6bSDavid Green     case MVE_VQMOVUNs16th:
160202cd8a6bSDavid Green     case MVE_VQNEGs16:
160302cd8a6bSDavid Green     case MVE_VQRDMLADHXs16:
160402cd8a6bSDavid Green     case MVE_VQRDMLADHs16:
160502cd8a6bSDavid Green     case MVE_VQRDMLAH_qrs16:
160602cd8a6bSDavid Green     case MVE_VQRDMLASH_qrs16:
160702cd8a6bSDavid Green     case MVE_VQRDMLSDHXs16:
160802cd8a6bSDavid Green     case MVE_VQRDMLSDHs16:
160902cd8a6bSDavid Green     case MVE_VQRDMULH_qr_s16:
161002cd8a6bSDavid Green     case MVE_VQRDMULHi16:
161102cd8a6bSDavid Green     case MVE_VQRSHL_by_vecs16:
161202cd8a6bSDavid Green     case MVE_VQRSHL_by_vecu16:
161302cd8a6bSDavid Green     case MVE_VQRSHL_qrs16:
161402cd8a6bSDavid Green     case MVE_VQRSHL_qru16:
161502cd8a6bSDavid Green     case MVE_VQRSHRNbhs16:
161602cd8a6bSDavid Green     case MVE_VQRSHRNbhu16:
161702cd8a6bSDavid Green     case MVE_VQRSHRNths16:
161802cd8a6bSDavid Green     case MVE_VQRSHRNthu16:
161902cd8a6bSDavid Green     case MVE_VQRSHRUNs16bh:
162002cd8a6bSDavid Green     case MVE_VQRSHRUNs16th:
162102cd8a6bSDavid Green     case MVE_VQSHLU_imms16:
162202cd8a6bSDavid Green     case MVE_VQSHL_by_vecs16:
162302cd8a6bSDavid Green     case MVE_VQSHL_by_vecu16:
162402cd8a6bSDavid Green     case MVE_VQSHL_qrs16:
162502cd8a6bSDavid Green     case MVE_VQSHL_qru16:
162602cd8a6bSDavid Green     case MVE_VQSHLimms16:
162702cd8a6bSDavid Green     case MVE_VQSHLimmu16:
162802cd8a6bSDavid Green     case MVE_VQSHRNbhs16:
162902cd8a6bSDavid Green     case MVE_VQSHRNbhu16:
163002cd8a6bSDavid Green     case MVE_VQSHRNths16:
163102cd8a6bSDavid Green     case MVE_VQSHRNthu16:
163202cd8a6bSDavid Green     case MVE_VQSHRUNs16bh:
163302cd8a6bSDavid Green     case MVE_VQSHRUNs16th:
163402cd8a6bSDavid Green     case MVE_VQSUB_qr_s16:
163502cd8a6bSDavid Green     case MVE_VQSUB_qr_u16:
163602cd8a6bSDavid Green     case MVE_VQSUBs16:
163702cd8a6bSDavid Green     case MVE_VQSUBu16:
163802cd8a6bSDavid Green     case MVE_VREV16_8:
163902cd8a6bSDavid Green     case MVE_VRHADDs16:
164002cd8a6bSDavid Green     case MVE_VRHADDu16:
164102cd8a6bSDavid Green     case MVE_VRINTf16A:
164202cd8a6bSDavid Green     case MVE_VRINTf16M:
164302cd8a6bSDavid Green     case MVE_VRINTf16N:
164402cd8a6bSDavid Green     case MVE_VRINTf16P:
164502cd8a6bSDavid Green     case MVE_VRINTf16X:
164602cd8a6bSDavid Green     case MVE_VRINTf16Z:
164702cd8a6bSDavid Green     case MVE_VRMULHs16:
164802cd8a6bSDavid Green     case MVE_VRMULHu16:
164902cd8a6bSDavid Green     case MVE_VRSHL_by_vecs16:
165002cd8a6bSDavid Green     case MVE_VRSHL_by_vecu16:
165102cd8a6bSDavid Green     case MVE_VRSHL_qrs16:
165202cd8a6bSDavid Green     case MVE_VRSHL_qru16:
165302cd8a6bSDavid Green     case MVE_VRSHRNi16bh:
165402cd8a6bSDavid Green     case MVE_VRSHRNi16th:
165502cd8a6bSDavid Green     case MVE_VRSHR_imms16:
165602cd8a6bSDavid Green     case MVE_VRSHR_immu16:
165702cd8a6bSDavid Green     case MVE_VSHLL_imms8bh:
165802cd8a6bSDavid Green     case MVE_VSHLL_imms8th:
165902cd8a6bSDavid Green     case MVE_VSHLL_immu8bh:
166002cd8a6bSDavid Green     case MVE_VSHLL_immu8th:
166102cd8a6bSDavid Green     case MVE_VSHLL_lws8bh:
166202cd8a6bSDavid Green     case MVE_VSHLL_lws8th:
166302cd8a6bSDavid Green     case MVE_VSHLL_lwu8bh:
166402cd8a6bSDavid Green     case MVE_VSHLL_lwu8th:
166502cd8a6bSDavid Green     case MVE_VSHL_by_vecs16:
166602cd8a6bSDavid Green     case MVE_VSHL_by_vecu16:
166702cd8a6bSDavid Green     case MVE_VSHL_immi16:
166802cd8a6bSDavid Green     case MVE_VSHL_qrs16:
166902cd8a6bSDavid Green     case MVE_VSHL_qru16:
167002cd8a6bSDavid Green     case MVE_VSHRNi16bh:
167102cd8a6bSDavid Green     case MVE_VSHRNi16th:
167202cd8a6bSDavid Green     case MVE_VSHR_imms16:
167302cd8a6bSDavid Green     case MVE_VSHR_immu16:
167402cd8a6bSDavid Green     case MVE_VSLIimm16:
167502cd8a6bSDavid Green     case MVE_VSRIimm16:
167602cd8a6bSDavid Green     case MVE_VST20_16:
167702cd8a6bSDavid Green     case MVE_VST20_16_wb:
167802cd8a6bSDavid Green     case MVE_VST21_16:
167902cd8a6bSDavid Green     case MVE_VST21_16_wb:
168002cd8a6bSDavid Green     case MVE_VST40_16:
168102cd8a6bSDavid Green     case MVE_VST40_16_wb:
168202cd8a6bSDavid Green     case MVE_VST41_16:
168302cd8a6bSDavid Green     case MVE_VST41_16_wb:
168402cd8a6bSDavid Green     case MVE_VST42_16:
168502cd8a6bSDavid Green     case MVE_VST42_16_wb:
168602cd8a6bSDavid Green     case MVE_VST43_16:
168702cd8a6bSDavid Green     case MVE_VST43_16_wb:
168802cd8a6bSDavid Green     case MVE_VSTRB16:
168902cd8a6bSDavid Green     case MVE_VSTRB16_post:
169002cd8a6bSDavid Green     case MVE_VSTRB16_pre:
169102cd8a6bSDavid Green     case MVE_VSTRB16_rq:
169202cd8a6bSDavid Green     case MVE_VSTRH16_rq:
169302cd8a6bSDavid Green     case MVE_VSTRH16_rq_u:
169402cd8a6bSDavid Green     case MVE_VSTRHU16:
169502cd8a6bSDavid Green     case MVE_VSTRHU16_post:
169602cd8a6bSDavid Green     case MVE_VSTRHU16_pre:
169702cd8a6bSDavid Green     case MVE_VSUB_qr_f16:
169802cd8a6bSDavid Green     case MVE_VSUB_qr_i16:
169902cd8a6bSDavid Green     case MVE_VSUBf16:
170002cd8a6bSDavid Green     case MVE_VSUBi16:
170102cd8a6bSDavid Green       return 1;
170202cd8a6bSDavid Green     case MVE_VABAVs32:
170302cd8a6bSDavid Green     case MVE_VABAVu32:
170402cd8a6bSDavid Green     case MVE_VABDf32:
170502cd8a6bSDavid Green     case MVE_VABDs32:
170602cd8a6bSDavid Green     case MVE_VABDu32:
170702cd8a6bSDavid Green     case MVE_VABSf32:
170802cd8a6bSDavid Green     case MVE_VABSs32:
170902cd8a6bSDavid Green     case MVE_VADC:
171002cd8a6bSDavid Green     case MVE_VADCI:
171102cd8a6bSDavid Green     case MVE_VADDLVs32acc:
171202cd8a6bSDavid Green     case MVE_VADDLVs32no_acc:
171302cd8a6bSDavid Green     case MVE_VADDLVu32acc:
171402cd8a6bSDavid Green     case MVE_VADDLVu32no_acc:
171502cd8a6bSDavid Green     case MVE_VADDVs32acc:
171602cd8a6bSDavid Green     case MVE_VADDVs32no_acc:
171702cd8a6bSDavid Green     case MVE_VADDVu32acc:
171802cd8a6bSDavid Green     case MVE_VADDVu32no_acc:
171902cd8a6bSDavid Green     case MVE_VADD_qr_f32:
172002cd8a6bSDavid Green     case MVE_VADD_qr_i32:
172102cd8a6bSDavid Green     case MVE_VADDf32:
172202cd8a6bSDavid Green     case MVE_VADDi32:
172302cd8a6bSDavid Green     case MVE_VBICimmi32:
172402cd8a6bSDavid Green     case MVE_VBRSR32:
172502cd8a6bSDavid Green     case MVE_VCADDf32:
172602cd8a6bSDavid Green     case MVE_VCADDi32:
172702cd8a6bSDavid Green     case MVE_VCLSs32:
172802cd8a6bSDavid Green     case MVE_VCLZs32:
172902cd8a6bSDavid Green     case MVE_VCMLAf32:
173002cd8a6bSDavid Green     case MVE_VCMPf32:
173102cd8a6bSDavid Green     case MVE_VCMPf32r:
173202cd8a6bSDavid Green     case MVE_VCMPi32:
173302cd8a6bSDavid Green     case MVE_VCMPi32r:
173402cd8a6bSDavid Green     case MVE_VCMPs32:
173502cd8a6bSDavid Green     case MVE_VCMPs32r:
173602cd8a6bSDavid Green     case MVE_VCMPu32:
173702cd8a6bSDavid Green     case MVE_VCMPu32r:
173802cd8a6bSDavid Green     case MVE_VCMULf32:
173902cd8a6bSDavid Green     case MVE_VCTP32:
174002cd8a6bSDavid Green     case MVE_VCVTf16f32bh:
174102cd8a6bSDavid Green     case MVE_VCVTf16f32th:
174202cd8a6bSDavid Green     case MVE_VCVTf32f16bh:
174302cd8a6bSDavid Green     case MVE_VCVTf32f16th:
174402cd8a6bSDavid Green     case MVE_VCVTf32s32_fix:
174502cd8a6bSDavid Green     case MVE_VCVTf32s32n:
174602cd8a6bSDavid Green     case MVE_VCVTf32u32_fix:
174702cd8a6bSDavid Green     case MVE_VCVTf32u32n:
174802cd8a6bSDavid Green     case MVE_VCVTs32f32_fix:
174902cd8a6bSDavid Green     case MVE_VCVTs32f32a:
175002cd8a6bSDavid Green     case MVE_VCVTs32f32m:
175102cd8a6bSDavid Green     case MVE_VCVTs32f32n:
175202cd8a6bSDavid Green     case MVE_VCVTs32f32p:
175302cd8a6bSDavid Green     case MVE_VCVTs32f32z:
175402cd8a6bSDavid Green     case MVE_VCVTu32f32_fix:
175502cd8a6bSDavid Green     case MVE_VCVTu32f32a:
175602cd8a6bSDavid Green     case MVE_VCVTu32f32m:
175702cd8a6bSDavid Green     case MVE_VCVTu32f32n:
175802cd8a6bSDavid Green     case MVE_VCVTu32f32p:
175902cd8a6bSDavid Green     case MVE_VCVTu32f32z:
176002cd8a6bSDavid Green     case MVE_VDDUPu32:
176102cd8a6bSDavid Green     case MVE_VDUP32:
176202cd8a6bSDavid Green     case MVE_VDWDUPu32:
176302cd8a6bSDavid Green     case MVE_VFMA_qr_Sf32:
176402cd8a6bSDavid Green     case MVE_VFMA_qr_f32:
176502cd8a6bSDavid Green     case MVE_VFMAf32:
176602cd8a6bSDavid Green     case MVE_VFMSf32:
176702cd8a6bSDavid Green     case MVE_VHADD_qr_s32:
176802cd8a6bSDavid Green     case MVE_VHADD_qr_u32:
176902cd8a6bSDavid Green     case MVE_VHADDs32:
177002cd8a6bSDavid Green     case MVE_VHADDu32:
177102cd8a6bSDavid Green     case MVE_VHCADDs32:
177202cd8a6bSDavid Green     case MVE_VHSUB_qr_s32:
177302cd8a6bSDavid Green     case MVE_VHSUB_qr_u32:
177402cd8a6bSDavid Green     case MVE_VHSUBs32:
177502cd8a6bSDavid Green     case MVE_VHSUBu32:
177602cd8a6bSDavid Green     case MVE_VIDUPu32:
177702cd8a6bSDavid Green     case MVE_VIWDUPu32:
177802cd8a6bSDavid Green     case MVE_VLD20_32:
177902cd8a6bSDavid Green     case MVE_VLD20_32_wb:
178002cd8a6bSDavid Green     case MVE_VLD21_32:
178102cd8a6bSDavid Green     case MVE_VLD21_32_wb:
178202cd8a6bSDavid Green     case MVE_VLD40_32:
178302cd8a6bSDavid Green     case MVE_VLD40_32_wb:
178402cd8a6bSDavid Green     case MVE_VLD41_32:
178502cd8a6bSDavid Green     case MVE_VLD41_32_wb:
178602cd8a6bSDavid Green     case MVE_VLD42_32:
178702cd8a6bSDavid Green     case MVE_VLD42_32_wb:
178802cd8a6bSDavid Green     case MVE_VLD43_32:
178902cd8a6bSDavid Green     case MVE_VLD43_32_wb:
179002cd8a6bSDavid Green     case MVE_VLDRBS32:
179102cd8a6bSDavid Green     case MVE_VLDRBS32_post:
179202cd8a6bSDavid Green     case MVE_VLDRBS32_pre:
179302cd8a6bSDavid Green     case MVE_VLDRBS32_rq:
179402cd8a6bSDavid Green     case MVE_VLDRBU32:
179502cd8a6bSDavid Green     case MVE_VLDRBU32_post:
179602cd8a6bSDavid Green     case MVE_VLDRBU32_pre:
179702cd8a6bSDavid Green     case MVE_VLDRBU32_rq:
179802cd8a6bSDavid Green     case MVE_VLDRHS32:
179902cd8a6bSDavid Green     case MVE_VLDRHS32_post:
180002cd8a6bSDavid Green     case MVE_VLDRHS32_pre:
180102cd8a6bSDavid Green     case MVE_VLDRHS32_rq:
180202cd8a6bSDavid Green     case MVE_VLDRHS32_rq_u:
180302cd8a6bSDavid Green     case MVE_VLDRHU32:
180402cd8a6bSDavid Green     case MVE_VLDRHU32_post:
180502cd8a6bSDavid Green     case MVE_VLDRHU32_pre:
180602cd8a6bSDavid Green     case MVE_VLDRHU32_rq:
180702cd8a6bSDavid Green     case MVE_VLDRHU32_rq_u:
180802cd8a6bSDavid Green     case MVE_VLDRWU32:
180902cd8a6bSDavid Green     case MVE_VLDRWU32_post:
181002cd8a6bSDavid Green     case MVE_VLDRWU32_pre:
181102cd8a6bSDavid Green     case MVE_VLDRWU32_qi:
181202cd8a6bSDavid Green     case MVE_VLDRWU32_qi_pre:
181302cd8a6bSDavid Green     case MVE_VLDRWU32_rq:
181402cd8a6bSDavid Green     case MVE_VLDRWU32_rq_u:
181502cd8a6bSDavid Green     case MVE_VMAXAVs32:
181602cd8a6bSDavid Green     case MVE_VMAXAs32:
181702cd8a6bSDavid Green     case MVE_VMAXNMAVf32:
181802cd8a6bSDavid Green     case MVE_VMAXNMAf32:
181902cd8a6bSDavid Green     case MVE_VMAXNMVf32:
182002cd8a6bSDavid Green     case MVE_VMAXNMf32:
182102cd8a6bSDavid Green     case MVE_VMAXVs32:
182202cd8a6bSDavid Green     case MVE_VMAXVu32:
182302cd8a6bSDavid Green     case MVE_VMAXs32:
182402cd8a6bSDavid Green     case MVE_VMAXu32:
182502cd8a6bSDavid Green     case MVE_VMINAVs32:
182602cd8a6bSDavid Green     case MVE_VMINAs32:
182702cd8a6bSDavid Green     case MVE_VMINNMAVf32:
182802cd8a6bSDavid Green     case MVE_VMINNMAf32:
182902cd8a6bSDavid Green     case MVE_VMINNMVf32:
183002cd8a6bSDavid Green     case MVE_VMINNMf32:
183102cd8a6bSDavid Green     case MVE_VMINVs32:
183202cd8a6bSDavid Green     case MVE_VMINVu32:
183302cd8a6bSDavid Green     case MVE_VMINs32:
183402cd8a6bSDavid Green     case MVE_VMINu32:
183502cd8a6bSDavid Green     case MVE_VMLADAVas32:
183602cd8a6bSDavid Green     case MVE_VMLADAVau32:
183702cd8a6bSDavid Green     case MVE_VMLADAVaxs32:
183802cd8a6bSDavid Green     case MVE_VMLADAVs32:
183902cd8a6bSDavid Green     case MVE_VMLADAVu32:
184002cd8a6bSDavid Green     case MVE_VMLADAVxs32:
184102cd8a6bSDavid Green     case MVE_VMLALDAVas32:
184202cd8a6bSDavid Green     case MVE_VMLALDAVau32:
184302cd8a6bSDavid Green     case MVE_VMLALDAVaxs32:
184402cd8a6bSDavid Green     case MVE_VMLALDAVs32:
184502cd8a6bSDavid Green     case MVE_VMLALDAVu32:
184602cd8a6bSDavid Green     case MVE_VMLALDAVxs32:
1847e45cbf99SSimon Tatham     case MVE_VMLAS_qr_i32:
1848e45cbf99SSimon Tatham     case MVE_VMLA_qr_i32:
184902cd8a6bSDavid Green     case MVE_VMLSDAVas32:
185002cd8a6bSDavid Green     case MVE_VMLSDAVaxs32:
185102cd8a6bSDavid Green     case MVE_VMLSDAVs32:
185202cd8a6bSDavid Green     case MVE_VMLSDAVxs32:
185302cd8a6bSDavid Green     case MVE_VMLSLDAVas32:
185402cd8a6bSDavid Green     case MVE_VMLSLDAVaxs32:
185502cd8a6bSDavid Green     case MVE_VMLSLDAVs32:
185602cd8a6bSDavid Green     case MVE_VMLSLDAVxs32:
185702cd8a6bSDavid Green     case MVE_VMOVNi32bh:
185802cd8a6bSDavid Green     case MVE_VMOVNi32th:
185902cd8a6bSDavid Green     case MVE_VMOV_from_lane_32:
186002cd8a6bSDavid Green     case MVE_VMOV_q_rr:
186102cd8a6bSDavid Green     case MVE_VMOV_rr_q:
186202cd8a6bSDavid Green     case MVE_VMOV_to_lane_32:
186302cd8a6bSDavid Green     case MVE_VMOVimmf32:
186402cd8a6bSDavid Green     case MVE_VMOVimmi32:
186502cd8a6bSDavid Green     case MVE_VMOVLs16bh:
186602cd8a6bSDavid Green     case MVE_VMOVLs16th:
186702cd8a6bSDavid Green     case MVE_VMOVLu16bh:
186802cd8a6bSDavid Green     case MVE_VMOVLu16th:
186902cd8a6bSDavid Green     case MVE_VMULHs32:
187002cd8a6bSDavid Green     case MVE_VMULHu32:
187102cd8a6bSDavid Green     case MVE_VMULLBp16:
187202cd8a6bSDavid Green     case MVE_VMULLBs16:
187302cd8a6bSDavid Green     case MVE_VMULLBu16:
187402cd8a6bSDavid Green     case MVE_VMULLTp16:
187502cd8a6bSDavid Green     case MVE_VMULLTs16:
187602cd8a6bSDavid Green     case MVE_VMULLTu16:
187702cd8a6bSDavid Green     case MVE_VMUL_qr_f32:
187802cd8a6bSDavid Green     case MVE_VMUL_qr_i32:
187902cd8a6bSDavid Green     case MVE_VMULf32:
188002cd8a6bSDavid Green     case MVE_VMULi32:
188102cd8a6bSDavid Green     case MVE_VMVNimmi32:
188202cd8a6bSDavid Green     case MVE_VNEGf32:
188302cd8a6bSDavid Green     case MVE_VNEGs32:
188402cd8a6bSDavid Green     case MVE_VORRimmi32:
188502cd8a6bSDavid Green     case MVE_VPTv4f32:
188602cd8a6bSDavid Green     case MVE_VPTv4f32r:
188702cd8a6bSDavid Green     case MVE_VPTv4i32:
188802cd8a6bSDavid Green     case MVE_VPTv4i32r:
188902cd8a6bSDavid Green     case MVE_VPTv4s32:
189002cd8a6bSDavid Green     case MVE_VPTv4s32r:
189102cd8a6bSDavid Green     case MVE_VPTv4u32:
189202cd8a6bSDavid Green     case MVE_VPTv4u32r:
189302cd8a6bSDavid Green     case MVE_VQABSs32:
189402cd8a6bSDavid Green     case MVE_VQADD_qr_s32:
189502cd8a6bSDavid Green     case MVE_VQADD_qr_u32:
189602cd8a6bSDavid Green     case MVE_VQADDs32:
189702cd8a6bSDavid Green     case MVE_VQADDu32:
189802cd8a6bSDavid Green     case MVE_VQDMLADHXs32:
189902cd8a6bSDavid Green     case MVE_VQDMLADHs32:
190002cd8a6bSDavid Green     case MVE_VQDMLAH_qrs32:
190102cd8a6bSDavid Green     case MVE_VQDMLASH_qrs32:
190202cd8a6bSDavid Green     case MVE_VQDMLSDHXs32:
190302cd8a6bSDavid Green     case MVE_VQDMLSDHs32:
190402cd8a6bSDavid Green     case MVE_VQDMULH_qr_s32:
190502cd8a6bSDavid Green     case MVE_VQDMULHi32:
190602cd8a6bSDavid Green     case MVE_VQDMULL_qr_s32bh:
190702cd8a6bSDavid Green     case MVE_VQDMULL_qr_s32th:
190802cd8a6bSDavid Green     case MVE_VQDMULLs32bh:
190902cd8a6bSDavid Green     case MVE_VQDMULLs32th:
191002cd8a6bSDavid Green     case MVE_VQMOVNs32bh:
191102cd8a6bSDavid Green     case MVE_VQMOVNs32th:
191202cd8a6bSDavid Green     case MVE_VQMOVNu32bh:
191302cd8a6bSDavid Green     case MVE_VQMOVNu32th:
191402cd8a6bSDavid Green     case MVE_VQMOVUNs32bh:
191502cd8a6bSDavid Green     case MVE_VQMOVUNs32th:
191602cd8a6bSDavid Green     case MVE_VQNEGs32:
191702cd8a6bSDavid Green     case MVE_VQRDMLADHXs32:
191802cd8a6bSDavid Green     case MVE_VQRDMLADHs32:
191902cd8a6bSDavid Green     case MVE_VQRDMLAH_qrs32:
192002cd8a6bSDavid Green     case MVE_VQRDMLASH_qrs32:
192102cd8a6bSDavid Green     case MVE_VQRDMLSDHXs32:
192202cd8a6bSDavid Green     case MVE_VQRDMLSDHs32:
192302cd8a6bSDavid Green     case MVE_VQRDMULH_qr_s32:
192402cd8a6bSDavid Green     case MVE_VQRDMULHi32:
192502cd8a6bSDavid Green     case MVE_VQRSHL_by_vecs32:
192602cd8a6bSDavid Green     case MVE_VQRSHL_by_vecu32:
192702cd8a6bSDavid Green     case MVE_VQRSHL_qrs32:
192802cd8a6bSDavid Green     case MVE_VQRSHL_qru32:
192902cd8a6bSDavid Green     case MVE_VQRSHRNbhs32:
193002cd8a6bSDavid Green     case MVE_VQRSHRNbhu32:
193102cd8a6bSDavid Green     case MVE_VQRSHRNths32:
193202cd8a6bSDavid Green     case MVE_VQRSHRNthu32:
193302cd8a6bSDavid Green     case MVE_VQRSHRUNs32bh:
193402cd8a6bSDavid Green     case MVE_VQRSHRUNs32th:
193502cd8a6bSDavid Green     case MVE_VQSHLU_imms32:
193602cd8a6bSDavid Green     case MVE_VQSHL_by_vecs32:
193702cd8a6bSDavid Green     case MVE_VQSHL_by_vecu32:
193802cd8a6bSDavid Green     case MVE_VQSHL_qrs32:
193902cd8a6bSDavid Green     case MVE_VQSHL_qru32:
194002cd8a6bSDavid Green     case MVE_VQSHLimms32:
194102cd8a6bSDavid Green     case MVE_VQSHLimmu32:
194202cd8a6bSDavid Green     case MVE_VQSHRNbhs32:
194302cd8a6bSDavid Green     case MVE_VQSHRNbhu32:
194402cd8a6bSDavid Green     case MVE_VQSHRNths32:
194502cd8a6bSDavid Green     case MVE_VQSHRNthu32:
194602cd8a6bSDavid Green     case MVE_VQSHRUNs32bh:
194702cd8a6bSDavid Green     case MVE_VQSHRUNs32th:
194802cd8a6bSDavid Green     case MVE_VQSUB_qr_s32:
194902cd8a6bSDavid Green     case MVE_VQSUB_qr_u32:
195002cd8a6bSDavid Green     case MVE_VQSUBs32:
195102cd8a6bSDavid Green     case MVE_VQSUBu32:
195202cd8a6bSDavid Green     case MVE_VREV32_16:
195302cd8a6bSDavid Green     case MVE_VREV32_8:
195402cd8a6bSDavid Green     case MVE_VRHADDs32:
195502cd8a6bSDavid Green     case MVE_VRHADDu32:
195602cd8a6bSDavid Green     case MVE_VRINTf32A:
195702cd8a6bSDavid Green     case MVE_VRINTf32M:
195802cd8a6bSDavid Green     case MVE_VRINTf32N:
195902cd8a6bSDavid Green     case MVE_VRINTf32P:
196002cd8a6bSDavid Green     case MVE_VRINTf32X:
196102cd8a6bSDavid Green     case MVE_VRINTf32Z:
196202cd8a6bSDavid Green     case MVE_VRMLALDAVHas32:
196302cd8a6bSDavid Green     case MVE_VRMLALDAVHau32:
196402cd8a6bSDavid Green     case MVE_VRMLALDAVHaxs32:
196502cd8a6bSDavid Green     case MVE_VRMLALDAVHs32:
196602cd8a6bSDavid Green     case MVE_VRMLALDAVHu32:
196702cd8a6bSDavid Green     case MVE_VRMLALDAVHxs32:
196802cd8a6bSDavid Green     case MVE_VRMLSLDAVHas32:
196902cd8a6bSDavid Green     case MVE_VRMLSLDAVHaxs32:
197002cd8a6bSDavid Green     case MVE_VRMLSLDAVHs32:
197102cd8a6bSDavid Green     case MVE_VRMLSLDAVHxs32:
197202cd8a6bSDavid Green     case MVE_VRMULHs32:
197302cd8a6bSDavid Green     case MVE_VRMULHu32:
197402cd8a6bSDavid Green     case MVE_VRSHL_by_vecs32:
197502cd8a6bSDavid Green     case MVE_VRSHL_by_vecu32:
197602cd8a6bSDavid Green     case MVE_VRSHL_qrs32:
197702cd8a6bSDavid Green     case MVE_VRSHL_qru32:
197802cd8a6bSDavid Green     case MVE_VRSHRNi32bh:
197902cd8a6bSDavid Green     case MVE_VRSHRNi32th:
198002cd8a6bSDavid Green     case MVE_VRSHR_imms32:
198102cd8a6bSDavid Green     case MVE_VRSHR_immu32:
198202cd8a6bSDavid Green     case MVE_VSBC:
198302cd8a6bSDavid Green     case MVE_VSBCI:
198402cd8a6bSDavid Green     case MVE_VSHLC:
198502cd8a6bSDavid Green     case MVE_VSHLL_imms16bh:
198602cd8a6bSDavid Green     case MVE_VSHLL_imms16th:
198702cd8a6bSDavid Green     case MVE_VSHLL_immu16bh:
198802cd8a6bSDavid Green     case MVE_VSHLL_immu16th:
198902cd8a6bSDavid Green     case MVE_VSHLL_lws16bh:
199002cd8a6bSDavid Green     case MVE_VSHLL_lws16th:
199102cd8a6bSDavid Green     case MVE_VSHLL_lwu16bh:
199202cd8a6bSDavid Green     case MVE_VSHLL_lwu16th:
199302cd8a6bSDavid Green     case MVE_VSHL_by_vecs32:
199402cd8a6bSDavid Green     case MVE_VSHL_by_vecu32:
199502cd8a6bSDavid Green     case MVE_VSHL_immi32:
199602cd8a6bSDavid Green     case MVE_VSHL_qrs32:
199702cd8a6bSDavid Green     case MVE_VSHL_qru32:
199802cd8a6bSDavid Green     case MVE_VSHRNi32bh:
199902cd8a6bSDavid Green     case MVE_VSHRNi32th:
200002cd8a6bSDavid Green     case MVE_VSHR_imms32:
200102cd8a6bSDavid Green     case MVE_VSHR_immu32:
200202cd8a6bSDavid Green     case MVE_VSLIimm32:
200302cd8a6bSDavid Green     case MVE_VSRIimm32:
200402cd8a6bSDavid Green     case MVE_VST20_32:
200502cd8a6bSDavid Green     case MVE_VST20_32_wb:
200602cd8a6bSDavid Green     case MVE_VST21_32:
200702cd8a6bSDavid Green     case MVE_VST21_32_wb:
200802cd8a6bSDavid Green     case MVE_VST40_32:
200902cd8a6bSDavid Green     case MVE_VST40_32_wb:
201002cd8a6bSDavid Green     case MVE_VST41_32:
201102cd8a6bSDavid Green     case MVE_VST41_32_wb:
201202cd8a6bSDavid Green     case MVE_VST42_32:
201302cd8a6bSDavid Green     case MVE_VST42_32_wb:
201402cd8a6bSDavid Green     case MVE_VST43_32:
201502cd8a6bSDavid Green     case MVE_VST43_32_wb:
201602cd8a6bSDavid Green     case MVE_VSTRB32:
201702cd8a6bSDavid Green     case MVE_VSTRB32_post:
201802cd8a6bSDavid Green     case MVE_VSTRB32_pre:
201902cd8a6bSDavid Green     case MVE_VSTRB32_rq:
202002cd8a6bSDavid Green     case MVE_VSTRH32:
202102cd8a6bSDavid Green     case MVE_VSTRH32_post:
202202cd8a6bSDavid Green     case MVE_VSTRH32_pre:
202302cd8a6bSDavid Green     case MVE_VSTRH32_rq:
202402cd8a6bSDavid Green     case MVE_VSTRH32_rq_u:
202502cd8a6bSDavid Green     case MVE_VSTRW32_qi:
202602cd8a6bSDavid Green     case MVE_VSTRW32_qi_pre:
202702cd8a6bSDavid Green     case MVE_VSTRW32_rq:
202802cd8a6bSDavid Green     case MVE_VSTRW32_rq_u:
202902cd8a6bSDavid Green     case MVE_VSTRWU32:
203002cd8a6bSDavid Green     case MVE_VSTRWU32_post:
203102cd8a6bSDavid Green     case MVE_VSTRWU32_pre:
203202cd8a6bSDavid Green     case MVE_VSUB_qr_f32:
203302cd8a6bSDavid Green     case MVE_VSUB_qr_i32:
203402cd8a6bSDavid Green     case MVE_VSUBf32:
203502cd8a6bSDavid Green     case MVE_VSUBi32:
203602cd8a6bSDavid Green       return 2;
203702cd8a6bSDavid Green     case MVE_VCTP64:
203802cd8a6bSDavid Green     case MVE_VLDRDU64_qi:
203902cd8a6bSDavid Green     case MVE_VLDRDU64_qi_pre:
204002cd8a6bSDavid Green     case MVE_VLDRDU64_rq:
204102cd8a6bSDavid Green     case MVE_VLDRDU64_rq_u:
204202cd8a6bSDavid Green     case MVE_VMULLBs32:
204302cd8a6bSDavid Green     case MVE_VMULLBu32:
204402cd8a6bSDavid Green     case MVE_VMULLTs32:
204502cd8a6bSDavid Green     case MVE_VMULLTu32:
204602cd8a6bSDavid Green     case MVE_VMOVimmi64:
204702cd8a6bSDavid Green     case MVE_VREV64_16:
204802cd8a6bSDavid Green     case MVE_VREV64_32:
204902cd8a6bSDavid Green     case MVE_VREV64_8:
205002cd8a6bSDavid Green     case MVE_VSTRD64_qi:
205102cd8a6bSDavid Green     case MVE_VSTRD64_qi_pre:
205202cd8a6bSDavid Green     case MVE_VSTRD64_rq:
205302cd8a6bSDavid Green     case MVE_VSTRD64_rq_u:
205402cd8a6bSDavid Green       return 3;
205502cd8a6bSDavid Green     }
205602cd8a6bSDavid Green   };
205702cd8a6bSDavid Green   LLVMInitializeARMTargetInfo();
205802cd8a6bSDavid Green   LLVMInitializeARMTarget();
205902cd8a6bSDavid Green   LLVMInitializeARMTargetMC();
206002cd8a6bSDavid Green 
206102cd8a6bSDavid Green   auto TT(Triple::normalize("thumbv8.1m.main-none-none-eabi"));
206202cd8a6bSDavid Green   std::string Error;
206302cd8a6bSDavid Green   const Target *T = TargetRegistry::lookupTarget(TT, Error);
206402cd8a6bSDavid Green   if (!T) {
206502cd8a6bSDavid Green     dbgs() << Error;
20667fc87159SPaul Robinson     GTEST_SKIP();
206702cd8a6bSDavid Green   }
206802cd8a6bSDavid Green 
206902cd8a6bSDavid Green   TargetOptions Options;
2070*bb3f5e1fSMatin Raayai   auto TM = std::unique_ptr<TargetMachine>(
2071b6a01caaSKazu Hirata       T->createTargetMachine(TT, "generic", "", Options, std::nullopt,
2072*bb3f5e1fSMatin Raayai                              std::nullopt, CodeGenOptLevel::Default));
207302cd8a6bSDavid Green   ARMSubtarget ST(TM->getTargetTriple(), std::string(TM->getTargetCPU()),
207402cd8a6bSDavid Green                   std::string(TM->getTargetFeatureString()),
207502cd8a6bSDavid Green                   *static_cast<const ARMBaseTargetMachine *>(TM.get()), false);
207602cd8a6bSDavid Green 
207702cd8a6bSDavid Green   auto MII = TM->getMCInstrInfo();
207802cd8a6bSDavid Green   for (unsigned i = 0; i < ARM::INSTRUCTION_LIST_END; ++i) {
207902cd8a6bSDavid Green     uint64_t Flags = MII->get(i).TSFlags;
208002cd8a6bSDavid Green     if ((Flags & ARMII::DomainMask) != ARMII::DomainMVE)
208102cd8a6bSDavid Green       continue;
208202cd8a6bSDavid Green     int Size = (Flags & ARMII::VecSize) >> ARMII::VecSizeShift;
208302cd8a6bSDavid Green     ASSERT_EQ(MVEVecSize(i), Size)
208402cd8a6bSDavid Green               << MII->getName(i)
208502cd8a6bSDavid Green               << ": mismatched expectation for MVE vec size\n";
208602cd8a6bSDavid Green   }
208702cd8a6bSDavid Green }
2088