@@ -404,8 +404,7 @@ class AArch64DAGToDAGISel : public SelectionDAGISel {
404
404
return SelectSVERegRegAddrMode (N, Scale, Base, Offset);
405
405
}
406
406
407
- template <int64_t Max>
408
- void SelectMultiVectorLuti (SDNode *Node, unsigned NumOutVecs, unsigned Opc);
407
+ void SelectMultiVectorLuti (SDNode *Node, unsigned NumOutVecs, unsigned Opc, uint32_t MaxImm);
409
408
410
409
template <unsigned MaxIdx, unsigned Scale>
411
410
bool SelectSMETileSlice (SDValue N, SDValue &Vector, SDValue &Offset) {
@@ -1867,12 +1866,12 @@ void AArch64DAGToDAGISel::SelectFrintFromVT(SDNode *N, unsigned NumVecs,
1867
1866
SelectUnaryMultiIntrinsic (N, NumVecs, true , Opcode);
1868
1867
}
1869
1868
1870
- template <int64_t Max>
1871
1869
void AArch64DAGToDAGISel::SelectMultiVectorLuti (SDNode *Node,
1872
1870
unsigned NumOutVecs,
1873
- unsigned Opc) {
1871
+ unsigned Opc,
1872
+ uint32_t MaxImm) {
1874
1873
if (ConstantSDNode *Imm = dyn_cast<ConstantSDNode>(Node->getOperand (4 )))
1875
- if (Imm->getZExtValue () > Max )
1874
+ if (Imm->getZExtValue () > MaxImm )
1876
1875
return ;
1877
1876
1878
1877
SDValue ZtValue;
@@ -5109,15 +5108,15 @@ void AArch64DAGToDAGISel::Select(SDNode *Node) {
5109
5108
{AArch64::LUTI2_4ZTZI_B, AArch64::LUTI2_4ZTZI_H,
5110
5109
AArch64::LUTI2_4ZTZI_S}))
5111
5110
// Second Immediate must be <= 3:
5112
- SelectMultiVectorLuti< 3 > (Node, 4 , Opc);
5111
+ SelectMultiVectorLuti (Node, 4 , Opc, 3 );
5113
5112
return ;
5114
5113
}
5115
5114
case Intrinsic::aarch64_sme_luti4_lane_zt_x4: {
5116
5115
if (auto Opc = SelectOpcodeFromVT<SelectTypeKind::AnyType>(
5117
5116
Node->getValueType (0 ),
5118
5117
{0 , AArch64::LUTI4_4ZTZI_H, AArch64::LUTI4_4ZTZI_S}))
5119
5118
// Second Immediate must be <= 1:
5120
- SelectMultiVectorLuti< 1 > (Node, 4 , Opc);
5119
+ SelectMultiVectorLuti (Node, 4 , Opc, 1 );
5121
5120
return ;
5122
5121
}
5123
5122
}
0 commit comments