|  | #include "ARMBaseInstrInfo.h" | 
|  | #include "ARMSubtarget.h" | 
|  | #include "ARMTargetMachine.h" | 
|  | #include "llvm/MC/TargetRegistry.h" | 
|  | #include "llvm/Support/TargetSelect.h" | 
|  | #include "llvm/Target/TargetMachine.h" | 
|  | #include "llvm/Target/TargetOptions.h" | 
|  |  | 
|  | #include "gtest/gtest.h" | 
|  |  | 
|  | using namespace llvm; | 
|  |  | 
|  | TEST(MachineInstructionDoubleWidthResult, IsCorrect) { | 
|  | using namespace ARM; | 
|  |  | 
|  | auto DoubleWidthResult = [](unsigned Opcode) { | 
|  | switch (Opcode) { | 
|  | default: | 
|  | break; | 
|  | case MVE_VMULLBp16: | 
|  | case MVE_VMULLBp8: | 
|  | case MVE_VMULLBs16: | 
|  | case MVE_VMULLBs32: | 
|  | case MVE_VMULLBs8: | 
|  | case MVE_VMULLBu16: | 
|  | case MVE_VMULLBu32: | 
|  | case MVE_VMULLBu8: | 
|  | case MVE_VMULLTp16: | 
|  | case MVE_VMULLTp8: | 
|  | case MVE_VMULLTs16: | 
|  | case MVE_VMULLTs32: | 
|  | case MVE_VMULLTs8: | 
|  | case MVE_VMULLTu16: | 
|  | case MVE_VMULLTu32: | 
|  | case MVE_VMULLTu8: | 
|  | case MVE_VQDMULL_qr_s16bh: | 
|  | case MVE_VQDMULL_qr_s16th: | 
|  | case MVE_VQDMULL_qr_s32bh: | 
|  | case MVE_VQDMULL_qr_s32th: | 
|  | case MVE_VQDMULLs16bh: | 
|  | case MVE_VQDMULLs16th: | 
|  | case MVE_VQDMULLs32bh: | 
|  | case MVE_VQDMULLs32th: | 
|  | case MVE_VMOVLs16bh: | 
|  | case MVE_VMOVLs16th: | 
|  | case MVE_VMOVLs8bh: | 
|  | case MVE_VMOVLs8th: | 
|  | case MVE_VMOVLu16bh: | 
|  | case MVE_VMOVLu16th: | 
|  | case MVE_VMOVLu8bh: | 
|  | case MVE_VMOVLu8th: | 
|  | case MVE_VSHLL_imms16bh: | 
|  | case MVE_VSHLL_imms16th: | 
|  | case MVE_VSHLL_imms8bh: | 
|  | case MVE_VSHLL_imms8th: | 
|  | case MVE_VSHLL_immu16bh: | 
|  | case MVE_VSHLL_immu16th: | 
|  | case MVE_VSHLL_immu8bh: | 
|  | case MVE_VSHLL_immu8th: | 
|  | case MVE_VSHLL_lws16bh: | 
|  | case MVE_VSHLL_lws16th: | 
|  | case MVE_VSHLL_lws8bh: | 
|  | case MVE_VSHLL_lws8th: | 
|  | case MVE_VSHLL_lwu16bh: | 
|  | case MVE_VSHLL_lwu16th: | 
|  | case MVE_VSHLL_lwu8bh: | 
|  | case MVE_VSHLL_lwu8th: | 
|  | return true; | 
|  | } | 
|  | return false; | 
|  | }; | 
|  |  | 
|  | LLVMInitializeARMTargetInfo(); | 
|  | LLVMInitializeARMTarget(); | 
|  | LLVMInitializeARMTargetMC(); | 
|  |  | 
|  | auto TT(Triple::normalize("thumbv8.1m.main-none-none-eabi")); | 
|  | std::string Error; | 
|  | const Target *T = TargetRegistry::lookupTarget(TT, Error); | 
|  | if (!T) { | 
|  | dbgs() << Error; | 
|  | GTEST_SKIP(); | 
|  | } | 
|  |  | 
|  | TargetOptions Options; | 
|  | auto TM = std::unique_ptr<LLVMTargetMachine>(static_cast<LLVMTargetMachine *>( | 
|  | T->createTargetMachine(TT, "generic", "", Options, std::nullopt, | 
|  | std::nullopt, CodeGenOptLevel::Default))); | 
|  | ARMSubtarget ST(TM->getTargetTriple(), std::string(TM->getTargetCPU()), | 
|  | std::string(TM->getTargetFeatureString()), | 
|  | *static_cast<const ARMBaseTargetMachine *>(TM.get()), false); | 
|  | const ARMBaseInstrInfo *TII = ST.getInstrInfo(); | 
|  | auto MII = TM->getMCInstrInfo(); | 
|  |  | 
|  | for (unsigned i = 0; i < ARM::INSTRUCTION_LIST_END; ++i) { | 
|  | const MCInstrDesc &Desc = TII->get(i); | 
|  |  | 
|  | uint64_t Flags = Desc.TSFlags; | 
|  | if ((Flags & ARMII::DomainMask) != ARMII::DomainMVE) | 
|  | continue; | 
|  |  | 
|  | bool Valid = (Flags & ARMII::DoubleWidthResult) != 0; | 
|  | ASSERT_EQ(DoubleWidthResult(i), Valid) | 
|  | << MII->getName(i) | 
|  | << ": mismatched expectation for tail-predicated safety\n"; | 
|  | } | 
|  | } | 
|  |  | 
|  | TEST(MachineInstructionHorizontalReduction, IsCorrect) { | 
|  | using namespace ARM; | 
|  |  | 
|  | auto HorizontalReduction = [](unsigned Opcode) { | 
|  | switch (Opcode) { | 
|  | default: | 
|  | break; | 
|  | case MVE_VABAVs16: | 
|  | case MVE_VABAVs32: | 
|  | case MVE_VABAVs8: | 
|  | case MVE_VABAVu16: | 
|  | case MVE_VABAVu32: | 
|  | case MVE_VABAVu8: | 
|  | case MVE_VADDLVs32acc: | 
|  | case MVE_VADDLVs32no_acc: | 
|  | case MVE_VADDLVu32acc: | 
|  | case MVE_VADDLVu32no_acc: | 
|  | case MVE_VADDVs16acc: | 
|  | case MVE_VADDVs16no_acc: | 
|  | case MVE_VADDVs32acc: | 
|  | case MVE_VADDVs32no_acc: | 
|  | case MVE_VADDVs8acc: | 
|  | case MVE_VADDVs8no_acc: | 
|  | case MVE_VADDVu16acc: | 
|  | case MVE_VADDVu16no_acc: | 
|  | case MVE_VADDVu32acc: | 
|  | case MVE_VADDVu32no_acc: | 
|  | case MVE_VADDVu8acc: | 
|  | case MVE_VADDVu8no_acc: | 
|  | case MVE_VMAXAVs16: | 
|  | case MVE_VMAXAVs32: | 
|  | case MVE_VMAXAVs8: | 
|  | case MVE_VMAXNMAVf16: | 
|  | case MVE_VMAXNMAVf32: | 
|  | case MVE_VMAXNMVf16: | 
|  | case MVE_VMAXNMVf32: | 
|  | case MVE_VMAXVs16: | 
|  | case MVE_VMAXVs32: | 
|  | case MVE_VMAXVs8: | 
|  | case MVE_VMAXVu16: | 
|  | case MVE_VMAXVu32: | 
|  | case MVE_VMAXVu8: | 
|  | case MVE_VMINAVs16: | 
|  | case MVE_VMINAVs32: | 
|  | case MVE_VMINAVs8: | 
|  | case MVE_VMINNMAVf16: | 
|  | case MVE_VMINNMAVf32: | 
|  | case MVE_VMINNMVf16: | 
|  | case MVE_VMINNMVf32: | 
|  | case MVE_VMINVs16: | 
|  | case MVE_VMINVs32: | 
|  | case MVE_VMINVs8: | 
|  | case MVE_VMINVu16: | 
|  | case MVE_VMINVu32: | 
|  | case MVE_VMINVu8: | 
|  | case MVE_VMLADAVas16: | 
|  | case MVE_VMLADAVas32: | 
|  | case MVE_VMLADAVas8: | 
|  | case MVE_VMLADAVau16: | 
|  | case MVE_VMLADAVau32: | 
|  | case MVE_VMLADAVau8: | 
|  | case MVE_VMLADAVaxs16: | 
|  | case MVE_VMLADAVaxs32: | 
|  | case MVE_VMLADAVaxs8: | 
|  | case MVE_VMLADAVs16: | 
|  | case MVE_VMLADAVs32: | 
|  | case MVE_VMLADAVs8: | 
|  | case MVE_VMLADAVu16: | 
|  | case MVE_VMLADAVu32: | 
|  | case MVE_VMLADAVu8: | 
|  | case MVE_VMLADAVxs16: | 
|  | case MVE_VMLADAVxs32: | 
|  | case MVE_VMLADAVxs8: | 
|  | case MVE_VMLALDAVas16: | 
|  | case MVE_VMLALDAVas32: | 
|  | case MVE_VMLALDAVau16: | 
|  | case MVE_VMLALDAVau32: | 
|  | case MVE_VMLALDAVaxs16: | 
|  | case MVE_VMLALDAVaxs32: | 
|  | case MVE_VMLALDAVs16: | 
|  | case MVE_VMLALDAVs32: | 
|  | case MVE_VMLALDAVu16: | 
|  | case MVE_VMLALDAVu32: | 
|  | case MVE_VMLALDAVxs16: | 
|  | case MVE_VMLALDAVxs32: | 
|  | case MVE_VMLSDAVas16: | 
|  | case MVE_VMLSDAVas32: | 
|  | case MVE_VMLSDAVas8: | 
|  | case MVE_VMLSDAVaxs16: | 
|  | case MVE_VMLSDAVaxs32: | 
|  | case MVE_VMLSDAVaxs8: | 
|  | case MVE_VMLSDAVs16: | 
|  | case MVE_VMLSDAVs32: | 
|  | case MVE_VMLSDAVs8: | 
|  | case MVE_VMLSDAVxs16: | 
|  | case MVE_VMLSDAVxs32: | 
|  | case MVE_VMLSDAVxs8: | 
|  | case MVE_VMLSLDAVas16: | 
|  | case MVE_VMLSLDAVas32: | 
|  | case MVE_VMLSLDAVaxs16: | 
|  | case MVE_VMLSLDAVaxs32: | 
|  | case MVE_VMLSLDAVs16: | 
|  | case MVE_VMLSLDAVs32: | 
|  | case MVE_VMLSLDAVxs16: | 
|  | case MVE_VMLSLDAVxs32: | 
|  | case MVE_VRMLALDAVHas32: | 
|  | case MVE_VRMLALDAVHau32: | 
|  | case MVE_VRMLALDAVHaxs32: | 
|  | case MVE_VRMLALDAVHs32: | 
|  | case MVE_VRMLALDAVHu32: | 
|  | case MVE_VRMLALDAVHxs32: | 
|  | case MVE_VRMLSLDAVHas32: | 
|  | case MVE_VRMLSLDAVHaxs32: | 
|  | case MVE_VRMLSLDAVHs32: | 
|  | case MVE_VRMLSLDAVHxs32: | 
|  | return true; | 
|  | } | 
|  | return false; | 
|  | }; | 
|  |  | 
|  | LLVMInitializeARMTargetInfo(); | 
|  | LLVMInitializeARMTarget(); | 
|  | LLVMInitializeARMTargetMC(); | 
|  |  | 
|  | auto TT(Triple::normalize("thumbv8.1m.main-none-none-eabi")); | 
|  | std::string Error; | 
|  | const Target *T = TargetRegistry::lookupTarget(TT, Error); | 
|  | if (!T) { | 
|  | dbgs() << Error; | 
|  | GTEST_SKIP(); | 
|  | } | 
|  |  | 
|  | TargetOptions Options; | 
|  | auto TM = std::unique_ptr<LLVMTargetMachine>(static_cast<LLVMTargetMachine *>( | 
|  | T->createTargetMachine(TT, "generic", "", Options, std::nullopt, | 
|  | std::nullopt, CodeGenOptLevel::Default))); | 
|  | ARMSubtarget ST(TM->getTargetTriple(), std::string(TM->getTargetCPU()), | 
|  | std::string(TM->getTargetFeatureString()), | 
|  | *static_cast<const ARMBaseTargetMachine *>(TM.get()), false); | 
|  | const ARMBaseInstrInfo *TII = ST.getInstrInfo(); | 
|  | auto MII = TM->getMCInstrInfo(); | 
|  |  | 
|  | for (unsigned i = 0; i < ARM::INSTRUCTION_LIST_END; ++i) { | 
|  | const MCInstrDesc &Desc = TII->get(i); | 
|  |  | 
|  | uint64_t Flags = Desc.TSFlags; | 
|  | if ((Flags & ARMII::DomainMask) != ARMII::DomainMVE) | 
|  | continue; | 
|  | bool Valid = (Flags & ARMII::HorizontalReduction) != 0; | 
|  | ASSERT_EQ(HorizontalReduction(i), Valid) | 
|  | << MII->getName(i) | 
|  | << ": mismatched expectation for tail-predicated safety\n"; | 
|  | } | 
|  | } | 
|  |  | 
|  | TEST(MachineInstructionRetainsPreviousHalfElement, IsCorrect) { | 
|  | using namespace ARM; | 
|  |  | 
|  | auto RetainsPreviousHalfElement = [](unsigned Opcode) { | 
|  | switch (Opcode) { | 
|  | default: | 
|  | break; | 
|  | case MVE_VMOVNi16bh: | 
|  | case MVE_VMOVNi16th: | 
|  | case MVE_VMOVNi32bh: | 
|  | case MVE_VMOVNi32th: | 
|  | case MVE_VQMOVNs16bh: | 
|  | case MVE_VQMOVNs16th: | 
|  | case MVE_VQMOVNs32bh: | 
|  | case MVE_VQMOVNs32th: | 
|  | case MVE_VQMOVNu16bh: | 
|  | case MVE_VQMOVNu16th: | 
|  | case MVE_VQMOVNu32bh: | 
|  | case MVE_VQMOVNu32th: | 
|  | case MVE_VQMOVUNs16bh: | 
|  | case MVE_VQMOVUNs16th: | 
|  | case MVE_VQMOVUNs32bh: | 
|  | case MVE_VQMOVUNs32th: | 
|  | case MVE_VQRSHRNbhs16: | 
|  | case MVE_VQRSHRNbhs32: | 
|  | case MVE_VQRSHRNbhu16: | 
|  | case MVE_VQRSHRNbhu32: | 
|  | case MVE_VQRSHRNths16: | 
|  | case MVE_VQRSHRNths32: | 
|  | case MVE_VQRSHRNthu16: | 
|  | case MVE_VQRSHRNthu32: | 
|  | case MVE_VQRSHRUNs16bh: | 
|  | case MVE_VQRSHRUNs16th: | 
|  | case MVE_VQRSHRUNs32bh: | 
|  | case MVE_VQRSHRUNs32th: | 
|  | case MVE_VQSHRNbhs16: | 
|  | case MVE_VQSHRNbhs32: | 
|  | case MVE_VQSHRNbhu16: | 
|  | case MVE_VQSHRNbhu32: | 
|  | case MVE_VQSHRNths16: | 
|  | case MVE_VQSHRNths32: | 
|  | case MVE_VQSHRNthu16: | 
|  | case MVE_VQSHRNthu32: | 
|  | case MVE_VQSHRUNs16bh: | 
|  | case MVE_VQSHRUNs16th: | 
|  | case MVE_VQSHRUNs32bh: | 
|  | case MVE_VQSHRUNs32th: | 
|  | case MVE_VRSHRNi16bh: | 
|  | case MVE_VRSHRNi16th: | 
|  | case MVE_VRSHRNi32bh: | 
|  | case MVE_VRSHRNi32th: | 
|  | case MVE_VSHRNi16bh: | 
|  | case MVE_VSHRNi16th: | 
|  | case MVE_VSHRNi32bh: | 
|  | case MVE_VSHRNi32th: | 
|  | case MVE_VCVTf16f32bh: | 
|  | case MVE_VCVTf16f32th: | 
|  | case MVE_VCVTf32f16bh: | 
|  | case MVE_VCVTf32f16th: | 
|  | return true; | 
|  | } | 
|  | return false; | 
|  | }; | 
|  |  | 
|  | LLVMInitializeARMTargetInfo(); | 
|  | LLVMInitializeARMTarget(); | 
|  | LLVMInitializeARMTargetMC(); | 
|  |  | 
|  | auto TT(Triple::normalize("thumbv8.1m.main-none-none-eabi")); | 
|  | std::string Error; | 
|  | const Target *T = TargetRegistry::lookupTarget(TT, Error); | 
|  | if (!T) { | 
|  | dbgs() << Error; | 
|  | GTEST_SKIP(); | 
|  | } | 
|  |  | 
|  | TargetOptions Options; | 
|  | auto TM = std::unique_ptr<LLVMTargetMachine>(static_cast<LLVMTargetMachine *>( | 
|  | T->createTargetMachine(TT, "generic", "", Options, std::nullopt, | 
|  | std::nullopt, CodeGenOptLevel::Default))); | 
|  | ARMSubtarget ST(TM->getTargetTriple(), std::string(TM->getTargetCPU()), | 
|  | std::string(TM->getTargetFeatureString()), | 
|  | *static_cast<const ARMBaseTargetMachine *>(TM.get()), false); | 
|  | const ARMBaseInstrInfo *TII = ST.getInstrInfo(); | 
|  | auto MII = TM->getMCInstrInfo(); | 
|  |  | 
|  | for (unsigned i = 0; i < ARM::INSTRUCTION_LIST_END; ++i) { | 
|  | const MCInstrDesc &Desc = TII->get(i); | 
|  |  | 
|  | uint64_t Flags = Desc.TSFlags; | 
|  | if ((Flags & ARMII::DomainMask) != ARMII::DomainMVE) | 
|  | continue; | 
|  |  | 
|  | bool Valid = (Flags & ARMII::RetainsPreviousHalfElement) != 0; | 
|  | ASSERT_EQ(RetainsPreviousHalfElement(i), Valid) | 
|  | << MII->getName(i) | 
|  | << ": mismatched expectation for tail-predicated safety\n"; | 
|  | } | 
|  | } | 
|  | // Test for instructions that aren't immediately obviously valid within a | 
|  | // tail-predicated loop. This should be marked up in their tablegen | 
|  | // descriptions. Currently we, conservatively, disallow: | 
|  | // - cross beat carries. | 
|  | // - complex operations. | 
|  | // - horizontal operations with exchange. | 
|  | // - byte swapping. | 
|  | // - interleaved memory instructions. | 
|  | // TODO: Add to this list once we can handle them safely. | 
|  | TEST(MachineInstrValidTailPredication, IsCorrect) { | 
|  |  | 
|  | using namespace ARM; | 
|  |  | 
|  | auto IsValidTPOpcode = [](unsigned Opcode) { | 
|  | switch (Opcode) { | 
|  | default: | 
|  | return false; | 
|  | case MVE_ASRLi: | 
|  | case MVE_ASRLr: | 
|  | case MVE_LSRL: | 
|  | case MVE_LSLLi: | 
|  | case MVE_LSLLr: | 
|  | case MVE_SQRSHR: | 
|  | case MVE_SQRSHRL: | 
|  | case MVE_SQSHL: | 
|  | case MVE_SQSHLL: | 
|  | case MVE_SRSHR: | 
|  | case MVE_SRSHRL: | 
|  | case MVE_UQRSHL: | 
|  | case MVE_UQRSHLL: | 
|  | case MVE_UQSHL: | 
|  | case MVE_UQSHLL: | 
|  | case MVE_URSHR: | 
|  | case MVE_URSHRL: | 
|  | case MVE_VABDf16: | 
|  | case MVE_VABDf32: | 
|  | case MVE_VABDs16: | 
|  | case MVE_VABDs32: | 
|  | case MVE_VABDs8: | 
|  | case MVE_VABDu16: | 
|  | case MVE_VABDu32: | 
|  | case MVE_VABDu8: | 
|  | case MVE_VABSf16: | 
|  | case MVE_VABSf32: | 
|  | case MVE_VABSs16: | 
|  | case MVE_VABSs32: | 
|  | case MVE_VABSs8: | 
|  | case MVE_VADD_qr_f16: | 
|  | case MVE_VADD_qr_f32: | 
|  | case MVE_VADD_qr_i16: | 
|  | case MVE_VADD_qr_i32: | 
|  | case MVE_VADD_qr_i8: | 
|  | case MVE_VADDVs16acc: | 
|  | case MVE_VADDVs16no_acc: | 
|  | case MVE_VADDVs32acc: | 
|  | case MVE_VADDVs32no_acc: | 
|  | case MVE_VADDVs8acc: | 
|  | case MVE_VADDVs8no_acc: | 
|  | case MVE_VADDVu16acc: | 
|  | case MVE_VADDVu16no_acc: | 
|  | case MVE_VADDVu32acc: | 
|  | case MVE_VADDVu32no_acc: | 
|  | case MVE_VADDVu8acc: | 
|  | case MVE_VADDVu8no_acc: | 
|  | case MVE_VADDf16: | 
|  | case MVE_VADDf32: | 
|  | case MVE_VADDi16: | 
|  | case MVE_VADDi32: | 
|  | case MVE_VADDi8: | 
|  | case MVE_VAND: | 
|  | case MVE_VBIC: | 
|  | case MVE_VBICimmi16: | 
|  | case MVE_VBICimmi32: | 
|  | case MVE_VBRSR16: | 
|  | case MVE_VBRSR32: | 
|  | case MVE_VBRSR8: | 
|  | case MVE_VCLSs16: | 
|  | case MVE_VCLSs32: | 
|  | case MVE_VCLSs8: | 
|  | case MVE_VCLZs16: | 
|  | case MVE_VCLZs32: | 
|  | case MVE_VCLZs8: | 
|  | case MVE_VCMPf16: | 
|  | case MVE_VCMPf16r: | 
|  | case MVE_VCMPf32: | 
|  | case MVE_VCMPf32r: | 
|  | case MVE_VCMPi16: | 
|  | case MVE_VCMPi16r: | 
|  | case MVE_VCMPi32: | 
|  | case MVE_VCMPi32r: | 
|  | case MVE_VCMPi8: | 
|  | case MVE_VCMPi8r: | 
|  | case MVE_VCMPs16: | 
|  | case MVE_VCMPs16r: | 
|  | case MVE_VCMPs32: | 
|  | case MVE_VCMPs32r: | 
|  | case MVE_VCMPs8: | 
|  | case MVE_VCMPs8r: | 
|  | case MVE_VCMPu16: | 
|  | case MVE_VCMPu16r: | 
|  | case MVE_VCMPu32: | 
|  | case MVE_VCMPu32r: | 
|  | case MVE_VCMPu8: | 
|  | case MVE_VCMPu8r: | 
|  | case MVE_VCTP16: | 
|  | case MVE_VCTP32: | 
|  | case MVE_VCTP64: | 
|  | case MVE_VCTP8: | 
|  | case MVE_VCVTf16s16_fix: | 
|  | case MVE_VCVTf16s16n: | 
|  | case MVE_VCVTf16u16_fix: | 
|  | case MVE_VCVTf16u16n: | 
|  | case MVE_VCVTf32s32_fix: | 
|  | case MVE_VCVTf32s32n: | 
|  | case MVE_VCVTf32u32_fix: | 
|  | case MVE_VCVTf32u32n: | 
|  | case MVE_VCVTs16f16_fix: | 
|  | case MVE_VCVTs16f16a: | 
|  | case MVE_VCVTs16f16m: | 
|  | case MVE_VCVTs16f16n: | 
|  | case MVE_VCVTs16f16p: | 
|  | case MVE_VCVTs16f16z: | 
|  | case MVE_VCVTs32f32_fix: | 
|  | case MVE_VCVTs32f32a: | 
|  | case MVE_VCVTs32f32m: | 
|  | case MVE_VCVTs32f32n: | 
|  | case MVE_VCVTs32f32p: | 
|  | case MVE_VCVTs32f32z: | 
|  | case MVE_VCVTu16f16_fix: | 
|  | case MVE_VCVTu16f16a: | 
|  | case MVE_VCVTu16f16m: | 
|  | case MVE_VCVTu16f16n: | 
|  | case MVE_VCVTu16f16p: | 
|  | case MVE_VCVTu16f16z: | 
|  | case MVE_VCVTu32f32_fix: | 
|  | case MVE_VCVTu32f32a: | 
|  | case MVE_VCVTu32f32m: | 
|  | case MVE_VCVTu32f32n: | 
|  | case MVE_VCVTu32f32p: | 
|  | case MVE_VCVTu32f32z: | 
|  | case MVE_VDDUPu16: | 
|  | case MVE_VDDUPu32: | 
|  | case MVE_VDDUPu8: | 
|  | case MVE_VDUP16: | 
|  | case MVE_VDUP32: | 
|  | case MVE_VDUP8: | 
|  | case MVE_VDWDUPu16: | 
|  | case MVE_VDWDUPu32: | 
|  | case MVE_VDWDUPu8: | 
|  | case MVE_VEOR: | 
|  | case MVE_VFMA_qr_Sf16: | 
|  | case MVE_VFMA_qr_Sf32: | 
|  | case MVE_VFMA_qr_f16: | 
|  | case MVE_VFMA_qr_f32: | 
|  | case MVE_VFMAf16: | 
|  | case MVE_VFMAf32: | 
|  | case MVE_VFMSf16: | 
|  | case MVE_VFMSf32: | 
|  | case MVE_VMAXAs16: | 
|  | case MVE_VMAXAs32: | 
|  | case MVE_VMAXAs8: | 
|  | case MVE_VMAXs16: | 
|  | case MVE_VMAXs32: | 
|  | case MVE_VMAXs8: | 
|  | case MVE_VMAXu16: | 
|  | case MVE_VMAXu32: | 
|  | case MVE_VMAXu8: | 
|  | case MVE_VMAXNMf16: | 
|  | case MVE_VMAXNMf32: | 
|  | case MVE_VMAXNMAf16: | 
|  | case MVE_VMAXNMAf32: | 
|  | case MVE_VMINAs16: | 
|  | case MVE_VMINAs32: | 
|  | case MVE_VMINAs8: | 
|  | case MVE_VMINs16: | 
|  | case MVE_VMINs32: | 
|  | case MVE_VMINs8: | 
|  | case MVE_VMINu16: | 
|  | case MVE_VMINu32: | 
|  | case MVE_VMINu8: | 
|  | case MVE_VMINNMf16: | 
|  | case MVE_VMINNMf32: | 
|  | case MVE_VMINNMAf16: | 
|  | case MVE_VMINNMAf32: | 
|  | case MVE_VMLADAVas16: | 
|  | case MVE_VMLADAVas32: | 
|  | case MVE_VMLADAVas8: | 
|  | case MVE_VMLADAVau16: | 
|  | case MVE_VMLADAVau32: | 
|  | case MVE_VMLADAVau8: | 
|  | case MVE_VMLADAVs16: | 
|  | case MVE_VMLADAVs32: | 
|  | case MVE_VMLADAVs8: | 
|  | case MVE_VMLADAVu16: | 
|  | case MVE_VMLADAVu32: | 
|  | case MVE_VMLADAVu8: | 
|  | case MVE_VMLALDAVs16: | 
|  | case MVE_VMLALDAVs32: | 
|  | case MVE_VMLALDAVu16: | 
|  | case MVE_VMLALDAVu32: | 
|  | case MVE_VMLALDAVas16: | 
|  | case MVE_VMLALDAVas32: | 
|  | case MVE_VMLALDAVau16: | 
|  | case MVE_VMLALDAVau32: | 
|  | case MVE_VMLSDAVas16: | 
|  | case MVE_VMLSDAVas32: | 
|  | case MVE_VMLSDAVas8: | 
|  | case MVE_VMLSDAVs16: | 
|  | case MVE_VMLSDAVs32: | 
|  | case MVE_VMLSDAVs8: | 
|  | case MVE_VMLSLDAVas16: | 
|  | case MVE_VMLSLDAVas32: | 
|  | case MVE_VMLSLDAVs16: | 
|  | case MVE_VMLSLDAVs32: | 
|  | case MVE_VRMLALDAVHas32: | 
|  | case MVE_VRMLALDAVHau32: | 
|  | case MVE_VRMLALDAVHs32: | 
|  | case MVE_VRMLALDAVHu32: | 
|  | case MVE_VRMLSLDAVHas32: | 
|  | case MVE_VRMLSLDAVHs32: | 
|  | case MVE_VMLAS_qr_i16: | 
|  | case MVE_VMLAS_qr_i32: | 
|  | case MVE_VMLAS_qr_i8: | 
|  | case MVE_VMLA_qr_i16: | 
|  | case MVE_VMLA_qr_i32: | 
|  | case MVE_VMLA_qr_i8: | 
|  | case MVE_VHADD_qr_s16: | 
|  | case MVE_VHADD_qr_s32: | 
|  | case MVE_VHADD_qr_s8: | 
|  | case MVE_VHADD_qr_u16: | 
|  | case MVE_VHADD_qr_u32: | 
|  | case MVE_VHADD_qr_u8: | 
|  | case MVE_VHADDs16: | 
|  | case MVE_VHADDs32: | 
|  | case MVE_VHADDs8: | 
|  | case MVE_VHADDu16: | 
|  | case MVE_VHADDu32: | 
|  | case MVE_VHADDu8: | 
|  | case MVE_VHSUB_qr_s16: | 
|  | case MVE_VHSUB_qr_s32: | 
|  | case MVE_VHSUB_qr_s8: | 
|  | case MVE_VHSUB_qr_u16: | 
|  | case MVE_VHSUB_qr_u32: | 
|  | case MVE_VHSUB_qr_u8: | 
|  | case MVE_VHSUBs16: | 
|  | case MVE_VHSUBs32: | 
|  | case MVE_VHSUBs8: | 
|  | case MVE_VHSUBu16: | 
|  | case MVE_VHSUBu32: | 
|  | case MVE_VHSUBu8: | 
|  | case MVE_VIDUPu16: | 
|  | case MVE_VIDUPu32: | 
|  | case MVE_VIDUPu8: | 
|  | case MVE_VIWDUPu16: | 
|  | case MVE_VIWDUPu32: | 
|  | case MVE_VIWDUPu8: | 
|  | case MVE_VLD20_8: | 
|  | case MVE_VLD21_8: | 
|  | case MVE_VLD20_16: | 
|  | case MVE_VLD21_16: | 
|  | case MVE_VLD20_32: | 
|  | case MVE_VLD21_32: | 
|  | case MVE_VLD20_8_wb: | 
|  | case MVE_VLD21_8_wb: | 
|  | case MVE_VLD20_16_wb: | 
|  | case MVE_VLD21_16_wb: | 
|  | case MVE_VLD20_32_wb: | 
|  | case MVE_VLD21_32_wb: | 
|  | case MVE_VLD40_8: | 
|  | case MVE_VLD41_8: | 
|  | case MVE_VLD42_8: | 
|  | case MVE_VLD43_8: | 
|  | case MVE_VLD40_16: | 
|  | case MVE_VLD41_16: | 
|  | case MVE_VLD42_16: | 
|  | case MVE_VLD43_16: | 
|  | case MVE_VLD40_32: | 
|  | case MVE_VLD41_32: | 
|  | case MVE_VLD42_32: | 
|  | case MVE_VLD43_32: | 
|  | case MVE_VLD40_8_wb: | 
|  | case MVE_VLD41_8_wb: | 
|  | case MVE_VLD42_8_wb: | 
|  | case MVE_VLD43_8_wb: | 
|  | case MVE_VLD40_16_wb: | 
|  | case MVE_VLD41_16_wb: | 
|  | case MVE_VLD42_16_wb: | 
|  | case MVE_VLD43_16_wb: | 
|  | case MVE_VLD40_32_wb: | 
|  | case MVE_VLD41_32_wb: | 
|  | case MVE_VLD42_32_wb: | 
|  | case MVE_VLD43_32_wb: | 
|  | case MVE_VLDRBS16: | 
|  | case MVE_VLDRBS16_post: | 
|  | case MVE_VLDRBS16_pre: | 
|  | case MVE_VLDRBS16_rq: | 
|  | case MVE_VLDRBS32: | 
|  | case MVE_VLDRBS32_post: | 
|  | case MVE_VLDRBS32_pre: | 
|  | case MVE_VLDRBS32_rq: | 
|  | case MVE_VLDRBU16: | 
|  | case MVE_VLDRBU16_post: | 
|  | case MVE_VLDRBU16_pre: | 
|  | case MVE_VLDRBU16_rq: | 
|  | case MVE_VLDRBU32: | 
|  | case MVE_VLDRBU32_post: | 
|  | case MVE_VLDRBU32_pre: | 
|  | case MVE_VLDRBU32_rq: | 
|  | case MVE_VLDRBU8: | 
|  | case MVE_VLDRBU8_post: | 
|  | case MVE_VLDRBU8_pre: | 
|  | case MVE_VLDRBU8_rq: | 
|  | case MVE_VLDRDU64_qi: | 
|  | case MVE_VLDRDU64_qi_pre: | 
|  | case MVE_VLDRDU64_rq: | 
|  | case MVE_VLDRDU64_rq_u: | 
|  | case MVE_VLDRHS32: | 
|  | case MVE_VLDRHS32_post: | 
|  | case MVE_VLDRHS32_pre: | 
|  | case MVE_VLDRHS32_rq: | 
|  | case MVE_VLDRHS32_rq_u: | 
|  | case MVE_VLDRHU16: | 
|  | case MVE_VLDRHU16_post: | 
|  | case MVE_VLDRHU16_pre: | 
|  | case MVE_VLDRHU16_rq: | 
|  | case MVE_VLDRHU16_rq_u: | 
|  | case MVE_VLDRHU32: | 
|  | case MVE_VLDRHU32_post: | 
|  | case MVE_VLDRHU32_pre: | 
|  | case MVE_VLDRHU32_rq: | 
|  | case MVE_VLDRHU32_rq_u: | 
|  | case MVE_VLDRWU32: | 
|  | case MVE_VLDRWU32_post: | 
|  | case MVE_VLDRWU32_pre: | 
|  | case MVE_VLDRWU32_qi: | 
|  | case MVE_VLDRWU32_qi_pre: | 
|  | case MVE_VLDRWU32_rq: | 
|  | case MVE_VLDRWU32_rq_u: | 
|  | case MVE_VMOVimmf32: | 
|  | case MVE_VMOVimmi16: | 
|  | case MVE_VMOVimmi32: | 
|  | case MVE_VMOVimmi64: | 
|  | case MVE_VMOVimmi8: | 
|  | case MVE_VMOVNi16bh: | 
|  | case MVE_VMOVNi16th: | 
|  | case MVE_VMOVNi32bh: | 
|  | case MVE_VMOVNi32th: | 
|  | case MVE_VMULLBp16: | 
|  | case MVE_VMULLBp8: | 
|  | case MVE_VMULLBs16: | 
|  | case MVE_VMULLBs32: | 
|  | case MVE_VMULLBs8: | 
|  | case MVE_VMULLBu16: | 
|  | case MVE_VMULLBu32: | 
|  | case MVE_VMULLBu8: | 
|  | case MVE_VMULLTp16: | 
|  | case MVE_VMULLTp8: | 
|  | case MVE_VMULLTs16: | 
|  | case MVE_VMULLTs32: | 
|  | case MVE_VMULLTs8: | 
|  | case MVE_VMULLTu16: | 
|  | case MVE_VMULLTu32: | 
|  | case MVE_VMULLTu8: | 
|  | case MVE_VMUL_qr_f16: | 
|  | case MVE_VMUL_qr_f32: | 
|  | case MVE_VMUL_qr_i16: | 
|  | case MVE_VMUL_qr_i32: | 
|  | case MVE_VMUL_qr_i8: | 
|  | case MVE_VMULf16: | 
|  | case MVE_VMULf32: | 
|  | case MVE_VMULi16: | 
|  | case MVE_VMULi8: | 
|  | case MVE_VMULi32: | 
|  | case MVE_VMULHs32: | 
|  | case MVE_VMULHs16: | 
|  | case MVE_VMULHs8: | 
|  | case MVE_VMULHu32: | 
|  | case MVE_VMULHu16: | 
|  | case MVE_VMULHu8: | 
|  | case MVE_VMVN: | 
|  | case MVE_VMVNimmi16: | 
|  | case MVE_VMVNimmi32: | 
|  | case MVE_VNEGf16: | 
|  | case MVE_VNEGf32: | 
|  | case MVE_VNEGs16: | 
|  | case MVE_VNEGs32: | 
|  | case MVE_VNEGs8: | 
|  | case MVE_VORN: | 
|  | case MVE_VORR: | 
|  | case MVE_VORRimmi16: | 
|  | case MVE_VORRimmi32: | 
|  | case MVE_VPST: | 
|  | case MVE_VPTv16i8: | 
|  | case MVE_VPTv8i16: | 
|  | case MVE_VPTv4i32: | 
|  | case MVE_VPTv16i8r: | 
|  | case MVE_VPTv8i16r: | 
|  | case MVE_VPTv4i32r: | 
|  | case MVE_VPTv16s8: | 
|  | case MVE_VPTv8s16: | 
|  | case MVE_VPTv4s32: | 
|  | case MVE_VPTv16s8r: | 
|  | case MVE_VPTv8s16r: | 
|  | case MVE_VPTv4s32r: | 
|  | case MVE_VPTv16u8: | 
|  | case MVE_VPTv8u16: | 
|  | case MVE_VPTv4u32: | 
|  | case MVE_VPTv16u8r: | 
|  | case MVE_VPTv8u16r: | 
|  | case MVE_VPTv4u32r: | 
|  | case MVE_VPTv8f16: | 
|  | case MVE_VPTv4f32: | 
|  | case MVE_VPTv8f16r: | 
|  | case MVE_VPTv4f32r: | 
|  | case MVE_VQABSs16: | 
|  | case MVE_VQABSs32: | 
|  | case MVE_VQABSs8: | 
|  | case MVE_VQADD_qr_s16: | 
|  | case MVE_VQADD_qr_s32: | 
|  | case MVE_VQADD_qr_s8: | 
|  | case MVE_VQADD_qr_u16: | 
|  | case MVE_VQADD_qr_u32: | 
|  | case MVE_VQADD_qr_u8: | 
|  | case MVE_VQADDs16: | 
|  | case MVE_VQADDs32: | 
|  | case MVE_VQADDs8: | 
|  | case MVE_VQADDu16: | 
|  | case MVE_VQADDu32: | 
|  | case MVE_VQADDu8: | 
|  | case MVE_VQDMULH_qr_s16: | 
|  | case MVE_VQDMULH_qr_s32: | 
|  | case MVE_VQDMULH_qr_s8: | 
|  | case MVE_VQDMULHi16: | 
|  | case MVE_VQDMULHi32: | 
|  | case MVE_VQDMULHi8: | 
|  | case MVE_VQDMULL_qr_s16bh: | 
|  | case MVE_VQDMULL_qr_s16th: | 
|  | case MVE_VQDMULL_qr_s32bh: | 
|  | case MVE_VQDMULL_qr_s32th: | 
|  | case MVE_VQDMULLs16bh: | 
|  | case MVE_VQDMULLs16th: | 
|  | case MVE_VQDMULLs32bh: | 
|  | case MVE_VQDMULLs32th: | 
|  | case MVE_VQRDMULH_qr_s16: | 
|  | case MVE_VQRDMULH_qr_s32: | 
|  | case MVE_VQRDMULH_qr_s8: | 
|  | case MVE_VQRDMULHi16: | 
|  | case MVE_VQRDMULHi32: | 
|  | case MVE_VQRDMULHi8: | 
|  | case MVE_VQNEGs16: | 
|  | case MVE_VQNEGs32: | 
|  | case MVE_VQNEGs8: | 
|  | case MVE_VQMOVNs16bh: | 
|  | case MVE_VQMOVNs16th: | 
|  | case MVE_VQMOVNs32bh: | 
|  | case MVE_VQMOVNs32th: | 
|  | case MVE_VQMOVNu16bh: | 
|  | case MVE_VQMOVNu16th: | 
|  | case MVE_VQMOVNu32bh: | 
|  | case MVE_VQMOVNu32th: | 
|  | case MVE_VQMOVUNs16bh: | 
|  | case MVE_VQMOVUNs16th: | 
|  | case MVE_VQMOVUNs32bh: | 
|  | case MVE_VQMOVUNs32th: | 
|  | case MVE_VQRSHL_by_vecs16: | 
|  | case MVE_VQRSHL_by_vecs32: | 
|  | case MVE_VQRSHL_by_vecs8: | 
|  | case MVE_VQRSHL_by_vecu16: | 
|  | case MVE_VQRSHL_by_vecu32: | 
|  | case MVE_VQRSHL_by_vecu8: | 
|  | case MVE_VQRSHL_qrs16: | 
|  | case MVE_VQRSHL_qrs32: | 
|  | case MVE_VQRSHL_qrs8: | 
|  | case MVE_VQRSHL_qru16: | 
|  | case MVE_VQRSHL_qru8: | 
|  | case MVE_VQRSHL_qru32: | 
|  | case MVE_VQSHLU_imms16: | 
|  | case MVE_VQSHLU_imms32: | 
|  | case MVE_VQSHLU_imms8: | 
|  | case MVE_VQSHLimms16: | 
|  | case MVE_VQSHLimms32: | 
|  | case MVE_VQSHLimms8: | 
|  | case MVE_VQSHLimmu16: | 
|  | case MVE_VQSHLimmu32: | 
|  | case MVE_VQSHLimmu8: | 
|  | case MVE_VQSHL_by_vecs16: | 
|  | case MVE_VQSHL_by_vecs32: | 
|  | case MVE_VQSHL_by_vecs8: | 
|  | case MVE_VQSHL_by_vecu16: | 
|  | case MVE_VQSHL_by_vecu32: | 
|  | case MVE_VQSHL_by_vecu8: | 
|  | case MVE_VQSHL_qrs16: | 
|  | case MVE_VQSHL_qrs32: | 
|  | case MVE_VQSHL_qrs8: | 
|  | case MVE_VQSHL_qru16: | 
|  | case MVE_VQSHL_qru32: | 
|  | case MVE_VQSHL_qru8: | 
|  | case MVE_VQRSHRNbhs16: | 
|  | case MVE_VQRSHRNbhs32: | 
|  | case MVE_VQRSHRNbhu16: | 
|  | case MVE_VQRSHRNbhu32: | 
|  | case MVE_VQRSHRNths16: | 
|  | case MVE_VQRSHRNths32: | 
|  | case MVE_VQRSHRNthu16: | 
|  | case MVE_VQRSHRNthu32: | 
|  | case MVE_VQRSHRUNs16bh: | 
|  | case MVE_VQRSHRUNs16th: | 
|  | case MVE_VQRSHRUNs32bh: | 
|  | case MVE_VQRSHRUNs32th: | 
|  | case MVE_VQSHRNbhs16: | 
|  | case MVE_VQSHRNbhs32: | 
|  | case MVE_VQSHRNbhu16: | 
|  | case MVE_VQSHRNbhu32: | 
|  | case MVE_VQSHRNths16: | 
|  | case MVE_VQSHRNths32: | 
|  | case MVE_VQSHRNthu16: | 
|  | case MVE_VQSHRNthu32: | 
|  | case MVE_VQSHRUNs16bh: | 
|  | case MVE_VQSHRUNs16th: | 
|  | case MVE_VQSHRUNs32bh: | 
|  | case MVE_VQSHRUNs32th: | 
|  | case MVE_VQSUB_qr_s16: | 
|  | case MVE_VQSUB_qr_s32: | 
|  | case MVE_VQSUB_qr_s8: | 
|  | case MVE_VQSUB_qr_u16: | 
|  | case MVE_VQSUB_qr_u32: | 
|  | case MVE_VQSUB_qr_u8: | 
|  | case MVE_VQSUBs16: | 
|  | case MVE_VQSUBs32: | 
|  | case MVE_VQSUBs8: | 
|  | case MVE_VQSUBu16: | 
|  | case MVE_VQSUBu32: | 
|  | case MVE_VQSUBu8: | 
|  | case MVE_VRHADDs16: | 
|  | case MVE_VRHADDs32: | 
|  | case MVE_VRHADDs8: | 
|  | case MVE_VRHADDu16: | 
|  | case MVE_VRHADDu32: | 
|  | case MVE_VRHADDu8: | 
|  | case MVE_VRINTf16A: | 
|  | case MVE_VRINTf16M: | 
|  | case MVE_VRINTf16N: | 
|  | case MVE_VRINTf16P: | 
|  | case MVE_VRINTf16X: | 
|  | case MVE_VRINTf16Z: | 
|  | case MVE_VRINTf32A: | 
|  | case MVE_VRINTf32M: | 
|  | case MVE_VRINTf32N: | 
|  | case MVE_VRINTf32P: | 
|  | case MVE_VRINTf32X: | 
|  | case MVE_VRINTf32Z: | 
|  | case MVE_VRMULHs32: | 
|  | case MVE_VRMULHs16: | 
|  | case MVE_VRMULHs8: | 
|  | case MVE_VRMULHu32: | 
|  | case MVE_VRMULHu16: | 
|  | case MVE_VRMULHu8: | 
|  | case MVE_VRSHL_by_vecs16: | 
|  | case MVE_VRSHL_by_vecs32: | 
|  | case MVE_VRSHL_by_vecs8: | 
|  | case MVE_VRSHL_by_vecu16: | 
|  | case MVE_VRSHL_by_vecu32: | 
|  | case MVE_VRSHL_by_vecu8: | 
|  | case MVE_VRSHL_qrs16: | 
|  | case MVE_VRSHL_qrs32: | 
|  | case MVE_VRSHL_qrs8: | 
|  | case MVE_VRSHL_qru16: | 
|  | case MVE_VRSHL_qru32: | 
|  | case MVE_VRSHL_qru8: | 
|  | case MVE_VRSHR_imms16: | 
|  | case MVE_VRSHR_imms32: | 
|  | case MVE_VRSHR_imms8: | 
|  | case MVE_VRSHR_immu16: | 
|  | case MVE_VRSHR_immu32: | 
|  | case MVE_VRSHR_immu8: | 
|  | case MVE_VRSHRNi16bh: | 
|  | case MVE_VRSHRNi16th: | 
|  | case MVE_VRSHRNi32bh: | 
|  | case MVE_VRSHRNi32th: | 
|  | case MVE_VSHL_by_vecs16: | 
|  | case MVE_VSHL_by_vecs32: | 
|  | case MVE_VSHL_by_vecs8: | 
|  | case MVE_VSHL_by_vecu16: | 
|  | case MVE_VSHL_by_vecu32: | 
|  | case MVE_VSHL_by_vecu8: | 
|  | case MVE_VSHL_immi16: | 
|  | case MVE_VSHL_immi32: | 
|  | case MVE_VSHL_immi8: | 
|  | case MVE_VSHL_qrs16: | 
|  | case MVE_VSHL_qrs32: | 
|  | case MVE_VSHL_qrs8: | 
|  | case MVE_VSHL_qru16: | 
|  | case MVE_VSHL_qru32: | 
|  | case MVE_VSHL_qru8: | 
|  | case MVE_VSHR_imms16: | 
|  | case MVE_VSHR_imms32: | 
|  | case MVE_VSHR_imms8: | 
|  | case MVE_VSHR_immu16: | 
|  | case MVE_VSHR_immu32: | 
|  | case MVE_VSHR_immu8: | 
|  | case MVE_VSHRNi16bh: | 
|  | case MVE_VSHRNi16th: | 
|  | case MVE_VSHRNi32bh: | 
|  | case MVE_VSHRNi32th: | 
|  | case MVE_VSLIimm16: | 
|  | case MVE_VSLIimm32: | 
|  | case MVE_VSLIimm8: | 
|  | case MVE_VSRIimm16: | 
|  | case MVE_VSRIimm32: | 
|  | case MVE_VSRIimm8: | 
|  | case MVE_VSTRB16: | 
|  | case MVE_VSTRB16_post: | 
|  | case MVE_VSTRB16_pre: | 
|  | case MVE_VSTRB16_rq: | 
|  | case MVE_VSTRB32: | 
|  | case MVE_VSTRB32_post: | 
|  | case MVE_VSTRB32_pre: | 
|  | case MVE_VSTRB32_rq: | 
|  | case MVE_VSTRB8_rq: | 
|  | case MVE_VSTRBU8: | 
|  | case MVE_VSTRBU8_post: | 
|  | case MVE_VSTRBU8_pre: | 
|  | case MVE_VSTRD64_qi: | 
|  | case MVE_VSTRD64_qi_pre: | 
|  | case MVE_VSTRD64_rq: | 
|  | case MVE_VSTRD64_rq_u: | 
|  | case MVE_VSTRH16_rq: | 
|  | case MVE_VSTRH16_rq_u: | 
|  | case MVE_VSTRH32: | 
|  | case MVE_VSTRH32_post: | 
|  | case MVE_VSTRH32_pre: | 
|  | case MVE_VSTRH32_rq: | 
|  | case MVE_VSTRH32_rq_u: | 
|  | case MVE_VSTRHU16: | 
|  | case MVE_VSTRHU16_post: | 
|  | case MVE_VSTRHU16_pre: | 
|  | case MVE_VSTRW32_qi: | 
|  | case MVE_VSTRW32_qi_pre: | 
|  | case MVE_VSTRW32_rq: | 
|  | case MVE_VSTRW32_rq_u: | 
|  | case MVE_VSTRWU32: | 
|  | case MVE_VSTRWU32_post: | 
|  | case MVE_VSTRWU32_pre: | 
|  | case MVE_VSUB_qr_f16: | 
|  | case MVE_VSUB_qr_f32: | 
|  | case MVE_VSUB_qr_i16: | 
|  | case MVE_VSUB_qr_i32: | 
|  | case MVE_VSUB_qr_i8: | 
|  | case MVE_VSUBf16: | 
|  | case MVE_VSUBf32: | 
|  | case MVE_VSUBi16: | 
|  | case MVE_VSUBi32: | 
|  | case MVE_VSUBi8: | 
|  | case VLDR_P0_off: | 
|  | case VLDR_P0_post: | 
|  | case VLDR_P0_pre: | 
|  | case VLDR_VPR_off: | 
|  | case VLDR_VPR_post: | 
|  | case VLDR_VPR_pre: | 
|  | case VSTR_P0_off: | 
|  | case VSTR_P0_post: | 
|  | case VSTR_P0_pre: | 
|  | case VSTR_VPR_off: | 
|  | case VSTR_VPR_post: | 
|  | case VSTR_VPR_pre: | 
|  | case VMRS_P0: | 
|  | case VMRS_VPR: | 
|  | return true; | 
|  | } | 
|  | }; | 
|  |  | 
|  | LLVMInitializeARMTargetInfo(); | 
|  | LLVMInitializeARMTarget(); | 
|  | LLVMInitializeARMTargetMC(); | 
|  |  | 
|  | auto TT(Triple::normalize("thumbv8.1m.main-none-none-eabi")); | 
|  | std::string Error; | 
|  | const Target *T = TargetRegistry::lookupTarget(TT, Error); | 
|  | if (!T) { | 
|  | dbgs() << Error; | 
|  | GTEST_SKIP(); | 
|  | } | 
|  |  | 
|  | TargetOptions Options; | 
|  | auto TM = std::unique_ptr<LLVMTargetMachine>(static_cast<LLVMTargetMachine *>( | 
|  | T->createTargetMachine(TT, "generic", "", Options, std::nullopt, | 
|  | std::nullopt, CodeGenOptLevel::Default))); | 
|  | ARMSubtarget ST(TM->getTargetTriple(), std::string(TM->getTargetCPU()), | 
|  | std::string(TM->getTargetFeatureString()), | 
|  | *static_cast<const ARMBaseTargetMachine *>(TM.get()), false); | 
|  |  | 
|  | auto MII = TM->getMCInstrInfo(); | 
|  | for (unsigned i = 0; i < ARM::INSTRUCTION_LIST_END; ++i) { | 
|  | uint64_t Flags = MII->get(i).TSFlags; | 
|  | if ((Flags & ARMII::DomainMask) != ARMII::DomainMVE) | 
|  | continue; | 
|  | bool Valid = (Flags & ARMII::ValidForTailPredication) != 0; | 
|  | ASSERT_EQ(IsValidTPOpcode(i), Valid) | 
|  | << MII->getName(i) | 
|  | << ": mismatched expectation for tail-predicated safety\n"; | 
|  | } | 
|  | } | 
|  |  | 
|  | TEST(MachineInstr, HasSideEffects) { | 
|  | using namespace ARM; | 
|  | std::set<unsigned> UnpredictableOpcodes = { | 
|  | // MVE Instructions | 
|  | MVE_VCTP8, | 
|  | MVE_VCTP16, | 
|  | MVE_VCTP32, | 
|  | MVE_VCTP64, | 
|  | MVE_VPST, | 
|  | MVE_VPTv16i8, | 
|  | MVE_VPTv8i16, | 
|  | MVE_VPTv4i32, | 
|  | MVE_VPTv16i8r, | 
|  | MVE_VPTv8i16r, | 
|  | MVE_VPTv4i32r, | 
|  | MVE_VPTv16s8, | 
|  | MVE_VPTv8s16, | 
|  | MVE_VPTv4s32, | 
|  | MVE_VPTv16s8r, | 
|  | MVE_VPTv8s16r, | 
|  | MVE_VPTv4s32r, | 
|  | MVE_VPTv16u8, | 
|  | MVE_VPTv8u16, | 
|  | MVE_VPTv4u32, | 
|  | MVE_VPTv16u8r, | 
|  | MVE_VPTv8u16r, | 
|  | MVE_VPTv4u32r, | 
|  | MVE_VPTv8f16, | 
|  | MVE_VPTv4f32, | 
|  | MVE_VPTv8f16r, | 
|  | MVE_VPTv4f32r, | 
|  | MVE_VADC, | 
|  | MVE_VADCI, | 
|  | MVE_VSBC, | 
|  | MVE_VSBCI, | 
|  | MVE_VSHLC, | 
|  | // FP Instructions | 
|  | FLDMXIA, | 
|  | FLDMXDB_UPD, | 
|  | FLDMXIA_UPD, | 
|  | FSTMXDB_UPD, | 
|  | FSTMXIA, | 
|  | FSTMXIA_UPD, | 
|  | VLDR_FPCXTNS_off, | 
|  | VLDR_FPCXTNS_off, | 
|  | VLDR_FPCXTNS_post, | 
|  | VLDR_FPCXTNS_pre, | 
|  | VLDR_FPCXTS_off, | 
|  | VLDR_FPCXTS_post, | 
|  | VLDR_FPCXTS_pre, | 
|  | VLDR_FPSCR_NZCVQC_off, | 
|  | VLDR_FPSCR_NZCVQC_post, | 
|  | VLDR_FPSCR_NZCVQC_pre, | 
|  | VLDR_FPSCR_off, | 
|  | VLDR_FPSCR_post, | 
|  | VLDR_FPSCR_pre, | 
|  | VLDR_P0_off, | 
|  | VLDR_P0_post, | 
|  | VLDR_P0_pre, | 
|  | VLDR_VPR_off, | 
|  | VLDR_VPR_post, | 
|  | VLDR_VPR_pre, | 
|  | VLLDM, | 
|  | VLLDM_T2, | 
|  | VLSTM, | 
|  | VLSTM_T2, | 
|  | VMRS, | 
|  | VMRS_FPCXTNS, | 
|  | VMRS_FPCXTS, | 
|  | VMRS_FPEXC, | 
|  | VMRS_FPINST, | 
|  | VMRS_FPINST2, | 
|  | VMRS_FPSCR_NZCVQC, | 
|  | VMRS_FPSID, | 
|  | VMRS_MVFR0, | 
|  | VMRS_MVFR1, | 
|  | VMRS_MVFR2, | 
|  | VMRS_P0, | 
|  | VMRS_VPR, | 
|  | VMSR, | 
|  | VMSR_FPCXTNS, | 
|  | VMSR_FPCXTS, | 
|  | VMSR_FPEXC, | 
|  | VMSR_FPINST, | 
|  | VMSR_FPINST2, | 
|  | VMSR_FPSCR_NZCVQC, | 
|  | VMSR_FPSID, | 
|  | VMSR_P0, | 
|  | VMSR_VPR, | 
|  | VSCCLRMD, | 
|  | VSCCLRMS, | 
|  | VSTR_FPCXTNS_off, | 
|  | VSTR_FPCXTNS_post, | 
|  | VSTR_FPCXTNS_pre, | 
|  | VSTR_FPCXTS_off, | 
|  | VSTR_FPCXTS_post, | 
|  | VSTR_FPCXTS_pre, | 
|  | VSTR_FPSCR_NZCVQC_off, | 
|  | VSTR_FPSCR_NZCVQC_post, | 
|  | VSTR_FPSCR_NZCVQC_pre, | 
|  | VSTR_FPSCR_off, | 
|  | VSTR_FPSCR_post, | 
|  | VSTR_FPSCR_pre, | 
|  | VSTR_P0_off, | 
|  | VSTR_P0_post, | 
|  | VSTR_P0_pre, | 
|  | VSTR_VPR_off, | 
|  | VSTR_VPR_post, | 
|  | VSTR_VPR_pre, | 
|  | }; | 
|  |  | 
|  | LLVMInitializeARMTargetInfo(); | 
|  | LLVMInitializeARMTarget(); | 
|  | LLVMInitializeARMTargetMC(); | 
|  |  | 
|  | auto TT(Triple::normalize("thumbv8.1m.main-none-none-eabi")); | 
|  | std::string Error; | 
|  | const Target *T = TargetRegistry::lookupTarget(TT, Error); | 
|  | if (!T) { | 
|  | dbgs() << Error; | 
|  | GTEST_SKIP(); | 
|  | } | 
|  |  | 
|  | TargetOptions Options; | 
|  | auto TM = std::unique_ptr<LLVMTargetMachine>(static_cast<LLVMTargetMachine *>( | 
|  | T->createTargetMachine(TT, "generic", "", Options, std::nullopt, | 
|  | std::nullopt, CodeGenOptLevel::Default))); | 
|  | ARMSubtarget ST(TM->getTargetTriple(), std::string(TM->getTargetCPU()), | 
|  | std::string(TM->getTargetFeatureString()), | 
|  | *static_cast<const ARMBaseTargetMachine *>(TM.get()), false); | 
|  | const ARMBaseInstrInfo *TII = ST.getInstrInfo(); | 
|  | auto MII = TM->getMCInstrInfo(); | 
|  |  | 
|  | for (unsigned Op = 0; Op < ARM::INSTRUCTION_LIST_END; ++Op) { | 
|  | const MCInstrDesc &Desc = TII->get(Op); | 
|  | if ((Desc.TSFlags & | 
|  | (ARMII::DomainMVE | ARMII::DomainVFP | ARMII::DomainNEONA8)) == 0) | 
|  | continue; | 
|  | if (UnpredictableOpcodes.count(Op)) | 
|  | continue; | 
|  |  | 
|  | ASSERT_FALSE(Desc.hasUnmodeledSideEffects()) | 
|  | << MII->getName(Op) << " has unexpected side effects"; | 
|  | } | 
|  | } | 
|  |  | 
|  | TEST(MachineInstr, MVEVecSize) { | 
|  | using namespace ARM; | 
|  | auto MVEVecSize = [](unsigned Opcode) { | 
|  | switch (Opcode) { | 
|  | default: | 
|  | dbgs() << Opcode << "\n"; | 
|  | llvm_unreachable("Unexpected MVE instruction!"); | 
|  | case MVE_ASRLi: | 
|  | case MVE_ASRLr: | 
|  | case MVE_LSLLi: | 
|  | case MVE_LSLLr: | 
|  | case MVE_LSRL: | 
|  | case MVE_SQRSHR: | 
|  | case MVE_SQRSHRL: | 
|  | case MVE_SQSHL: | 
|  | case MVE_SQSHLL: | 
|  | case MVE_SRSHR: | 
|  | case MVE_SRSHRL: | 
|  | case MVE_UQRSHL: | 
|  | case MVE_UQRSHLL: | 
|  | case MVE_UQSHL: | 
|  | case MVE_UQSHLL: | 
|  | case MVE_URSHR: | 
|  | case MVE_URSHRL: | 
|  | case MVE_VABAVs8: | 
|  | case MVE_VABAVu8: | 
|  | case MVE_VABDs8: | 
|  | case MVE_VABDu8: | 
|  | case MVE_VABSs8: | 
|  | case MVE_VADDVs8acc: | 
|  | case MVE_VADDVs8no_acc: | 
|  | case MVE_VADDVu8acc: | 
|  | case MVE_VADDVu8no_acc: | 
|  | case MVE_VADD_qr_i8: | 
|  | case MVE_VADDi8: | 
|  | case MVE_VBRSR8: | 
|  | case MVE_VCADDi8: | 
|  | case MVE_VCLSs8: | 
|  | case MVE_VCLZs8: | 
|  | case MVE_VCMPi8: | 
|  | case MVE_VCMPi8r: | 
|  | case MVE_VCMPs8: | 
|  | case MVE_VCMPs8r: | 
|  | case MVE_VCMPu8: | 
|  | case MVE_VCMPu8r: | 
|  | case MVE_VCTP8: | 
|  | case MVE_VDDUPu8: | 
|  | case MVE_VDUP8: | 
|  | case MVE_VDWDUPu8: | 
|  | case MVE_VHADD_qr_s8: | 
|  | case MVE_VHADD_qr_u8: | 
|  | case MVE_VHADDs8: | 
|  | case MVE_VHADDu8: | 
|  | case MVE_VHCADDs8: | 
|  | case MVE_VHSUB_qr_s8: | 
|  | case MVE_VHSUB_qr_u8: | 
|  | case MVE_VHSUBs8: | 
|  | case MVE_VHSUBu8: | 
|  | case MVE_VIDUPu8: | 
|  | case MVE_VIWDUPu8: | 
|  | case MVE_VLD20_8: | 
|  | case MVE_VLD20_8_wb: | 
|  | case MVE_VLD21_8: | 
|  | case MVE_VLD21_8_wb: | 
|  | case MVE_VLD40_8: | 
|  | case MVE_VLD40_8_wb: | 
|  | case MVE_VLD41_8: | 
|  | case MVE_VLD41_8_wb: | 
|  | case MVE_VLD42_8: | 
|  | case MVE_VLD42_8_wb: | 
|  | case MVE_VLD43_8: | 
|  | case MVE_VLD43_8_wb: | 
|  | case MVE_VLDRBU8: | 
|  | case MVE_VLDRBU8_post: | 
|  | case MVE_VLDRBU8_pre: | 
|  | case MVE_VLDRBU8_rq: | 
|  | case MVE_VMAXAVs8: | 
|  | case MVE_VMAXAs8: | 
|  | case MVE_VMAXVs8: | 
|  | case MVE_VMAXVu8: | 
|  | case MVE_VMAXs8: | 
|  | case MVE_VMAXu8: | 
|  | case MVE_VMINAVs8: | 
|  | case MVE_VMINAs8: | 
|  | case MVE_VMINVs8: | 
|  | case MVE_VMINVu8: | 
|  | case MVE_VMINs8: | 
|  | case MVE_VMINu8: | 
|  | case MVE_VMLADAVas8: | 
|  | case MVE_VMLADAVau8: | 
|  | case MVE_VMLADAVaxs8: | 
|  | case MVE_VMLADAVs8: | 
|  | case MVE_VMLADAVu8: | 
|  | case MVE_VMLADAVxs8: | 
|  | case MVE_VMLAS_qr_i8: | 
|  | case MVE_VMLA_qr_i8: | 
|  | case MVE_VMLSDAVas8: | 
|  | case MVE_VMLSDAVaxs8: | 
|  | case MVE_VMLSDAVs8: | 
|  | case MVE_VMLSDAVxs8: | 
|  | case MVE_VMOV_from_lane_s8: | 
|  | case MVE_VMOV_from_lane_u8: | 
|  | case MVE_VMOV_to_lane_8: | 
|  | case MVE_VMOVimmi8: | 
|  | case MVE_VMULHs8: | 
|  | case MVE_VMULHu8: | 
|  | case MVE_VMUL_qr_i8: | 
|  | case MVE_VMULi8: | 
|  | case MVE_VNEGs8: | 
|  | case MVE_VPTv16i8: | 
|  | case MVE_VPTv16i8r: | 
|  | case MVE_VPTv16s8: | 
|  | case MVE_VPTv16s8r: | 
|  | case MVE_VPTv16u8: | 
|  | case MVE_VPTv16u8r: | 
|  | case MVE_VQABSs8: | 
|  | case MVE_VQADD_qr_s8: | 
|  | case MVE_VQADD_qr_u8: | 
|  | case MVE_VQADDs8: | 
|  | case MVE_VQADDu8: | 
|  | case MVE_VQDMLADHXs8: | 
|  | case MVE_VQDMLADHs8: | 
|  | case MVE_VQDMLAH_qrs8: | 
|  | case MVE_VQDMLASH_qrs8: | 
|  | case MVE_VQDMLSDHXs8: | 
|  | case MVE_VQDMLSDHs8: | 
|  | case MVE_VQDMULH_qr_s8: | 
|  | case MVE_VQDMULHi8: | 
|  | case MVE_VQNEGs8: | 
|  | case MVE_VQRDMLADHXs8: | 
|  | case MVE_VQRDMLADHs8: | 
|  | case MVE_VQRDMLAH_qrs8: | 
|  | case MVE_VQRDMLASH_qrs8: | 
|  | case MVE_VQRDMLSDHXs8: | 
|  | case MVE_VQRDMLSDHs8: | 
|  | case MVE_VQRDMULH_qr_s8: | 
|  | case MVE_VQRDMULHi8: | 
|  | case MVE_VQRSHL_by_vecs8: | 
|  | case MVE_VQRSHL_by_vecu8: | 
|  | case MVE_VQRSHL_qrs8: | 
|  | case MVE_VQRSHL_qru8: | 
|  | case MVE_VQSHLU_imms8: | 
|  | case MVE_VQSHL_by_vecs8: | 
|  | case MVE_VQSHL_by_vecu8: | 
|  | case MVE_VQSHL_qrs8: | 
|  | case MVE_VQSHL_qru8: | 
|  | case MVE_VQSHLimms8: | 
|  | case MVE_VQSHLimmu8: | 
|  | case MVE_VQSUB_qr_s8: | 
|  | case MVE_VQSUB_qr_u8: | 
|  | case MVE_VQSUBs8: | 
|  | case MVE_VQSUBu8: | 
|  | case MVE_VRHADDs8: | 
|  | case MVE_VRHADDu8: | 
|  | case MVE_VRMULHs8: | 
|  | case MVE_VRMULHu8: | 
|  | case MVE_VRSHL_by_vecs8: | 
|  | case MVE_VRSHL_by_vecu8: | 
|  | case MVE_VRSHL_qrs8: | 
|  | case MVE_VRSHL_qru8: | 
|  | case MVE_VRSHR_imms8: | 
|  | case MVE_VRSHR_immu8: | 
|  | case MVE_VSHL_by_vecs8: | 
|  | case MVE_VSHL_by_vecu8: | 
|  | case MVE_VSHL_immi8: | 
|  | case MVE_VSHL_qru8: | 
|  | case MVE_VSHL_qrs8: | 
|  | case MVE_VSHR_imms8: | 
|  | case MVE_VSHR_immu8: | 
|  | case MVE_VSLIimm8: | 
|  | case MVE_VSRIimm8: | 
|  | case MVE_VST20_8: | 
|  | case MVE_VST20_8_wb: | 
|  | case MVE_VST21_8: | 
|  | case MVE_VST21_8_wb: | 
|  | case MVE_VST40_8: | 
|  | case MVE_VST40_8_wb: | 
|  | case MVE_VST41_8: | 
|  | case MVE_VST41_8_wb: | 
|  | case MVE_VST42_8: | 
|  | case MVE_VST42_8_wb: | 
|  | case MVE_VST43_8: | 
|  | case MVE_VST43_8_wb: | 
|  | case MVE_VSTRB8_rq: | 
|  | case MVE_VSTRBU8: | 
|  | case MVE_VSTRBU8_post: | 
|  | case MVE_VSTRBU8_pre: | 
|  | case MVE_VSUB_qr_i8: | 
|  | case MVE_VSUBi8: | 
|  | case MVE_VAND: | 
|  | case MVE_VBIC: | 
|  | case MVE_VEOR: | 
|  | case MVE_VMVN: | 
|  | case MVE_VORN: | 
|  | case MVE_VORR: | 
|  | case MVE_VPNOT: | 
|  | case MVE_VPSEL: | 
|  | case MVE_VPST: | 
|  | case MQPRCopy: | 
|  | return 0; | 
|  | case MVE_VABAVs16: | 
|  | case MVE_VABAVu16: | 
|  | case MVE_VABDf16: | 
|  | case MVE_VABDs16: | 
|  | case MVE_VABDu16: | 
|  | case MVE_VABSf16: | 
|  | case MVE_VABSs16: | 
|  | case MVE_VADDVs16acc: | 
|  | case MVE_VADDVs16no_acc: | 
|  | case MVE_VADDVu16acc: | 
|  | case MVE_VADDVu16no_acc: | 
|  | case MVE_VADD_qr_f16: | 
|  | case MVE_VADD_qr_i16: | 
|  | case MVE_VADDf16: | 
|  | case MVE_VADDi16: | 
|  | case MVE_VBICimmi16: | 
|  | case MVE_VBRSR16: | 
|  | case MVE_VCADDf16: | 
|  | case MVE_VCADDi16: | 
|  | case MVE_VCLSs16: | 
|  | case MVE_VCLZs16: | 
|  | case MVE_VCMLAf16: | 
|  | case MVE_VCMPf16: | 
|  | case MVE_VCMPf16r: | 
|  | case MVE_VCMPi16: | 
|  | case MVE_VCMPi16r: | 
|  | case MVE_VCMPs16: | 
|  | case MVE_VCMPs16r: | 
|  | case MVE_VCMPu16: | 
|  | case MVE_VCMPu16r: | 
|  | case MVE_VCMULf16: | 
|  | case MVE_VCTP16: | 
|  | case MVE_VCVTf16s16_fix: | 
|  | case MVE_VCVTf16s16n: | 
|  | case MVE_VCVTf16u16_fix: | 
|  | case MVE_VCVTf16u16n: | 
|  | case MVE_VCVTs16f16_fix: | 
|  | case MVE_VCVTs16f16a: | 
|  | case MVE_VCVTs16f16m: | 
|  | case MVE_VCVTs16f16n: | 
|  | case MVE_VCVTs16f16p: | 
|  | case MVE_VCVTs16f16z: | 
|  | case MVE_VCVTu16f16_fix: | 
|  | case MVE_VCVTu16f16a: | 
|  | case MVE_VCVTu16f16m: | 
|  | case MVE_VCVTu16f16n: | 
|  | case MVE_VCVTu16f16p: | 
|  | case MVE_VCVTu16f16z: | 
|  | case MVE_VDDUPu16: | 
|  | case MVE_VDUP16: | 
|  | case MVE_VDWDUPu16: | 
|  | case MVE_VFMA_qr_Sf16: | 
|  | case MVE_VFMA_qr_f16: | 
|  | case MVE_VFMAf16: | 
|  | case MVE_VFMSf16: | 
|  | case MVE_VHADD_qr_s16: | 
|  | case MVE_VHADD_qr_u16: | 
|  | case MVE_VHADDs16: | 
|  | case MVE_VHADDu16: | 
|  | case MVE_VHCADDs16: | 
|  | case MVE_VHSUB_qr_s16: | 
|  | case MVE_VHSUB_qr_u16: | 
|  | case MVE_VHSUBs16: | 
|  | case MVE_VHSUBu16: | 
|  | case MVE_VIDUPu16: | 
|  | case MVE_VIWDUPu16: | 
|  | case MVE_VLD20_16: | 
|  | case MVE_VLD20_16_wb: | 
|  | case MVE_VLD21_16: | 
|  | case MVE_VLD21_16_wb: | 
|  | case MVE_VLD40_16: | 
|  | case MVE_VLD40_16_wb: | 
|  | case MVE_VLD41_16: | 
|  | case MVE_VLD41_16_wb: | 
|  | case MVE_VLD42_16: | 
|  | case MVE_VLD42_16_wb: | 
|  | case MVE_VLD43_16: | 
|  | case MVE_VLD43_16_wb: | 
|  | case MVE_VLDRBS16: | 
|  | case MVE_VLDRBS16_post: | 
|  | case MVE_VLDRBS16_pre: | 
|  | case MVE_VLDRBS16_rq: | 
|  | case MVE_VLDRBU16: | 
|  | case MVE_VLDRBU16_post: | 
|  | case MVE_VLDRBU16_pre: | 
|  | case MVE_VLDRBU16_rq: | 
|  | case MVE_VLDRHU16: | 
|  | case MVE_VLDRHU16_post: | 
|  | case MVE_VLDRHU16_pre: | 
|  | case MVE_VLDRHU16_rq: | 
|  | case MVE_VLDRHU16_rq_u: | 
|  | case MVE_VMAXAVs16: | 
|  | case MVE_VMAXAs16: | 
|  | case MVE_VMAXNMAVf16: | 
|  | case MVE_VMAXNMAf16: | 
|  | case MVE_VMAXNMVf16: | 
|  | case MVE_VMAXNMf16: | 
|  | case MVE_VMAXVs16: | 
|  | case MVE_VMAXVu16: | 
|  | case MVE_VMAXs16: | 
|  | case MVE_VMAXu16: | 
|  | case MVE_VMINAVs16: | 
|  | case MVE_VMINAs16: | 
|  | case MVE_VMINNMAVf16: | 
|  | case MVE_VMINNMAf16: | 
|  | case MVE_VMINNMVf16: | 
|  | case MVE_VMINNMf16: | 
|  | case MVE_VMINVs16: | 
|  | case MVE_VMINVu16: | 
|  | case MVE_VMINs16: | 
|  | case MVE_VMINu16: | 
|  | case MVE_VMLADAVas16: | 
|  | case MVE_VMLADAVau16: | 
|  | case MVE_VMLADAVaxs16: | 
|  | case MVE_VMLADAVs16: | 
|  | case MVE_VMLADAVu16: | 
|  | case MVE_VMLADAVxs16: | 
|  | case MVE_VMLALDAVas16: | 
|  | case MVE_VMLALDAVau16: | 
|  | case MVE_VMLALDAVaxs16: | 
|  | case MVE_VMLALDAVs16: | 
|  | case MVE_VMLALDAVu16: | 
|  | case MVE_VMLALDAVxs16: | 
|  | case MVE_VMLAS_qr_i16: | 
|  | case MVE_VMLA_qr_i16: | 
|  | case MVE_VMLSDAVas16: | 
|  | case MVE_VMLSDAVaxs16: | 
|  | case MVE_VMLSDAVs16: | 
|  | case MVE_VMLSDAVxs16: | 
|  | case MVE_VMLSLDAVas16: | 
|  | case MVE_VMLSLDAVaxs16: | 
|  | case MVE_VMLSLDAVs16: | 
|  | case MVE_VMLSLDAVxs16: | 
|  | case MVE_VMOVNi16bh: | 
|  | case MVE_VMOVNi16th: | 
|  | case MVE_VMOV_from_lane_s16: | 
|  | case MVE_VMOV_from_lane_u16: | 
|  | case MVE_VMOV_to_lane_16: | 
|  | case MVE_VMOVimmi16: | 
|  | case MVE_VMOVLs8bh: | 
|  | case MVE_VMOVLs8th: | 
|  | case MVE_VMOVLu8bh: | 
|  | case MVE_VMOVLu8th: | 
|  | case MVE_VMULLBp8: | 
|  | case MVE_VMULLBs8: | 
|  | case MVE_VMULLBu8: | 
|  | case MVE_VMULLTp8: | 
|  | case MVE_VMULLTs8: | 
|  | case MVE_VMULLTu8: | 
|  | case MVE_VMULHs16: | 
|  | case MVE_VMULHu16: | 
|  | case MVE_VMUL_qr_f16: | 
|  | case MVE_VMUL_qr_i16: | 
|  | case MVE_VMULf16: | 
|  | case MVE_VMULi16: | 
|  | case MVE_VMVNimmi16: | 
|  | case MVE_VNEGf16: | 
|  | case MVE_VNEGs16: | 
|  | case MVE_VORRimmi16: | 
|  | case MVE_VPTv8f16: | 
|  | case MVE_VPTv8f16r: | 
|  | case MVE_VPTv8i16: | 
|  | case MVE_VPTv8i16r: | 
|  | case MVE_VPTv8s16: | 
|  | case MVE_VPTv8s16r: | 
|  | case MVE_VPTv8u16: | 
|  | case MVE_VPTv8u16r: | 
|  | case MVE_VQABSs16: | 
|  | case MVE_VQADD_qr_s16: | 
|  | case MVE_VQADD_qr_u16: | 
|  | case MVE_VQADDs16: | 
|  | case MVE_VQADDu16: | 
|  | case MVE_VQDMLADHXs16: | 
|  | case MVE_VQDMLADHs16: | 
|  | case MVE_VQDMLAH_qrs16: | 
|  | case MVE_VQDMLASH_qrs16: | 
|  | case MVE_VQDMLSDHXs16: | 
|  | case MVE_VQDMLSDHs16: | 
|  | case MVE_VQDMULH_qr_s16: | 
|  | case MVE_VQDMULHi16: | 
|  | case MVE_VQDMULL_qr_s16bh: | 
|  | case MVE_VQDMULL_qr_s16th: | 
|  | case MVE_VQDMULLs16bh: | 
|  | case MVE_VQDMULLs16th: | 
|  | case MVE_VQMOVNs16bh: | 
|  | case MVE_VQMOVNs16th: | 
|  | case MVE_VQMOVNu16bh: | 
|  | case MVE_VQMOVNu16th: | 
|  | case MVE_VQMOVUNs16bh: | 
|  | case MVE_VQMOVUNs16th: | 
|  | case MVE_VQNEGs16: | 
|  | case MVE_VQRDMLADHXs16: | 
|  | case MVE_VQRDMLADHs16: | 
|  | case MVE_VQRDMLAH_qrs16: | 
|  | case MVE_VQRDMLASH_qrs16: | 
|  | case MVE_VQRDMLSDHXs16: | 
|  | case MVE_VQRDMLSDHs16: | 
|  | case MVE_VQRDMULH_qr_s16: | 
|  | case MVE_VQRDMULHi16: | 
|  | case MVE_VQRSHL_by_vecs16: | 
|  | case MVE_VQRSHL_by_vecu16: | 
|  | case MVE_VQRSHL_qrs16: | 
|  | case MVE_VQRSHL_qru16: | 
|  | case MVE_VQRSHRNbhs16: | 
|  | case MVE_VQRSHRNbhu16: | 
|  | case MVE_VQRSHRNths16: | 
|  | case MVE_VQRSHRNthu16: | 
|  | case MVE_VQRSHRUNs16bh: | 
|  | case MVE_VQRSHRUNs16th: | 
|  | case MVE_VQSHLU_imms16: | 
|  | case MVE_VQSHL_by_vecs16: | 
|  | case MVE_VQSHL_by_vecu16: | 
|  | case MVE_VQSHL_qrs16: | 
|  | case MVE_VQSHL_qru16: | 
|  | case MVE_VQSHLimms16: | 
|  | case MVE_VQSHLimmu16: | 
|  | case MVE_VQSHRNbhs16: | 
|  | case MVE_VQSHRNbhu16: | 
|  | case MVE_VQSHRNths16: | 
|  | case MVE_VQSHRNthu16: | 
|  | case MVE_VQSHRUNs16bh: | 
|  | case MVE_VQSHRUNs16th: | 
|  | case MVE_VQSUB_qr_s16: | 
|  | case MVE_VQSUB_qr_u16: | 
|  | case MVE_VQSUBs16: | 
|  | case MVE_VQSUBu16: | 
|  | case MVE_VREV16_8: | 
|  | case MVE_VRHADDs16: | 
|  | case MVE_VRHADDu16: | 
|  | case MVE_VRINTf16A: | 
|  | case MVE_VRINTf16M: | 
|  | case MVE_VRINTf16N: | 
|  | case MVE_VRINTf16P: | 
|  | case MVE_VRINTf16X: | 
|  | case MVE_VRINTf16Z: | 
|  | case MVE_VRMULHs16: | 
|  | case MVE_VRMULHu16: | 
|  | case MVE_VRSHL_by_vecs16: | 
|  | case MVE_VRSHL_by_vecu16: | 
|  | case MVE_VRSHL_qrs16: | 
|  | case MVE_VRSHL_qru16: | 
|  | case MVE_VRSHRNi16bh: | 
|  | case MVE_VRSHRNi16th: | 
|  | case MVE_VRSHR_imms16: | 
|  | case MVE_VRSHR_immu16: | 
|  | case MVE_VSHLL_imms8bh: | 
|  | case MVE_VSHLL_imms8th: | 
|  | case MVE_VSHLL_immu8bh: | 
|  | case MVE_VSHLL_immu8th: | 
|  | case MVE_VSHLL_lws8bh: | 
|  | case MVE_VSHLL_lws8th: | 
|  | case MVE_VSHLL_lwu8bh: | 
|  | case MVE_VSHLL_lwu8th: | 
|  | case MVE_VSHL_by_vecs16: | 
|  | case MVE_VSHL_by_vecu16: | 
|  | case MVE_VSHL_immi16: | 
|  | case MVE_VSHL_qrs16: | 
|  | case MVE_VSHL_qru16: | 
|  | case MVE_VSHRNi16bh: | 
|  | case MVE_VSHRNi16th: | 
|  | case MVE_VSHR_imms16: | 
|  | case MVE_VSHR_immu16: | 
|  | case MVE_VSLIimm16: | 
|  | case MVE_VSRIimm16: | 
|  | case MVE_VST20_16: | 
|  | case MVE_VST20_16_wb: | 
|  | case MVE_VST21_16: | 
|  | case MVE_VST21_16_wb: | 
|  | case MVE_VST40_16: | 
|  | case MVE_VST40_16_wb: | 
|  | case MVE_VST41_16: | 
|  | case MVE_VST41_16_wb: | 
|  | case MVE_VST42_16: | 
|  | case MVE_VST42_16_wb: | 
|  | case MVE_VST43_16: | 
|  | case MVE_VST43_16_wb: | 
|  | case MVE_VSTRB16: | 
|  | case MVE_VSTRB16_post: | 
|  | case MVE_VSTRB16_pre: | 
|  | case MVE_VSTRB16_rq: | 
|  | case MVE_VSTRH16_rq: | 
|  | case MVE_VSTRH16_rq_u: | 
|  | case MVE_VSTRHU16: | 
|  | case MVE_VSTRHU16_post: | 
|  | case MVE_VSTRHU16_pre: | 
|  | case MVE_VSUB_qr_f16: | 
|  | case MVE_VSUB_qr_i16: | 
|  | case MVE_VSUBf16: | 
|  | case MVE_VSUBi16: | 
|  | return 1; | 
|  | case MVE_VABAVs32: | 
|  | case MVE_VABAVu32: | 
|  | case MVE_VABDf32: | 
|  | case MVE_VABDs32: | 
|  | case MVE_VABDu32: | 
|  | case MVE_VABSf32: | 
|  | case MVE_VABSs32: | 
|  | case MVE_VADC: | 
|  | case MVE_VADCI: | 
|  | case MVE_VADDLVs32acc: | 
|  | case MVE_VADDLVs32no_acc: | 
|  | case MVE_VADDLVu32acc: | 
|  | case MVE_VADDLVu32no_acc: | 
|  | case MVE_VADDVs32acc: | 
|  | case MVE_VADDVs32no_acc: | 
|  | case MVE_VADDVu32acc: | 
|  | case MVE_VADDVu32no_acc: | 
|  | case MVE_VADD_qr_f32: | 
|  | case MVE_VADD_qr_i32: | 
|  | case MVE_VADDf32: | 
|  | case MVE_VADDi32: | 
|  | case MVE_VBICimmi32: | 
|  | case MVE_VBRSR32: | 
|  | case MVE_VCADDf32: | 
|  | case MVE_VCADDi32: | 
|  | case MVE_VCLSs32: | 
|  | case MVE_VCLZs32: | 
|  | case MVE_VCMLAf32: | 
|  | case MVE_VCMPf32: | 
|  | case MVE_VCMPf32r: | 
|  | case MVE_VCMPi32: | 
|  | case MVE_VCMPi32r: | 
|  | case MVE_VCMPs32: | 
|  | case MVE_VCMPs32r: | 
|  | case MVE_VCMPu32: | 
|  | case MVE_VCMPu32r: | 
|  | case MVE_VCMULf32: | 
|  | case MVE_VCTP32: | 
|  | case MVE_VCVTf16f32bh: | 
|  | case MVE_VCVTf16f32th: | 
|  | case MVE_VCVTf32f16bh: | 
|  | case MVE_VCVTf32f16th: | 
|  | case MVE_VCVTf32s32_fix: | 
|  | case MVE_VCVTf32s32n: | 
|  | case MVE_VCVTf32u32_fix: | 
|  | case MVE_VCVTf32u32n: | 
|  | case MVE_VCVTs32f32_fix: | 
|  | case MVE_VCVTs32f32a: | 
|  | case MVE_VCVTs32f32m: | 
|  | case MVE_VCVTs32f32n: | 
|  | case MVE_VCVTs32f32p: | 
|  | case MVE_VCVTs32f32z: | 
|  | case MVE_VCVTu32f32_fix: | 
|  | case MVE_VCVTu32f32a: | 
|  | case MVE_VCVTu32f32m: | 
|  | case MVE_VCVTu32f32n: | 
|  | case MVE_VCVTu32f32p: | 
|  | case MVE_VCVTu32f32z: | 
|  | case MVE_VDDUPu32: | 
|  | case MVE_VDUP32: | 
|  | case MVE_VDWDUPu32: | 
|  | case MVE_VFMA_qr_Sf32: | 
|  | case MVE_VFMA_qr_f32: | 
|  | case MVE_VFMAf32: | 
|  | case MVE_VFMSf32: | 
|  | case MVE_VHADD_qr_s32: | 
|  | case MVE_VHADD_qr_u32: | 
|  | case MVE_VHADDs32: | 
|  | case MVE_VHADDu32: | 
|  | case MVE_VHCADDs32: | 
|  | case MVE_VHSUB_qr_s32: | 
|  | case MVE_VHSUB_qr_u32: | 
|  | case MVE_VHSUBs32: | 
|  | case MVE_VHSUBu32: | 
|  | case MVE_VIDUPu32: | 
|  | case MVE_VIWDUPu32: | 
|  | case MVE_VLD20_32: | 
|  | case MVE_VLD20_32_wb: | 
|  | case MVE_VLD21_32: | 
|  | case MVE_VLD21_32_wb: | 
|  | case MVE_VLD40_32: | 
|  | case MVE_VLD40_32_wb: | 
|  | case MVE_VLD41_32: | 
|  | case MVE_VLD41_32_wb: | 
|  | case MVE_VLD42_32: | 
|  | case MVE_VLD42_32_wb: | 
|  | case MVE_VLD43_32: | 
|  | case MVE_VLD43_32_wb: | 
|  | case MVE_VLDRBS32: | 
|  | case MVE_VLDRBS32_post: | 
|  | case MVE_VLDRBS32_pre: | 
|  | case MVE_VLDRBS32_rq: | 
|  | case MVE_VLDRBU32: | 
|  | case MVE_VLDRBU32_post: | 
|  | case MVE_VLDRBU32_pre: | 
|  | case MVE_VLDRBU32_rq: | 
|  | case MVE_VLDRHS32: | 
|  | case MVE_VLDRHS32_post: | 
|  | case MVE_VLDRHS32_pre: | 
|  | case MVE_VLDRHS32_rq: | 
|  | case MVE_VLDRHS32_rq_u: | 
|  | case MVE_VLDRHU32: | 
|  | case MVE_VLDRHU32_post: | 
|  | case MVE_VLDRHU32_pre: | 
|  | case MVE_VLDRHU32_rq: | 
|  | case MVE_VLDRHU32_rq_u: | 
|  | case MVE_VLDRWU32: | 
|  | case MVE_VLDRWU32_post: | 
|  | case MVE_VLDRWU32_pre: | 
|  | case MVE_VLDRWU32_qi: | 
|  | case MVE_VLDRWU32_qi_pre: | 
|  | case MVE_VLDRWU32_rq: | 
|  | case MVE_VLDRWU32_rq_u: | 
|  | case MVE_VMAXAVs32: | 
|  | case MVE_VMAXAs32: | 
|  | case MVE_VMAXNMAVf32: | 
|  | case MVE_VMAXNMAf32: | 
|  | case MVE_VMAXNMVf32: | 
|  | case MVE_VMAXNMf32: | 
|  | case MVE_VMAXVs32: | 
|  | case MVE_VMAXVu32: | 
|  | case MVE_VMAXs32: | 
|  | case MVE_VMAXu32: | 
|  | case MVE_VMINAVs32: | 
|  | case MVE_VMINAs32: | 
|  | case MVE_VMINNMAVf32: | 
|  | case MVE_VMINNMAf32: | 
|  | case MVE_VMINNMVf32: | 
|  | case MVE_VMINNMf32: | 
|  | case MVE_VMINVs32: | 
|  | case MVE_VMINVu32: | 
|  | case MVE_VMINs32: | 
|  | case MVE_VMINu32: | 
|  | case MVE_VMLADAVas32: | 
|  | case MVE_VMLADAVau32: | 
|  | case MVE_VMLADAVaxs32: | 
|  | case MVE_VMLADAVs32: | 
|  | case MVE_VMLADAVu32: | 
|  | case MVE_VMLADAVxs32: | 
|  | case MVE_VMLALDAVas32: | 
|  | case MVE_VMLALDAVau32: | 
|  | case MVE_VMLALDAVaxs32: | 
|  | case MVE_VMLALDAVs32: | 
|  | case MVE_VMLALDAVu32: | 
|  | case MVE_VMLALDAVxs32: | 
|  | case MVE_VMLAS_qr_i32: | 
|  | case MVE_VMLA_qr_i32: | 
|  | case MVE_VMLSDAVas32: | 
|  | case MVE_VMLSDAVaxs32: | 
|  | case MVE_VMLSDAVs32: | 
|  | case MVE_VMLSDAVxs32: | 
|  | case MVE_VMLSLDAVas32: | 
|  | case MVE_VMLSLDAVaxs32: | 
|  | case MVE_VMLSLDAVs32: | 
|  | case MVE_VMLSLDAVxs32: | 
|  | case MVE_VMOVNi32bh: | 
|  | case MVE_VMOVNi32th: | 
|  | case MVE_VMOV_from_lane_32: | 
|  | case MVE_VMOV_q_rr: | 
|  | case MVE_VMOV_rr_q: | 
|  | case MVE_VMOV_to_lane_32: | 
|  | case MVE_VMOVimmf32: | 
|  | case MVE_VMOVimmi32: | 
|  | case MVE_VMOVLs16bh: | 
|  | case MVE_VMOVLs16th: | 
|  | case MVE_VMOVLu16bh: | 
|  | case MVE_VMOVLu16th: | 
|  | case MVE_VMULHs32: | 
|  | case MVE_VMULHu32: | 
|  | case MVE_VMULLBp16: | 
|  | case MVE_VMULLBs16: | 
|  | case MVE_VMULLBu16: | 
|  | case MVE_VMULLTp16: | 
|  | case MVE_VMULLTs16: | 
|  | case MVE_VMULLTu16: | 
|  | case MVE_VMUL_qr_f32: | 
|  | case MVE_VMUL_qr_i32: | 
|  | case MVE_VMULf32: | 
|  | case MVE_VMULi32: | 
|  | case MVE_VMVNimmi32: | 
|  | case MVE_VNEGf32: | 
|  | case MVE_VNEGs32: | 
|  | case MVE_VORRimmi32: | 
|  | case MVE_VPTv4f32: | 
|  | case MVE_VPTv4f32r: | 
|  | case MVE_VPTv4i32: | 
|  | case MVE_VPTv4i32r: | 
|  | case MVE_VPTv4s32: | 
|  | case MVE_VPTv4s32r: | 
|  | case MVE_VPTv4u32: | 
|  | case MVE_VPTv4u32r: | 
|  | case MVE_VQABSs32: | 
|  | case MVE_VQADD_qr_s32: | 
|  | case MVE_VQADD_qr_u32: | 
|  | case MVE_VQADDs32: | 
|  | case MVE_VQADDu32: | 
|  | case MVE_VQDMLADHXs32: | 
|  | case MVE_VQDMLADHs32: | 
|  | case MVE_VQDMLAH_qrs32: | 
|  | case MVE_VQDMLASH_qrs32: | 
|  | case MVE_VQDMLSDHXs32: | 
|  | case MVE_VQDMLSDHs32: | 
|  | case MVE_VQDMULH_qr_s32: | 
|  | case MVE_VQDMULHi32: | 
|  | case MVE_VQDMULL_qr_s32bh: | 
|  | case MVE_VQDMULL_qr_s32th: | 
|  | case MVE_VQDMULLs32bh: | 
|  | case MVE_VQDMULLs32th: | 
|  | case MVE_VQMOVNs32bh: | 
|  | case MVE_VQMOVNs32th: | 
|  | case MVE_VQMOVNu32bh: | 
|  | case MVE_VQMOVNu32th: | 
|  | case MVE_VQMOVUNs32bh: | 
|  | case MVE_VQMOVUNs32th: | 
|  | case MVE_VQNEGs32: | 
|  | case MVE_VQRDMLADHXs32: | 
|  | case MVE_VQRDMLADHs32: | 
|  | case MVE_VQRDMLAH_qrs32: | 
|  | case MVE_VQRDMLASH_qrs32: | 
|  | case MVE_VQRDMLSDHXs32: | 
|  | case MVE_VQRDMLSDHs32: | 
|  | case MVE_VQRDMULH_qr_s32: | 
|  | case MVE_VQRDMULHi32: | 
|  | case MVE_VQRSHL_by_vecs32: | 
|  | case MVE_VQRSHL_by_vecu32: | 
|  | case MVE_VQRSHL_qrs32: | 
|  | case MVE_VQRSHL_qru32: | 
|  | case MVE_VQRSHRNbhs32: | 
|  | case MVE_VQRSHRNbhu32: | 
|  | case MVE_VQRSHRNths32: | 
|  | case MVE_VQRSHRNthu32: | 
|  | case MVE_VQRSHRUNs32bh: | 
|  | case MVE_VQRSHRUNs32th: | 
|  | case MVE_VQSHLU_imms32: | 
|  | case MVE_VQSHL_by_vecs32: | 
|  | case MVE_VQSHL_by_vecu32: | 
|  | case MVE_VQSHL_qrs32: | 
|  | case MVE_VQSHL_qru32: | 
|  | case MVE_VQSHLimms32: | 
|  | case MVE_VQSHLimmu32: | 
|  | case MVE_VQSHRNbhs32: | 
|  | case MVE_VQSHRNbhu32: | 
|  | case MVE_VQSHRNths32: | 
|  | case MVE_VQSHRNthu32: | 
|  | case MVE_VQSHRUNs32bh: | 
|  | case MVE_VQSHRUNs32th: | 
|  | case MVE_VQSUB_qr_s32: | 
|  | case MVE_VQSUB_qr_u32: | 
|  | case MVE_VQSUBs32: | 
|  | case MVE_VQSUBu32: | 
|  | case MVE_VREV32_16: | 
|  | case MVE_VREV32_8: | 
|  | case MVE_VRHADDs32: | 
|  | case MVE_VRHADDu32: | 
|  | case MVE_VRINTf32A: | 
|  | case MVE_VRINTf32M: | 
|  | case MVE_VRINTf32N: | 
|  | case MVE_VRINTf32P: | 
|  | case MVE_VRINTf32X: | 
|  | case MVE_VRINTf32Z: | 
|  | case MVE_VRMLALDAVHas32: | 
|  | case MVE_VRMLALDAVHau32: | 
|  | case MVE_VRMLALDAVHaxs32: | 
|  | case MVE_VRMLALDAVHs32: | 
|  | case MVE_VRMLALDAVHu32: | 
|  | case MVE_VRMLALDAVHxs32: | 
|  | case MVE_VRMLSLDAVHas32: | 
|  | case MVE_VRMLSLDAVHaxs32: | 
|  | case MVE_VRMLSLDAVHs32: | 
|  | case MVE_VRMLSLDAVHxs32: | 
|  | case MVE_VRMULHs32: | 
|  | case MVE_VRMULHu32: | 
|  | case MVE_VRSHL_by_vecs32: | 
|  | case MVE_VRSHL_by_vecu32: | 
|  | case MVE_VRSHL_qrs32: | 
|  | case MVE_VRSHL_qru32: | 
|  | case MVE_VRSHRNi32bh: | 
|  | case MVE_VRSHRNi32th: | 
|  | case MVE_VRSHR_imms32: | 
|  | case MVE_VRSHR_immu32: | 
|  | case MVE_VSBC: | 
|  | case MVE_VSBCI: | 
|  | case MVE_VSHLC: | 
|  | case MVE_VSHLL_imms16bh: | 
|  | case MVE_VSHLL_imms16th: | 
|  | case MVE_VSHLL_immu16bh: | 
|  | case MVE_VSHLL_immu16th: | 
|  | case MVE_VSHLL_lws16bh: | 
|  | case MVE_VSHLL_lws16th: | 
|  | case MVE_VSHLL_lwu16bh: | 
|  | case MVE_VSHLL_lwu16th: | 
|  | case MVE_VSHL_by_vecs32: | 
|  | case MVE_VSHL_by_vecu32: | 
|  | case MVE_VSHL_immi32: | 
|  | case MVE_VSHL_qrs32: | 
|  | case MVE_VSHL_qru32: | 
|  | case MVE_VSHRNi32bh: | 
|  | case MVE_VSHRNi32th: | 
|  | case MVE_VSHR_imms32: | 
|  | case MVE_VSHR_immu32: | 
|  | case MVE_VSLIimm32: | 
|  | case MVE_VSRIimm32: | 
|  | case MVE_VST20_32: | 
|  | case MVE_VST20_32_wb: | 
|  | case MVE_VST21_32: | 
|  | case MVE_VST21_32_wb: | 
|  | case MVE_VST40_32: | 
|  | case MVE_VST40_32_wb: | 
|  | case MVE_VST41_32: | 
|  | case MVE_VST41_32_wb: | 
|  | case MVE_VST42_32: | 
|  | case MVE_VST42_32_wb: | 
|  | case MVE_VST43_32: | 
|  | case MVE_VST43_32_wb: | 
|  | case MVE_VSTRB32: | 
|  | case MVE_VSTRB32_post: | 
|  | case MVE_VSTRB32_pre: | 
|  | case MVE_VSTRB32_rq: | 
|  | case MVE_VSTRH32: | 
|  | case MVE_VSTRH32_post: | 
|  | case MVE_VSTRH32_pre: | 
|  | case MVE_VSTRH32_rq: | 
|  | case MVE_VSTRH32_rq_u: | 
|  | case MVE_VSTRW32_qi: | 
|  | case MVE_VSTRW32_qi_pre: | 
|  | case MVE_VSTRW32_rq: | 
|  | case MVE_VSTRW32_rq_u: | 
|  | case MVE_VSTRWU32: | 
|  | case MVE_VSTRWU32_post: | 
|  | case MVE_VSTRWU32_pre: | 
|  | case MVE_VSUB_qr_f32: | 
|  | case MVE_VSUB_qr_i32: | 
|  | case MVE_VSUBf32: | 
|  | case MVE_VSUBi32: | 
|  | return 2; | 
|  | case MVE_VCTP64: | 
|  | case MVE_VLDRDU64_qi: | 
|  | case MVE_VLDRDU64_qi_pre: | 
|  | case MVE_VLDRDU64_rq: | 
|  | case MVE_VLDRDU64_rq_u: | 
|  | case MVE_VMULLBs32: | 
|  | case MVE_VMULLBu32: | 
|  | case MVE_VMULLTs32: | 
|  | case MVE_VMULLTu32: | 
|  | case MVE_VMOVimmi64: | 
|  | case MVE_VREV64_16: | 
|  | case MVE_VREV64_32: | 
|  | case MVE_VREV64_8: | 
|  | case MVE_VSTRD64_qi: | 
|  | case MVE_VSTRD64_qi_pre: | 
|  | case MVE_VSTRD64_rq: | 
|  | case MVE_VSTRD64_rq_u: | 
|  | return 3; | 
|  | } | 
|  | }; | 
|  | LLVMInitializeARMTargetInfo(); | 
|  | LLVMInitializeARMTarget(); | 
|  | LLVMInitializeARMTargetMC(); | 
|  |  | 
|  | auto TT(Triple::normalize("thumbv8.1m.main-none-none-eabi")); | 
|  | std::string Error; | 
|  | const Target *T = TargetRegistry::lookupTarget(TT, Error); | 
|  | if (!T) { | 
|  | dbgs() << Error; | 
|  | GTEST_SKIP(); | 
|  | } | 
|  |  | 
|  | TargetOptions Options; | 
|  | auto TM = std::unique_ptr<LLVMTargetMachine>(static_cast<LLVMTargetMachine *>( | 
|  | T->createTargetMachine(TT, "generic", "", Options, std::nullopt, | 
|  | std::nullopt, CodeGenOptLevel::Default))); | 
|  | ARMSubtarget ST(TM->getTargetTriple(), std::string(TM->getTargetCPU()), | 
|  | std::string(TM->getTargetFeatureString()), | 
|  | *static_cast<const ARMBaseTargetMachine *>(TM.get()), false); | 
|  |  | 
|  | auto MII = TM->getMCInstrInfo(); | 
|  | for (unsigned i = 0; i < ARM::INSTRUCTION_LIST_END; ++i) { | 
|  | uint64_t Flags = MII->get(i).TSFlags; | 
|  | if ((Flags & ARMII::DomainMask) != ARMII::DomainMVE) | 
|  | continue; | 
|  | int Size = (Flags & ARMII::VecSize) >> ARMII::VecSizeShift; | 
|  | ASSERT_EQ(MVEVecSize(i), Size) | 
|  | << MII->getName(i) | 
|  | << ": mismatched expectation for MVE vec size\n"; | 
|  | } | 
|  | } |