[llvm] [AArch64] Fix lowring error for masked load/store integer scalable ve… (PR #99354)

Sander de Smalen via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 19 06:54:21 PDT 2024


================
@@ -6912,32 +6911,40 @@ SDValue DAGTypeLegalizer::WidenVecOp_MSTORE(SDNode *N, unsigned OpNo) {
   SDValue Mask = MST->getMask();
   EVT MaskVT = Mask.getValueType();
   SDValue StVal = MST->getValue();
+  EVT VT = StVal.getValueType();
   SDLoc dl(N);
 
   if (OpNo == 1) {
-    // Widen the value.
-    StVal = GetWidenedVector(StVal);
-
-    // The mask should be widened as well.
-    EVT WideVT = StVal.getValueType();
-    EVT WideMaskVT = EVT::getVectorVT(*DAG.getContext(),
-                                      MaskVT.getVectorElementType(),
-                                      WideVT.getVectorNumElements());
+    EVT WideVT;
+    if (VT.isScalableVector() && VT.getVectorMinNumElements() == 1 &&
+        VT.isInteger() && VT.getVectorElementType().isByteSized()) {
+      WideVT = TLI.getTypeToTransformTo(*DAG.getContext(), VT);
+      StVal = ModifyToType(StVal, WideVT);
----------------
sdesmalen-arm wrote:

I'm not sure why this is needed. Why doesn't `GetWidenedVector` already return a widened vector?

https://github.com/llvm/llvm-project/pull/99354


More information about the llvm-commits mailing list