@@ -94,8 +94,8 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
94
94
getActionDefinitionsBuilder (
95
95
{G_IMPLICIT_DEF, G_FREEZE, G_CONSTANT_FOLD_BARRIER})
96
96
.legalFor ({p0, s8, s16, s32, s64})
97
- .legalFor ({v16s8, v8s16, v4s32, v2s64, v2p0, v8s8, v4s16 , v2s32, v4s8 ,
98
- v2s16, v2s8 })
97
+ .legalFor ({v2s8, v4s8, v8s8, v16s8, v2s16, v4s16, v8s16 , v2s32, v4s32 ,
98
+ v2s64, v2p0 })
99
99
.widenScalarToNextPow2 (0 )
100
100
.clampScalar (0 , s8, s64)
101
101
.moreElementsToNextPow2 (0 )
@@ -130,7 +130,7 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
130
130
.moreElementsToNextPow2 (0 );
131
131
132
132
getActionDefinitionsBuilder ({G_ADD, G_SUB, G_AND, G_OR, G_XOR})
133
- .legalFor ({s32, s64, v2s32, v2s64, v4s32, v4s16, v8s16, v16s8, v8s8 })
133
+ .legalFor ({s32, s64, v8s8, v16s8, v4s16, v8s16, v2s32, v4s32, v2s64 })
134
134
.legalFor (HasSVE, {nxv16s8, nxv8s16, nxv4s32, nxv2s64})
135
135
.widenScalarToNextPow2 (0 )
136
136
.clampScalar (0 , s32, s64)
@@ -157,7 +157,7 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
157
157
.moreElementsToNextPow2 (0 );
158
158
159
159
getActionDefinitionsBuilder (G_MUL)
160
- .legalFor ({s32, s64, v2s32, v2s64, v4s32, v4s16, v8s16, v16s8, v8s8 })
160
+ .legalFor ({s32, s64, v8s8, v16s8, v4s16, v8s16, v2s32, v4s32, v2s64 })
161
161
.widenScalarToNextPow2 (0 )
162
162
.clampScalar (0 , s32, s64)
163
163
.clampMaxNumElements (0 , s8, 16 )
@@ -227,7 +227,7 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
227
227
.scalarize (0 );
228
228
229
229
getActionDefinitionsBuilder ({G_SREM, G_UREM, G_SDIVREM, G_UDIVREM})
230
- .lowerFor ({s8, s16, s32, s64, v2s64 , v4s32, v2s32 })
230
+ .lowerFor ({s8, s16, s32, s64, v2s32 , v4s32, v2s64 })
231
231
.libcallFor ({s128})
232
232
.widenScalarOrEltToNextPow2 (0 )
233
233
.minScalarOrElt (0 , s32)
@@ -241,7 +241,7 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
241
241
.lower ();
242
242
243
243
getActionDefinitionsBuilder ({G_SMULH, G_UMULH})
244
- .legalFor ({s64, v8s16, v16s8 , v4s32})
244
+ .legalFor ({s64, v16s8, v8s16 , v4s32})
245
245
.lower ();
246
246
247
247
getActionDefinitionsBuilder ({G_SMIN, G_SMAX, G_UMIN, G_UMAX})
@@ -627,7 +627,7 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
627
627
};
628
628
getActionDefinitionsBuilder ({G_ZEXT, G_SEXT, G_ANYEXT})
629
629
.legalIf (ExtLegalFunc)
630
- .legalFor ({{v2s64, v2s32 }, {v4s32, v4s16}, {v8s16, v8s8 }})
630
+ .legalFor ({{v8s16, v8s8 }, {v4s32, v4s16}, {v2s64, v2s32 }})
631
631
.clampScalar (0 , s64, s64) // Just for s128, others are handled above.
632
632
.moreElementsToNextPow2 (0 )
633
633
.clampMaxNumElements (1 , s8, 8 )
@@ -645,7 +645,7 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
645
645
.clampMinNumElements (1 , s16, 4 );
646
646
647
647
getActionDefinitionsBuilder (G_TRUNC)
648
- .legalFor ({{v2s32, v2s64 }, {v4s16, v4s32}, {v8s8, v8s16 }})
648
+ .legalFor ({{v8s8, v8s16 }, {v4s16, v4s32}, {v2s32, v2s64 }})
649
649
.moreElementsToNextPow2 (0 )
650
650
.clampMaxNumElements (0 , s8, 8 )
651
651
.clampMaxNumElements (0 , s16, 4 )
@@ -696,9 +696,9 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
696
696
{s64, s32},
697
697
{s32, s64},
698
698
{s64, s64},
699
- {v2s64, v2s64 },
699
+ {v2s32, v2s32 },
700
700
{v4s32, v4s32},
701
- {v2s32, v2s32 }})
701
+ {v2s64, v2s64 }})
702
702
.legalFor (HasFP16,
703
703
{{s32, s16}, {s64, s16}, {v4s16, v4s16}, {v8s16, v8s16}})
704
704
.scalarizeIf (scalarOrEltWiderThan (0 , 64 ), 0 )
@@ -739,9 +739,9 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
739
739
{s64, s32},
740
740
{s32, s64},
741
741
{s64, s64},
742
- {v2s64, v2s64 },
742
+ {v2s32, v2s32 },
743
743
{v4s32, v4s32},
744
- {v2s32, v2s32 }})
744
+ {v2s64, v2s64 }})
745
745
.legalFor (HasFP16,
746
746
{{s32, s16}, {s64, s16}, {v4s16, v4s16}, {v8s16, v8s16}})
747
747
// Handle types larger than i64 by scalarizing/lowering.
@@ -783,9 +783,9 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
783
783
{s64, s32},
784
784
{s32, s64},
785
785
{s64, s64},
786
- {v2s64, v2s64 },
786
+ {v2s32, v2s32 },
787
787
{v4s32, v4s32},
788
- {v2s32, v2s32 }})
788
+ {v2s64, v2s64 }})
789
789
.legalFor (HasFP16,
790
790
{{s16, s32}, {s16, s64}, {v4s16, v4s16}, {v8s16, v8s16}})
791
791
.scalarizeIf (scalarOrEltWiderThan (1 , 64 ), 1 )
@@ -964,9 +964,9 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
964
964
.minScalar (2 , s64)
965
965
.customIf ([=](const LegalityQuery &Query) {
966
966
const LLT &VecTy = Query.Types [1 ];
967
- return VecTy == v2s16 || VecTy == v4s16 || VecTy == v8s16 ||
968
- VecTy == v4s32 || VecTy == v2s64 || VecTy == v2s32 ||
969
- VecTy == v8s8 || VecTy == v16s8 || VecTy == v2p0;
967
+ return VecTy == v8s8 || VecTy == v16s8 || VecTy == v2s16 ||
968
+ VecTy == v4s16 || VecTy == v8s16 || VecTy == v2s32 ||
969
+ VecTy == v4s32 || VecTy == v2s64 || VecTy == v2p0;
970
970
})
971
971
.minScalarOrEltIf (
972
972
[=](const LegalityQuery &Query) {
@@ -1004,7 +1004,7 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
1004
1004
1005
1005
getActionDefinitionsBuilder (G_INSERT_VECTOR_ELT)
1006
1006
.legalIf (
1007
- typeInSet (0 , {v16s8, v8s8, v8s16 , v4s16, v4s32 , v2s32, v2s64, v2p0}))
1007
+ typeInSet (0 , {v8s8, v16s8 , v4s16, v8s16 , v2s32, v4s32 , v2s64, v2p0}))
1008
1008
.legalFor (HasSVE, {{nxv16s8, s32, s64},
1009
1009
{nxv8s16, s32, s64},
1010
1010
{nxv4s32, s32, s64},
@@ -1024,8 +1024,8 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
1024
1024
{v8s16, s16},
1025
1025
{v2s32, s32},
1026
1026
{v4s32, s32},
1027
- {v2p0, p0 },
1028
- {v2s64, s64 }})
1027
+ {v2s64, s64 },
1028
+ {v2p0, p0 }})
1029
1029
.clampNumElements (0 , v4s32, v4s32)
1030
1030
.clampNumElements (0 , v2s64, v2s64)
1031
1031
.minScalarOrElt (0 , s8)
@@ -1070,7 +1070,7 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
1070
1070
if (DstTy != SrcTy)
1071
1071
return false ;
1072
1072
return llvm::is_contained (
1073
- {v2s64, v2s32, v4s32, v4s16, v16s8, v8s8, v8s16 }, DstTy);
1073
+ {v8s8, v16s8, v4s16, v8s16, v2s32, v4s32, v2s64 }, DstTy);
1074
1074
})
1075
1075
// G_SHUFFLE_VECTOR can have scalar sources (from 1 x s vectors) or scalar
1076
1076
// destinations, we just want those lowered into G_BUILD_VECTOR or
@@ -1106,7 +1106,7 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
1106
1106
});
1107
1107
1108
1108
getActionDefinitionsBuilder (G_CONCAT_VECTORS)
1109
- .legalFor ({{v4s32, v2s32 }, {v8s16, v4s16}, {v16s8, v8s8 }})
1109
+ .legalFor ({{v16s8, v8s8 }, {v8s16, v4s16}, {v4s32, v2s32 }})
1110
1110
.bitcastIf (
1111
1111
[=](const LegalityQuery &Query) {
1112
1112
return Query.Types [0 ].getSizeInBits () <= 128 &&
@@ -1205,12 +1205,12 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
1205
1205
.lower ();
1206
1206
1207
1207
getActionDefinitionsBuilder (G_VECREDUCE_ADD)
1208
- .legalFor ({{s8, v16s8},
1209
- {s8, v8s8},
1210
- {s16, v8s16},
1208
+ .legalFor ({{s8, v8s8},
1209
+ {s8, v16s8},
1211
1210
{s16, v4s16},
1212
- {s32, v4s32 },
1211
+ {s16, v8s16 },
1213
1212
{s32, v2s32},
1213
+ {s32, v4s32},
1214
1214
{s64, v2s64}})
1215
1215
.moreElementsToNextPow2 (1 )
1216
1216
.clampMaxNumElements (1 , s64, 2 )
@@ -1222,7 +1222,7 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
1222
1222
1223
1223
getActionDefinitionsBuilder ({G_VECREDUCE_FMIN, G_VECREDUCE_FMAX,
1224
1224
G_VECREDUCE_FMINIMUM, G_VECREDUCE_FMAXIMUM})
1225
- .legalFor ({{s32, v4s32 }, {s32, v2s32 }, {s64, v2s64}})
1225
+ .legalFor ({{s32, v2s32 }, {s32, v4s32 }, {s64, v2s64}})
1226
1226
.legalFor (HasFP16, {{s16, v4s16}, {s16, v8s16}})
1227
1227
.minScalarOrElt (0 , MinFPScalar)
1228
1228
.clampMaxNumElements (1 , s64, 2 )
@@ -1305,19 +1305,19 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
1305
1305
.legalFor ({{v8s8, v8s8}, {v16s8, v16s8}})
1306
1306
.customFor (!HasCSSC, {{s32, s32}, {s64, s64}})
1307
1307
.customFor ({{s128, s128},
1308
- {v2s64, v2s64},
1309
1308
{v2s32, v2s32},
1310
1309
{v4s32, v4s32},
1311
1310
{v4s16, v4s16},
1312
- {v8s16, v8s16}})
1311
+ {v8s16, v8s16},
1312
+ {v2s64, v2s64}})
1313
1313
.clampScalar (0 , s32, s128)
1314
1314
.widenScalarToNextPow2 (0 )
1315
1315
.minScalarEltSameAsIf (always, 1 , 0 )
1316
1316
.maxScalarEltSameAsIf (always, 1 , 0 );
1317
1317
1318
1318
getActionDefinitionsBuilder ({G_UADDSAT, G_SADDSAT, G_USUBSAT, G_SSUBSAT})
1319
- .legalFor ({v2s64, v2s32, v4s32, v4s16, v8s16, v8s8, v16s8 })
1320
- .legalFor (HasSVE, {nxv2s64, nxv4s32, nxv8s16, nxv16s8 })
1319
+ .legalFor ({v8s8, v16s8, v4s16, v8s16, v2s32, v4s32, v2s64 })
1320
+ .legalFor (HasSVE, {nxv16s8, nxv8s16, nxv4s32, nxv2s64 })
1321
1321
.clampNumElements (0 , v8s8, v16s8)
1322
1322
.clampNumElements (0 , v4s16, v8s16)
1323
1323
.clampNumElements (0 , v2s32, v4s32)
0 commit comments