================
@@ -230,30 +230,96 @@ static cl::opt<bool>
EnableFixedwidthAutovecInStreamingMode(
static cl::opt<bool> EnableScalableAutovecInStreamingMode(
"enable-scalable-autovec-in-streaming-mode", cl::init(false), cl::Hidden);
-static bool isSMEABIRoutineCall(const CallInst &CI,
- const AArch64TargetLowering &TLI) {
- const auto *F = CI.getCalledFunction();
- return F &&
- SMEAttrs(F->getName(),
TLI.getRuntimeLibcallsInfo()).isSMEABIRoutine();
+/// Returns true if \p I is an intrinsic that may not be compatible with a
+/// different streaming mode (because it depends on vscale).
+static bool isPossiblyIncompatibleIntrinsic(const Instruction *I) {
+ if (I->isDebugOrPseudoInst())
+ return false;
+
+ if (auto *II = dyn_cast<IntrinsicInst>(I)) {
+ unsigned IID = II->getIntrinsicID();
+ switch (IID) {
+ default:
+ return Intrinsic::isTargetIntrinsic(IID);
+ case Intrinsic::vscale:
----------------
sdesmalen-arm wrote:
Good point. I've passed the argument (now renamed to
`AssumeVScaleIsEquivalent`) to this function, so that we can distinguish:
* Is it incompatible due to it being a vscale-dependent operation.
* Is it incompatible due to the instruction not being allowed in streaming mode.
https://github.com/llvm/llvm-project/pull/223393
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits