@@ -2624,6 +2624,25 @@ SDValue RISCVTargetLowering::computeVLMax(MVT VecVT, const SDLoc &DL,
2624
2624
VecVT.getVectorElementCount());
2625
2625
}
2626
2626
2627
+ std::pair<unsigned, unsigned>
2628
+ RISCVTargetLowering::computeVLMAXBounds(MVT VecVT,
2629
+ const RISCVSubtarget &Subtarget) {
2630
+ assert(VecVT.isScalableVector() && "Expected scalable vector");
2631
+
2632
+ unsigned EltSize = VecVT.getScalarSizeInBits();
2633
+ unsigned MinSize = VecVT.getSizeInBits().getKnownMinValue();
2634
+
2635
+ unsigned VectorBitsMax = Subtarget.getRealMaxVLen();
2636
+ unsigned MaxVLMAX =
2637
+ RISCVTargetLowering::computeVLMAX(VectorBitsMax, EltSize, MinSize);
2638
+
2639
+ unsigned VectorBitsMin = Subtarget.getRealMinVLen();
2640
+ unsigned MinVLMAX =
2641
+ RISCVTargetLowering::computeVLMAX(VectorBitsMin, EltSize, MinSize);
2642
+
2643
+ return std::make_pair(MinVLMAX, MaxVLMAX);
2644
+ }
2645
+
2627
2646
// The state of RVV BUILD_VECTOR and VECTOR_SHUFFLE lowering is that very few
2628
2647
// of either is (currently) supported. This can get us into an infinite loop
2629
2648
// where we try to lower a BUILD_VECTOR as a VECTOR_SHUFFLE as a BUILD_VECTOR
@@ -8123,16 +8142,8 @@ static SDValue lowerVectorIntrinsicScalars(SDValue Op, SelectionDAG &DAG,
8123
8142
8124
8143
// Optimize for constant AVL
8125
8144
if (isa<ConstantSDNode>(AVL)) {
8126
- unsigned EltSize = VT.getScalarSizeInBits();
8127
- unsigned MinSize = VT.getSizeInBits().getKnownMinValue();
8128
-
8129
- unsigned VectorBitsMax = Subtarget.getRealMaxVLen();
8130
- unsigned MaxVLMAX =
8131
- RISCVTargetLowering::computeVLMAX(VectorBitsMax, EltSize, MinSize);
8132
-
8133
- unsigned VectorBitsMin = Subtarget.getRealMinVLen();
8134
- unsigned MinVLMAX =
8135
- RISCVTargetLowering::computeVLMAX(VectorBitsMin, EltSize, MinSize);
8145
+ const auto [MinVLMAX, MaxVLMAX] =
8146
+ RISCVTargetLowering::computeVLMAXBounds(VT, Subtarget);
8136
8147
8137
8148
uint64_t AVLInt = cast<ConstantSDNode>(AVL)->getZExtValue();
8138
8149
if (AVLInt <= MinVLMAX) {
0 commit comments