[llvm-branch-commits] [llvm] [AArch64][SME] NFC: Inline getCompatibilityForChangeToStreamingMode. (PR #231899)

Kazu Hirata via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Wed Oct 14 07:59:16 PDT 2026


================
@@ -272,17 +222,49 @@ static bool hasPossibleIncompatibleOps(const Function *F,
       // Inlining operations on fixed-length vectors when the streaming
       // mode does not match is rejected because performance may be impacted.
       // This decision should eventually be moved to the cost-model.
+      // When IsVScaleDependent is true, then we allow fixed-length vectors as
+      // the operation may be something like llvm.vector.match, which takes both
+      // a scalable and a fixed-length vector.
       if (!IsAlwaysInline && (isa<FixedVectorType>(I.getType()) ||
                               any_of(I.operand_values(), [](const Value *V) {
                                 return isa<FixedVectorType>(V->getType());
                               })))
         return true;
 
-      StreamingIncompatibility C = getCompatibilityForChangeToStreamingMode(&I);
-      if (any(C & StreamingIncompatibility::HasIncompatibleInstruction) ||
-          (!AssumeVScaleIsEquivalent &&
-           any(C & StreamingIncompatibility::VScaleDependent)))
-        return true;
+      if (auto *II = dyn_cast<IntrinsicInst>(&I)) {
+        unsigned IID = II->getIntrinsicID();
+        switch (IID) {
+        default:
+          if (!Intrinsic::isTargetIntrinsic(IID))
+            break;
+          // Conservatively assume target intrinsics are vscale dependent
+          // or invalid in the current mode.
+          return true;
+        case Intrinsic::masked_gather:
+        case Intrinsic::masked_scatter:
+        case Intrinsic::masked_compressstore:
+        case Intrinsic::experimental_vector_histogram_add:
+          // Instructions that are not available in streaming mode.
+          // Fixed-length operations can still be code-generated by scalarizing.
+          // FIXME: Consider FEAT_FA64.
+          if (I.getOperand(0)->getType()->isScalableTy())
+            return true;
+          break;
+        case Intrinsic::vscale:
+          return !AssumeVScaleIsEquivalent;
+        }
+      }
+
+      // Determine if the operation is vscale dependent by looking at it's
+      // operand/result types.
+      bool IsVScaleDependent = false;
----------------
kazutakahirata wrote:

This seems to be unused.  Should we remove it?  Or add `[[maybe_unused]]` if you are planning to use it soon?

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


More information about the llvm-branch-commits mailing list