@@ -1044,6 +1044,19 @@ def AArch64mrs : SDNode<"AArch64ISD::MRS",
10441044 SDTCisVT<2, i32>]>,
10451045 [SDNPHasChain]>;
10461046
1047+ // 128-bit system register accesses
1048+ // lo64, hi64, chain = MRRS(chain, sysregname)
1049+ def AArch64mrrs : SDNode<"AArch64ISD::MRRS",
1050+ SDTypeProfile<2, 1, [SDTCisVT<0, i64>,
1051+ SDTCisVT<1, i64>]>,
1052+ [SDNPHasChain]>;
1053+
1054+ // chain = MSRR(chain, sysregname, lo64, hi64)
1055+ def AArch64msrr : SDNode<"AArch64ISD::MSRR",
1056+ SDTypeProfile<0, 3, [SDTCisVT<1, i64>,
1057+ SDTCisVT<2, i64>]>,
1058+ [SDNPHasChain]>;
1059+
10471060def SD_AArch64rshrnb : SDTypeProfile<1, 2, [SDTCisVec<0>, SDTCisVec<1>, SDTCisInt<2>]>;
10481061def AArch64rshrnb : SDNode<"AArch64ISD::RSHRNB_I", SD_AArch64rshrnb>;
10491062def AArch64rshrnb_pf : PatFrags<(ops node:$rs, node:$i),
@@ -1053,6 +1066,66 @@ def AArch64rshrnb_pf : PatFrags<(ops node:$rs, node:$i),
10531066def AArch64CttzElts : SDNode<"AArch64ISD::CTTZ_ELTS", SDTypeProfile<1, 1,
10541067 [SDTCisInt<0>, SDTCisVec<1>]>, []>;
10551068
1069+ def AArch64ld2post : SDNode<"AArch64ISD::LD2post", SDTypeProfile<3, 2, []>, [
1070+ SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;
1071+ def AArch64ld3post : SDNode<"AArch64ISD::LD3post", SDTypeProfile<4, 2, []>, [
1072+ SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;
1073+ def AArch64ld4post : SDNode<"AArch64ISD::LD4post", SDTypeProfile<5, 2, []>, [
1074+ SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;
1075+ def AArch64st2post : SDNode<"AArch64ISD::ST2post", SDTypeProfile<1, 4, []>, [
1076+ SDNPHasChain, SDNPMayStore, SDNPMemOperand]>;
1077+ def AArch64st3post : SDNode<"AArch64ISD::ST3post", SDTypeProfile<1, 5, []>, [
1078+ SDNPHasChain, SDNPMayStore, SDNPMemOperand]>;
1079+ def AArch64st4post : SDNode<"AArch64ISD::ST4post", SDTypeProfile<1, 6, []>, [
1080+ SDNPHasChain, SDNPMayStore, SDNPMemOperand]>;
1081+ def AArch64ld1x2post : SDNode<"AArch64ISD::LD1x2post", SDTypeProfile<3, 2, []>, [
1082+ SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;
1083+ def AArch64ld1x3post : SDNode<"AArch64ISD::LD1x3post", SDTypeProfile<4, 2, []>, [
1084+ SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;
1085+ def AArch64ld1x4post : SDNode<"AArch64ISD::LD1x4post", SDTypeProfile<5, 2, []>, [
1086+ SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;
1087+ def AArch64st1x2post : SDNode<"AArch64ISD::ST1x2post", SDTypeProfile<1, 4, []>, [
1088+ SDNPHasChain, SDNPMayStore, SDNPMemOperand]>;
1089+ def AArch64st1x3post : SDNode<"AArch64ISD::ST1x3post", SDTypeProfile<1, 5, []>, [
1090+ SDNPHasChain, SDNPMayStore, SDNPMemOperand]>;
1091+ def AArch64st1x4post : SDNode<"AArch64ISD::ST1x4post", SDTypeProfile<1, 6, []>, [
1092+ SDNPHasChain, SDNPMayStore, SDNPMemOperand]>;
1093+ def AArch64ld1duppost : SDNode<"AArch64ISD::LD1DUPpost", SDTypeProfile<2, 2, []>, [
1094+ SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;
1095+ def AArch64ld2duppost : SDNode<"AArch64ISD::LD2DUPpost", SDTypeProfile<3, 2, []>, [
1096+ SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;
1097+ def AArch64ld3duppost: SDNode<"AArch64ISD::LD3DUPpost", SDTypeProfile<4, 2, []>, [
1098+ SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;
1099+ def AArch64ld4duppost: SDNode<"AArch64ISD::LD4DUPpost", SDTypeProfile<5, 2, []>, [
1100+ SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;
1101+ def AArch64ld1lanepost: SDNode<"AArch64ISD::LD1LANEpost", SDTypeProfile<2, 4, []>, [
1102+ SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;
1103+ def AArch64ld2lanepost : SDNode<"AArch64ISD::LD2LANEpost", SDTypeProfile<3, 5, []>, [
1104+ SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;
1105+ def AArch64ld3lanepost: SDNode<"AArch64ISD::LD3LANEpost", SDTypeProfile<4, 6, []>, [
1106+ SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;
1107+ def AArch64ld4lanepost: SDNode<"AArch64ISD::LD4LANEpost", SDTypeProfile<5, 7, []>, [
1108+ SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;
1109+ def AArch64st2lanepost : SDNode<"AArch64ISD::ST2LANEpost", SDTypeProfile<1, 5, []>, [
1110+ SDNPHasChain, SDNPMayStore, SDNPMemOperand]>;
1111+ def AArch64st3lanepost : SDNode<"AArch64ISD::ST3LANEpost", SDTypeProfile<1, 6, []>, [
1112+ SDNPHasChain, SDNPMayStore, SDNPMemOperand]>;
1113+ def AArch64st4lanepost : SDNode<"AArch64ISD::ST4LANEpost", SDTypeProfile<1, 7, []>, [
1114+ SDNPHasChain, SDNPMayStore, SDNPMemOperand]>;
1115+
1116+ // Scatter store
1117+ def AArch64sstnt1_index_pred: SDNode<"AArch64ISD::SSTNT1_INDEX_PRED", SDTypeProfile<0, 5, []>, [
1118+ SDNPHasChain, SDNPMayStore, SDNPMemOperand]>;
1119+ // Non-temporal scatter store
1120+ def AArch64sst1q_index_pred: SDNode<"AArch64ISD::SST1Q_INDEX_PRED", SDTypeProfile<0, 5, []>, [
1121+ SDNPHasChain, SDNPMayStore, SDNPMemOperand]>;
1122+ // Non-temporal gather loads
1123+ def AArch64gldnt1_index_merge_zero: SDNode<"AArch64ISD::GLDNT1_INDEX_MERGE_ZERO", SDTypeProfile<1, 4, []>, [
1124+ SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;
1125+ // Unsigned gather loads.
1126+ def AArch64gld1q_index_merge_zero: SDNode<"AArch64ISD::GLD1Q_INDEX_MERGE_ZERO", SDTypeProfile<1, 4, []>, [
1127+ SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;
1128+
10561129// Match add node and also treat an 'or' node is as an 'add' if the or'ed operands
10571130// have no common bits.
10581131def add_and_or_is_add : PatFrags<(ops node:$lhs, node:$rhs),
@@ -5701,14 +5774,14 @@ def : Pat<(v2i64 (bswap (v2i64 V128:$Rn))),
57015774 (v2i64 (REV64v16i8 (v2i64 V128:$Rn)))>;
57025775
57035776// Patterns for funnel shifts to be matched to equivalent REV instructions
5704- def : Pat<(v2i64 (or (v2i64 (AArch64vshl (v2i64 V128:$Rn), (i32 32))),
5705- (v2i64 (AArch64vlshr (v2i64 V128:$Rn), (i32 32))))),
5777+ def : Pat<(v2i64 (or (v2i64 (AArch64vshl (v2i64 V128:$Rn), (i32 32))),
5778+ (v2i64 (AArch64vlshr (v2i64 V128:$Rn), (i32 32))))),
57065779 (v2i64 (REV64v4i32 (v2i64 V128:$Rn)))>;
5707- def : Pat<(v4i32 (or (v4i32 (AArch64vshl (v4i32 V128:$Rn), (i32 16))),
5708- (v4i32 (AArch64vlshr (v4i32 V128:$Rn), (i32 16))))),
5780+ def : Pat<(v4i32 (or (v4i32 (AArch64vshl (v4i32 V128:$Rn), (i32 16))),
5781+ (v4i32 (AArch64vlshr (v4i32 V128:$Rn), (i32 16))))),
57095782 (v4i32 (REV32v8i16 (v4i32 V128:$Rn)))>;
5710- def : Pat<(v2i32 (or (v2i32 (AArch64vshl (v2i32 V64:$Rn), (i32 16))),
5711- (v2i32 (AArch64vlshr (v2i32 V64:$Rn), (i32 16))))),
5783+ def : Pat<(v2i32 (or (v2i32 (AArch64vshl (v2i32 V64:$Rn), (i32 16))),
5784+ (v2i32 (AArch64vlshr (v2i32 V64:$Rn), (i32 16))))),
57125785 (v2i32 (REV32v4i16 (v2i32 V64:$Rn)))>;
57135786
57145787//===----------------------------------------------------------------------===//
0 commit comments