Lines Matching full:aarch64
1 //===-- AArch64ISelDAGToDAG.cpp - A dag to dag inst selector for AArch64 --===//
10 // This file defines an instruction selector for the AArch64 target.
28 #define DEBUG_TYPE "aarch64-isel"
31 /// AArch64DAGToDAGISel - AArch64 specific code to select AArch64 machine
51 return "AArch64 Instruction Selection";
237 // Require the address to be in a register. That is safe for all AArch64
452 /// SelectMLAV64LaneV128 - AArch64 supports vector MLAs where one multiplicand
483 MLAOpc = AArch64::MLAv4i16_indexed;
486 MLAOpc = AArch64::MLAv8i16_indexed;
489 MLAOpc = AArch64::MLAv2i32_indexed;
492 MLAOpc = AArch64::MLAv4i32_indexed;
520 SMULLOpc = AArch64::SMULLv4i16_indexed;
523 SMULLOpc = AArch64::SMULLv2i32_indexed;
531 SMULLOpc = AArch64::UMULLv4i16_indexed;
534 SMULLOpc = AArch64::UMULLv2i32_indexed;
552 SDValue SubReg = CurDAG->getTargetConstant(AArch64::sub_32, dl, MVT::i32);
587 // AArch64 mandates that the RHS of the operation must use the smallest
761 SDValue SubReg = CurDAG->getTargetConstant(AArch64::sub_32, dl, MVT::i32);
937 CurDAG->getMachineNode(AArch64::MOVi64imm, DL, MVT::i64, Ops);
973 AArch64::DDRegClassID, AArch64::DDDRegClassID, AArch64::DDDDRegClassID};
974 static const unsigned SubRegs[] = {AArch64::dsub0, AArch64::dsub1,
975 AArch64::dsub2, AArch64::dsub3};
982 AArch64::QQRegClassID, AArch64::QQQRegClassID, AArch64::QQQQRegClassID};
983 static const unsigned SubRegs[] = {AArch64::qsub0, AArch64::qsub1,
984 AArch64::qsub2, AArch64::qsub3};
1056 Opcode = IsPre ? AArch64::LDRXpre : AArch64::LDRXpost;
1059 Opcode = IsPre ? AArch64::LDRWpre : AArch64::LDRWpost;
1061 Opcode = IsPre ? AArch64::LDRSWpre : AArch64::LDRSWpost;
1063 Opcode = IsPre ? AArch64::LDRWpre : AArch64::LDRWpost;
1072 Opcode = IsPre ? AArch64::LDRSHXpre : AArch64::LDRSHXpost;
1074 Opcode = IsPre ? AArch64::LDRSHWpre : AArch64::LDRSHWpost;
1076 Opcode = IsPre ? AArch64::LDRHHpre : AArch64::LDRHHpost;
1085 Opcode = IsPre ? AArch64::LDRSBXpre : AArch64::LDRSBXpost;
1087 Opcode = IsPre ? AArch64::LDRSBWpre : AArch64::LDRSBWpost;
1089 Opcode = IsPre ? AArch64::LDRBBpre : AArch64::LDRBBpost;
1096 Opcode = IsPre ? AArch64::LDRHpre : AArch64::LDRHpost;
1098 Opcode = IsPre ? AArch64::LDRSpre : AArch64::LDRSpost;
1100 Opcode = IsPre ? AArch64::LDRDpre : AArch64::LDRDpost;
1102 Opcode = IsPre ? AArch64::LDRQpre : AArch64::LDRQpost;
1118 SDValue SubReg = CurDAG->getTargetConstant(AArch64::sub_32, dl, MVT::i32);
1121 AArch64::SUBREG_TO_REG, dl, MVT::i64,
1242 return DAG.getTargetInsertSubreg(AArch64::dsub, DL, WideTy, Undef, V64Reg);
1255 return DAG.getTargetExtractSubreg(AArch64::dsub, SDLoc(V128Reg), NarrowTy,
1285 static const unsigned QSubs[] = { AArch64::qsub0, AArch64::qsub1,
1286 AArch64::qsub2, AArch64::qsub3 };
1338 static const unsigned QSubs[] = { AArch64::qsub0, AArch64::qsub1,
1339 AArch64::qsub2, AArch64::qsub3 };
1507 Opc = VT == MVT::i32 ? AArch64::UBFMWri : AArch64::UBFMXri;
1545 Opc = AArch64::UBFMWri;
1547 Opc = AArch64::UBFMXri;
1617 Opc = N->getOpcode() == ISD::SRA ? AArch64::SBFMWri : AArch64::UBFMWri;
1619 Opc = N->getOpcode() == ISD::SRA ? AArch64::SBFMXri : AArch64::UBFMXri;
1647 case AArch64::SBFMWri:
1648 case AArch64::UBFMWri:
1649 case AArch64::SBFMXri:
1650 case AArch64::UBFMXri:
1672 if ((Opc == AArch64::SBFMXri || Opc == AArch64::UBFMXri) && VT == MVT::i32) {
1677 SDValue SubReg = CurDAG->getTargetConstant(AArch64::sub_32, dl, MVT::i32);
1834 case AArch64::ANDSWri:
1835 case AArch64::ANDSXri:
1836 case AArch64::ANDWri:
1837 case AArch64::ANDXri:
1841 case AArch64::UBFMWri:
1842 case AArch64::UBFMXri:
1845 case AArch64::ORRWrs:
1846 case AArch64::ORRXrs:
1851 case AArch64::BFMWri:
1852 case AArch64::BFMXri:
1891 unsigned UBFMOpc = BitWidth == 32 ? AArch64::UBFMWri : AArch64::UBFMXri;
1984 Opc = AArch64::BFMWri;
1986 Opc = AArch64::BFMXri;
2018 if ((BFXOpc != AArch64::UBFMXri && VT == MVT::i64) ||
2019 (BFXOpc != AArch64::UBFMWri && VT == MVT::i32))
2115 Opc = AArch64::UBFMWri;
2117 Opc = AArch64::UBFMXri;
2224 return CurDAG->getMachineNode(AArch64::MRS, DL, N->getSimpleValueType(0),
2237 return CurDAG->getMachineNode(AArch64::MRS, DL, N->getSimpleValueType(0),
2256 return CurDAG->getMachineNode(AArch64::MSR, DL, MVT::Other,
2277 State = AArch64::MSRpstateImm1;
2280 State = AArch64::MSRpstateImm4;
2297 return CurDAG->getMachineNode(AArch64::MSR, DL, MVT::Other,
2388 SubReg = AArch64::dsub;
2391 SubReg = AArch64::ssub;
2394 SubReg = AArch64::hsub;
2413 AArch64::WZR, MVT::i32).getNode();
2416 AArch64::XZR, MVT::i64).getNode();
2431 return CurDAG->SelectNodeTo(Node, AArch64::ADDXri, MVT::i64, Ops);
2441 IntNo == Intrinsic::aarch64_ldaxp ? AArch64::LDAXPX : AArch64::LDXPX;
2458 IntNo == Intrinsic::aarch64_stlxp ? AArch64::STLXPX : AArch64::STXPX;
2478 return SelectLoad(Node, 2, AArch64::LD1Twov8b, AArch64::dsub0);
2480 return SelectLoad(Node, 2, AArch64::LD1Twov16b, AArch64::qsub0);
2482 return SelectLoad(Node, 2, AArch64::LD1Twov4h, AArch64::dsub0);
2484 return SelectLoad(Node, 2, AArch64::LD1Twov8h, AArch64::qsub0);
2486 return SelectLoad(Node, 2, AArch64::LD1Twov2s, AArch64::dsub0);
2488 return SelectLoad(Node, 2, AArch64::LD1Twov4s, AArch64::qsub0);
2490 return SelectLoad(Node, 2, AArch64::LD1Twov1d, AArch64::dsub0);
2492 return SelectLoad(Node, 2, AArch64::LD1Twov2d, AArch64::qsub0);
2496 return SelectLoad(Node, 3, AArch64::LD1Threev8b, AArch64::dsub0);
2498 return SelectLoad(Node, 3, AArch64::LD1Threev16b, AArch64::qsub0);
2500 return SelectLoad(Node, 3, AArch64::LD1Threev4h, AArch64::dsub0);
2502 return SelectLoad(Node, 3, AArch64::LD1Threev8h, AArch64::qsub0);
2504 return SelectLoad(Node, 3, AArch64::LD1Threev2s, AArch64::dsub0);
2506 return SelectLoad(Node, 3, AArch64::LD1Threev4s, AArch64::qsub0);
2508 return SelectLoad(Node, 3, AArch64::LD1Threev1d, AArch64::dsub0);
2510 return SelectLoad(Node, 3, AArch64::LD1Threev2d, AArch64::qsub0);
2514 return SelectLoad(Node, 4, AArch64::LD1Fourv8b, AArch64::dsub0);
2516 return SelectLoad(Node, 4, AArch64::LD1Fourv16b, AArch64::qsub0);
2518 return SelectLoad(Node, 4, AArch64::LD1Fourv4h, AArch64::dsub0);
2520 return SelectLoad(Node, 4, AArch64::LD1Fourv8h, AArch64::qsub0);
2522 return SelectLoad(Node, 4, AArch64::LD1Fourv2s, AArch64::dsub0);
2524 return SelectLoad(Node, 4, AArch64::LD1Fourv4s, AArch64::qsub0);
2526 return SelectLoad(Node, 4, AArch64::LD1Fourv1d, AArch64::dsub0);
2528 return SelectLoad(Node, 4, AArch64::LD1Fourv2d, AArch64::qsub0);
2532 return SelectLoad(Node, 2, AArch64::LD2Twov8b, AArch64::dsub0);
2534 return SelectLoad(Node, 2, AArch64::LD2Twov16b, AArch64::qsub0);
2536 return SelectLoad(Node, 2, AArch64::LD2Twov4h, AArch64::dsub0);
2538 return SelectLoad(Node, 2, AArch64::LD2Twov8h, AArch64::qsub0);
2540 return SelectLoad(Node, 2, AArch64::LD2Twov2s, AArch64::dsub0);
2542 return SelectLoad(Node, 2, AArch64::LD2Twov4s, AArch64::qsub0);
2544 return SelectLoad(Node, 2, AArch64::LD1Twov1d, AArch64::dsub0);
2546 return SelectLoad(Node, 2, AArch64::LD2Twov2d, AArch64::qsub0);
2550 return SelectLoad(Node, 3, AArch64::LD3Threev8b, AArch64::dsub0);
2552 return SelectLoad(Node, 3, AArch64::LD3Threev16b, AArch64::qsub0);
2554 return SelectLoad(Node, 3, AArch64::LD3Threev4h, AArch64::dsub0);
2556 return SelectLoad(Node, 3, AArch64::LD3Threev8h, AArch64::qsub0);
2558 return SelectLoad(Node, 3, AArch64::LD3Threev2s, AArch64::dsub0);
2560 return SelectLoad(Node, 3, AArch64::LD3Threev4s, AArch64::qsub0);
2562 return SelectLoad(Node, 3, AArch64::LD1Threev1d, AArch64::dsub0);
2564 return SelectLoad(Node, 3, AArch64::LD3Threev2d, AArch64::qsub0);
2568 return SelectLoad(Node, 4, AArch64::LD4Fourv8b, AArch64::dsub0);
2570 return SelectLoad(Node, 4, AArch64::LD4Fourv16b, AArch64::qsub0);
2572 return SelectLoad(Node, 4, AArch64::LD4Fourv4h, AArch64::dsub0);
2574 return SelectLoad(Node, 4, AArch64::LD4Fourv8h, AArch64::qsub0);
2576 return SelectLoad(Node, 4, AArch64::LD4Fourv2s, AArch64::dsub0);
2578 return SelectLoad(Node, 4, AArch64::LD4Fourv4s, AArch64
2580 return SelectLoad(Node, 4, AArch64::LD1Fourv1d, AArch64::dsub0);
2582 return SelectLoad(Node, 4, AArch64::LD4Fourv2d, AArch64::qsub0);
2586 return SelectLoad(Node, 2, AArch64::LD2Rv8b, AArch64::dsub0);
2588 return SelectLoad(Node, 2, AArch64::LD2Rv16b, AArch64::qsub0);
2590 return SelectLoad(Node, 2, AArch64::LD2Rv4h, AArch64::dsub0);
2592 return SelectLoad(Node, 2, AArch64::LD2Rv8h, AArch64::qsub0);
2594 return SelectLoad(Node, 2, AArch64::LD2Rv2s, AArch64::dsub0);
2596 return SelectLoad(Node, 2, AArch64::LD2Rv4s, AArch64::qsub0);
2598 return SelectLoad(Node, 2, AArch64::LD2Rv1d, AArch64::dsub0);
2600 return SelectLoad(Node, 2, AArch64::LD2Rv2d, AArch64::qsub0);
2604 return SelectLoad(Node, 3, AArch64::LD3Rv8b, AArch64::dsub0);
2606 return SelectLoad(Node, 3, AArch64::LD3Rv16b, AArch64::qsub0);
2608 return SelectLoad(Node, 3, AArch64::LD3Rv4h, AArch64::dsub0);
2610 return SelectLoad(Node, 3, AArch64::LD3Rv8h, AArch64::qsub0);
2612 return SelectLoad(Node, 3, AArch64::LD3Rv2s, AArch64::dsub0);
2614 return SelectLoad(Node, 3, AArch64::LD3Rv4s, AArch64::qsub0);
2616 return SelectLoad(Node, 3, AArch64::LD3Rv1d, AArch64::dsub0);
2618 return SelectLoad(Node, 3, AArch64::LD3Rv2d, AArch64::qsub0);
2622 return SelectLoad(Node, 4, AArch64::LD4Rv8b, AArch64::dsub0);
2624 return SelectLoad(Node, 4, AArch64::LD4Rv16b, AArch64::qsub0);
2626 return SelectLoad(Node, 4, AArch64::LD4Rv4h, AArch64::dsub0);
2628 return SelectLoad(Node, 4, AArch64::LD4Rv8h, AArch64::qsub0);
2630 return SelectLoad(Node, 4, AArch64::LD4Rv2s, AArch64::dsub0);
2632 return SelectLoad(Node, 4, AArch64::LD4Rv4s, AArch64::qsub0);
2634 return SelectLoad(Node, 4, AArch64::LD4Rv1d, AArch64::dsub0);
2636 return SelectLoad(Node, 4, AArch64::LD4Rv2d, AArch64::qsub0);
2640 return SelectLoadLane(Node, 2, AArch64::LD2i8);
2643 return SelectLoadLane(Node, 2, AArch64::LD2i16);
2646 return SelectLoadLane(Node, 2, AArch64::LD2i32);
2649 return SelectLoadLane(Node, 2, AArch64::LD2i64);
2653 return SelectLoadLane(Node, 3, AArch64::LD3i8);
2656 return SelectLoadLane(Node, 3, AArch64::LD3i16);
2659 return SelectLoadLane(Node, 3, AArch64::LD3i32);
2662 return SelectLoadLane(Node, 3, AArch64::LD3i64);
2666 return SelectLoadLane(Node, 4, AArch64::LD4i8);
2669 return SelectLoadLane(Node, 4, AArch64::LD4i16);
2672 return SelectLoadLane(Node, 4, AArch64::LD4i32);
2675 return SelectLoadLane(Node, 4, AArch64::LD4i64);
2685 return SelectTable(Node, 2, VT == MVT::v8i8 ? AArch64::TBLv8i8Two
2686 : AArch64::TBLv16i8Two,
2689 return SelectTable(Node, 3, VT == MVT::v8i8 ? AArch64::TBLv8i8Three
2690 : AArch64::TBLv16i8Three,
2693 return SelectTable(Node, 4, VT == MVT::v8i8 ? AArch64::TBLv8i8Four
2694 : AArch64::TBLv16i8Four,
2697 return SelectTable(Node, 2, VT == MVT::v8i8 ? AArch64::TBXv8i8Two
2698 : AArch64::TBXv16i8Two,
2701 return SelectTable(Node, 3, VT == MVT::v8i8 ? AArch64::TBXv8i8Three
2702 : AArch64::TBXv16i8Three,
2705 return SelectTable(Node, 4, VT == MVT::v8i8 ? AArch64::TBXv8i8Four
2706 : AArch64::TBXv16i8Four,
2725 return SelectStore(Node, 2, AArch64::ST1Twov8b);
2727 return SelectStore(Node, 2, AArch64::ST1Twov16b);
2729 return SelectStore(Node, 2, AArch64::ST1Twov4h);
2731 return SelectStore(Node, 2, AArch64::ST1Twov8h);
2733 return SelectStore(Node, 2, AArch64::ST1Twov2s);
2735 return SelectStore(Node, 2, AArch64::ST1Twov4s);
2737 return SelectStore(Node, 2, AArch64::ST1Twov2d);
2739 return SelectStore(Node, 2, AArch64::ST1Twov1d);
2744 return SelectStore(Node, 3, AArch64::ST1Threev8b);
2746 return SelectStore(Node, 3, AArch64::ST1Threev16b);
2748 return SelectStore(Node, 3, AArch64::ST1Threev4h);
2750 return SelectStore(Node, 3, AArch64::ST1Threev8h);
2752 return SelectStore(Node, 3, AArch64::ST1Threev2s);
2754 return SelectStore(Node, 3, AArch64::ST1Threev4s);
2756 return SelectStore(Node, 3, AArch64::ST1Threev2d);
2758 return SelectStore(Node, 3, AArch64::ST1Threev1d);
2763 return SelectStore(Node, 4, AArch64::ST1Fourv8b);
2765 return SelectStore(Node, 4, AArch64::ST1Fourv16b);
2767 return SelectStore(Node, 4, AArch64::ST1Fourv4h);
2769 return SelectStore(Node, 4, AArch64::ST1Fourv8h);
2771 return SelectStore(Node, 4, AArch64::ST1Fourv2s);
2773 return SelectStore(Node, 4, AArch64::ST1Fourv4s);
2775 return SelectStore(Node, 4, AArch64::ST1Fourv2d);
2777 return SelectStore(Node, 4, AArch64::ST1Fourv1d);
2782 return SelectStore(Node, 2, AArch64::ST2Twov8b);
2784 return SelectStore(Node, 2, AArch64::ST2Twov16b);
2786 return SelectStore(Node, 2, AArch64::ST2Twov4h);
2788 return SelectStore(Node, 2, AArch64::ST2Twov8h);
2790 return SelectStore(Node, 2, AArch64::ST2Twov2s);
2792 return SelectStore(Node, 2, AArch64::ST2Twov4s);
2794 return SelectStore(Node, 2, AArch64::ST2Twov2d);
2796 return SelectStore(Node, 2, AArch64::ST1Twov1d);
2801 return SelectStore(Node, 3, AArch64::ST3Threev8b);
2803 return SelectStore(Node, 3, AArch64::ST3Threev16b);
2805 return SelectStore(Node, 3, AArch64::ST3Threev4h);
2807 return SelectStore(Node, 3, AArch64::ST3Threev8h);
2809 return SelectStore(Node, 3, AArch64::ST3Threev2s);
2811 return SelectStore(Node, 3, AArch64::ST3Threev4s);
2813 return SelectStore(Node, 3, AArch64::ST3Threev2d);
2815 return SelectStore(Node, 3, AArch64::ST1Threev1d);
2820 return SelectStore(Node, 4, AArch64::ST4Fourv8b);
2822 return SelectStore(Node, 4, AArch64::ST4Fourv16b);
2824 return SelectStore(Node, 4, AArch64::ST4Fourv4h);
2826 return SelectStore(Node, 4, AArch64::ST4Fourv8h);
2828 return SelectStore(Node, 4, AArch64::ST4Fourv2s);
2830 return SelectStore(Node, 4, AArch64::ST4Fourv4s);
2832 return SelectStore(Node, 4, AArch64::ST4Fourv2d);
2834 return SelectStore(Node, 4, AArch64::ST1Fourv1d);
2839 return SelectStoreLane(Node, 2, AArch64::ST2i8);
2842 return SelectStoreLane(Node, 2, AArch64::ST2i16);
2845 return SelectStoreLane(Node, 2, AArch64::ST2i32);
2848 return SelectStoreLane(Node, 2, AArch64::ST2i64);
2853 return SelectStoreLane(Node, 3, AArch64::ST3i8);
2856 return SelectStoreLane(Node, 3, AArch64::ST3i16);
2859 return SelectStoreLane(Node, 3, AArch64::ST3i32);
2862 return SelectStoreLane(Node, 3, AArch64::ST3i64);
2867 return SelectStoreLane(Node, 4, AArch64::ST4i8);
2870 return SelectStoreLane(Node, 4, AArch64::ST4i16);
2873 return SelectStoreLane(Node, 4, AArch64::ST4i32);
2876 return SelectStoreLane(Node, 4, AArch64::ST4i64);
2884 return SelectPostLoad(Node, 2, AArch64::LD2Twov8b_POST, AArch64::dsub0);
2886 return SelectPostLoad(Node, 2, AArch64::LD2Twov16b_POST, AArch64::qsub0);
2888 return SelectPostLoad(Node, 2, AArch64::LD2Twov4h_POST, AArch64::dsub0);
2890 return SelectPostLoad(Node, 2, AArch64::LD2Twov8h_POST, AArch64::qsub0);
2892 return SelectPostLoad(Node, 2, AArch64::LD2Twov2s_POST, AArch64::dsub0);
2894 return SelectPostLoad(Node, 2, AArch64::LD2Twov4s_POST, AArch64::qsub0);
2896 return SelectPostLoad(Node, 2, AArch64::LD1Twov1d_POST, AArch64::dsub0);
2898 return SelectPostLoad(Node, 2, AArch64::LD2Twov2d_POST, AArch64::qsub0);
2903 return SelectPostLoad(Node, 3, AArch64::LD3Threev8b_POST, AArch64::dsub0);
2905 return SelectPostLoad(Node, 3, AArch64::LD3Threev16b_POST, AArch64::qsub0);
2907 return SelectPostLoad(Node, 3, AArch64::LD3Threev4h_POST, AArch64::dsub0);
2909 return SelectPostLoad(Node, 3, AArch64::LD3Threev8h_POST, AArch64::qsub0);
2911 return SelectPostLoad(Node, 3, AArch64::LD3Threev2s_POST, AArch64::dsub0);
2913 return SelectPostLoad(Node, 3, AArch64::LD3Threev4s_POST, AArch64::qsub0);
2915 return SelectPostLoad(Node, 3, AArch64::LD1Threev1d_POST, AArch64::dsub0);
2917 return SelectPostLoad(Node, 3, AArch64::LD3Threev2d_POST, AArch64::qsub0);
2922 return SelectPostLoad(Node, 4, AArch64::LD4Fourv8b_POST, AArch64::dsub0);
2924 return SelectPostLoad(Node, 4, AArch64::LD4Fourv16b_POST, AArch64::qsub0);
2926 return SelectPostLoad(Node, 4, AArch64::LD4Fourv4h_POST, AArch64::dsub0);
2928 return SelectPostLoad(Node, 4, AArch64::LD4Fourv8h_POST, AArch64::qsub0);
2930 return SelectPostLoad(Node, 4, AArch64::LD4Fourv2s_POST, AArch64::dsub0);
2932 return SelectPostLoad(Node, 4, AArch64::LD4Fourv4s_POST, AArch64::qsub0);
2934 return SelectPostLoad(Node, 4, AArch64::LD1Fourv1d_POST, AArch64::dsub0);
2936 return SelectPostLoad(Node, 4, AArch64::LD4Fourv2d_POST, AArch64::qsub0);
2941 return SelectPostLoad(Node, 2, AArch64::LD1Twov8b_POST, AArch64::dsub0);
2943 return SelectPostLoad(Node, 2, AArch64::LD1Twov16b_POST, AArch64::qsub0);
2945 return SelectPostLoad(Node, 2, AArch64::LD1Twov4h_POST, AArch64::dsub0);
2947 return SelectPostLoad(Node, 2, AArch64::LD1Twov8h_POST, AArch64::qsub0);
2949 return SelectPostLoad(Node, 2, AArch64::LD1Twov2s_POST, AArch64::dsub0);
2951 return SelectPostLoad(Node, 2, AArch64::LD1Twov4s_POST, AArch64::qsub0);
2953 return SelectPostLoad(Node, 2, AArch64::LD1Twov1d_POST, AArch64::dsub0);
2955 return SelectPostLoad(Node, 2, AArch64::LD1Twov2d_POST, AArch64::qsub0);
2960 return SelectPostLoad(Node, 3, AArch64::LD1Threev8b_POST, AArch64::dsub0);
2962 return SelectPostLoad(Node, 3, AArch64::LD1Threev16b_POST, AArch64::qsub0);
2964 return SelectPostLoad(Node, 3, AArch64::LD1Threev4h_POST, AArch64::dsub0);
2966 return SelectPostLoad(Node, 3, AArch64::LD1Threev8h_POST, AArch64::qsub0);
2968 return SelectPostLoad(Node, 3, AArch64::LD1Threev2s_POST, AArch64::dsub0);
2970 return SelectPostLoad(Node, 3, AArch64::LD1Threev4s_POST, AArch64::qsub0);
2972 return SelectPostLoad(Node, 3, AArch64::LD1Threev1d_POST, AArch64::dsub0);
2974 return SelectPostLoad(Node, 3, AArch64::LD1Threev2d_POST, AArch64::qsub0);
2979 return SelectPostLoad(Node, 4, AArch64::LD1Fourv8b_POST, AArch64::dsub0);
2981 return SelectPostLoad(Node, 4, AArch64::LD1Fourv16b_POST, AArch64::qsub0);
2983 return SelectPostLoad(Node, 4, AArch64::LD1Fourv4h_POST, AArch64::dsub0);
2985 return SelectPostLoad(Node, 4, AArch64::LD1Fourv8h_POST, AArch64::qsub0);
2987 return SelectPostLoad(Node, 4, AArch64::LD1Fourv2s_POST, AArch64::dsub0);
2989 return SelectPostLoad(Node, 4, AArch64::LD1Fourv4s_POST, AArch64::qsub0);
2991 return SelectPostLoad(Node, 4, AArch64::LD1Fourv1d_POST, AArch64::dsub0);
2993 return SelectPostLoad(Node, 4, AArch64::LD1Fourv2d_POST, AArch64::qsub0);
2998 return SelectPostLoad(Node, 1, AArch64::LD1Rv8b_POST, AArch64::dsub0);
3000 return SelectPostLoad(Node, 1, AArch64::LD1Rv16b_POST, AArch64::qsub0);
3002 return SelectPostLoad(Node, 1, AArch64::LD1Rv4h_POST, AArch64::dsub0);
3004 return SelectPostLoad(Node, 1, AArch64::LD1Rv8h_POST, AArch64::qsub0);
3006 return SelectPostLoad(Node, 1, AArch64::LD1Rv2s_POST, AArch64::dsub0);
3008 return SelectPostLoad(Node, 1, AArch64::LD1Rv4s_POST, AArch64::qsub0);
3010 return SelectPostLoad(Node, 1, AArch64::LD1Rv1d_POST, AArch64::dsub0);
3012 return SelectPostLoad(Node, 1, AArch64::LD1Rv2d_POST, AArch64::qsub0);
3017 return SelectPostLoad(Node, 2, AArch64::LD2Rv8b_POST, AArch64::dsub0);
3019 return SelectPostLoad(Node, 2, AArch64::LD2Rv16b_POST, AArch64::qsub0);
3021 return SelectPostLoad(Node, 2, AArch64::LD2Rv4h_POST, AArch64::dsub0);
3023 return SelectPostLoad(Node, 2, AArch64::LD2Rv8h_POST, AArch64::qsub0);
3025 return SelectPostLoad(Node, 2, AArch64::LD2Rv2s_POST, AArch64::dsub0);
3027 return SelectPostLoad(Node, 2, AArch64::LD2Rv4s_POST, AArch64::qsub0);
3029 return SelectPostLoad(Node, 2, AArch64::LD2Rv1d_POST, AArch64::dsub0);
3031 return SelectPostLoad(Node, 2, AArch64::LD2Rv2d_POST, AArch64::qsub0);
3036 return SelectPostLoad(Node, 3, AArch64::LD3Rv8b_POST, AArch64::dsub0);
3038 return SelectPostLoad(Node, 3, AArch64::LD3Rv16b_POST, AArch64::qsub0);
3040 return SelectPostLoad(Node, 3, AArch64::LD3Rv4h_POST, AArch64::dsub0);
3042 return SelectPostLoad(Node, 3, AArch64::LD3Rv8h_POST, AArch64::qsub0);
3044 return SelectPostLoad(Node, 3, AArch64::LD3Rv2s_POST, AArch64::dsub0);
3046 return SelectPostLoad(Node, 3, AArch64::LD3Rv4s_POST, AArch64::qsub0);
3048 return SelectPostLoad(Node, 3, AArch64::LD3Rv1d_POST, AArch64::dsub0);
3050 return SelectPostLoad(Node, 3, AArch64::LD3Rv2d_POST, AArch64::qsub0);
3055 return SelectPostLoad(Node, 4, AArch64::LD4Rv8b_POST, AArch64::dsub0);
3057 return SelectPostLoad(Node, 4, AArch64::LD4Rv16b_POST, AArch64::qsub0);
3059 return SelectPostLoad(Node, 4, AArch64::LD4Rv4h_POST, AArch64::dsub0);
3061 return SelectPostLoad(Node, 4, AArch64::LD4Rv8h_POST, AArch64::qsub0);
3063 return SelectPostLoad(Node, 4, AArch64::LD4Rv2s_POST, AArch64::dsub0);
3065 return SelectPostLoad(Node, 4, AArch64::LD4Rv4s_POST, AArch64::qsub0);
3067 return SelectPostLoad(Node, 4, AArch64::LD4Rv1d_POST, AArch64::dsub0);
3069 return SelectPostLoad(Node, 4, AArch64::LD4Rv2d_POST, AArch64::qsub0);
3074 return SelectPostLoadLane(Node, 1, AArch64::LD1i8_POST);
3077 return SelectPostLoadLane(Node, 1, AArch64::LD1i16_POST);
3080 return SelectPostLoadLane(Node, 1, AArch64::LD1i32_POST);
3083 return SelectPostLoadLane(Node, 1, AArch64::LD1i64_POST);
3088 return SelectPostLoadLane(Node, 2, AArch64::LD2i8_POST);
3091 return SelectPostLoadLane(Node, 2, AArch64::LD2i16_POST);
3094 return SelectPostLoadLane(Node, 2, AArch64::LD2i32_POST);
3097 return SelectPostLoadLane(Node, 2, AArch64::LD2i64_POST);
3102 return SelectPostLoadLane(Node, 3, AArch64::LD3i8_POST);
3105 return SelectPostLoadLane(Node, 3, AArch64::LD3i16_POST);
3108 return SelectPostLoadLane(Node, 3, AArch64::LD3i32_POST);
3111 return SelectPostLoadLane(Node, 3, AArch64::LD3i64_POST);
3116 return SelectPostLoadLane(Node, 4, AArch64::LD4i8_POST);
3119 return SelectPostLoadLane(Node, 4, AArch64::LD4i16_POST);
3122 return SelectPostLoadLane(Node, 4, AArch64::LD4i32_POST);
3125 return SelectPostLoadLane(Node, 4, AArch64::LD4i64_POST);
3131 return SelectPostStore(Node, 2, AArch64::ST2Twov8b_POST);
3133 return SelectPostStore(Node, 2, AArch64::ST2Twov16b_POST);
3135 return SelectPostStore(Node, 2, AArch64::ST2Twov4h_POST);
3137 return SelectPostStore(Node, 2, AArch64::ST2Twov8h_POST);
3139 return SelectPostStore(Node, 2, AArch64::ST2Twov2s_POST);
3141 return SelectPostStore(Node, 2, AArch64::ST2Twov4s_POST);
3143 return SelectPostStore(Node, 2, AArch64::ST2Twov2d_POST);
3145 return SelectPostStore(Node, 2, AArch64::ST1Twov1d_POST);
3151 return SelectPostStore(Node, 3, AArch64::ST3Threev8b_POST);
3153 return SelectPostStore(Node, 3, AArch64::ST3Threev16b_POST);
3155 return SelectPostStore(Node, 3, AArch64::ST3Threev4h_POST);
3157 return SelectPostStore(Node, 3, AArch64::ST3Threev8h_POST);
3159 return SelectPostStore(Node, 3, AArch64::ST3Threev2s_POST);
3161 return SelectPostStore(Node, 3, AArch64::ST3Threev4s_POST);
3163 return SelectPostStore(Node, 3, AArch64::ST3Threev2d_POST);
3165 return SelectPostStore(Node, 3, AArch64::ST1Threev1d_POST);
3171 return SelectPostStore(Node, 4, AArch64::ST4Fourv8b_POST);
3173 return SelectPostStore(Node, 4, AArch64::ST4Fourv16b_POST);
3175 return SelectPostStore(Node, 4, AArch64::ST4Fourv4h_POST);
3177 return SelectPostStore(Node, 4, AArch64::ST4Fourv8h_POST);
3179 return SelectPostStore(Node, 4, AArch64::ST4Fourv2s_POST);
3181 return SelectPostStore(Node, 4, AArch64::ST4Fourv4s_POST);
3183 return SelectPostStore(Node, 4, AArch64::ST4Fourv2d_POST);
3185 return SelectPostStore(Node, 4, AArch64::ST1Fourv1d_POST);
3191 return SelectPostStore(Node, 2, AArch64::ST1Twov8b_POST);
3193 return SelectPostStore(Node, 2, AArch64::ST1Twov16b_POST);
3195 return SelectPostStore(Node, 2, AArch64::ST1Twov4h_POST);
3197 return SelectPostStore(Node, 2, AArch64::ST1Twov8h_POST);
3199 return SelectPostStore(Node, 2, AArch64::ST1Twov2s_POST);
3201 return SelectPostStore(Node, 2, AArch64::ST1Twov4s_POST);
3203 return SelectPostStore(Node, 2, AArch64::ST1Twov1d_POST);
3205 return SelectPostStore(Node, 2, AArch64::ST1Twov2d_POST);
3211 return SelectPostStore(Node, 3, AArch64::ST1Threev8b_POST);
3213 return SelectPostStore(Node, 3, AArch64::ST1Threev16b_POST);
3215 return SelectPostStore(Node, 3, AArch64::ST1Threev4h_POST);
3217 return SelectPostStore(Node, 3, AArch64::ST1Threev8h_POST);
3219 return SelectPostStore(Node, 3, AArch64::ST1Threev2s_POST);
3221 return SelectPostStore(Node, 3, AArch64::ST1Threev4s_POST);
3223 return SelectPostStore(Node, 3, AArch64::ST1Threev1d_POST);
3225 return SelectPostStore(Node, 3, AArch64::ST1Threev2d_POST);
3231 return SelectPostStore(Node, 4, AArch64::ST1Fourv8b_POST);
3233 return SelectPostStore(Node, 4, AArch64::ST1Fourv16b_POST);
3235 return SelectPostStore(Node, 4, AArch64::ST1Fourv4h_POST);
3237 return SelectPostStore(Node, 4, AArch64::ST1Fourv8h_POST);
3239 return SelectPostStore(Node, 4, AArch64::ST1Fourv2s_POST);
3241 return SelectPostStore(Node, 4, AArch64::ST1Fourv4s_POST);
3243 return SelectPostStore(Node, 4, AArch64::ST1Fourv1d_POST);
3245 return SelectPostStore(Node, 4, AArch64::ST1Fourv2d_POST);
3251 return SelectPostStoreLane(Node, 2, AArch64::ST2i8_POST);
3254 return SelectPostStoreLane(Node, 2, AArch64::ST2i16_POST);
3257 return SelectPostStoreLane(Node, 2, AArch64::ST2i32_POST);
3260 return SelectPostStoreLane(Node, 2, AArch64::ST2i64_POST);
3266 return SelectPostStoreLane(Node, 3, AArch64::ST3i8_POST);
3269 return SelectPostStoreLane(Node, 3, AArch64::ST3i16_POST);
3272 return SelectPostStoreLane(Node, 3, AArch64::ST3i32_POST);
3275 return SelectPostStoreLane(Node, 3, AArch64::ST3i64_POST);
3281 return SelectPostStoreLane(Node, 4, AArch64::ST4i8_POST);
3284 return SelectPostStoreLane(Node, 4, AArch64::ST4i16_POST);
3287 return SelectPostStoreLane(Node, 4, AArch64::ST4i32_POST);
3290 return SelectPostStoreLane(Node, 4, AArch64::ST4i64_POST);
3309 /// AArch64-specific DAG, ready for instruction scheduling.