================ @@ -1145,31 +1169,71 @@ struct AAAMDWavesPerEU : public AAAMDSizeRangeAttribute { auto &InfoCache = static_cast<AMDGPUInformationCache &>(A.getInfoCache()); ChangeStatus Change = ChangeStatus::UNCHANGED; + Function *F = getAssociatedFunction(); + + const auto *AAFlatWorkGroupSize = A.getAAFor<AAAMDFlatWorkGroupSize>( + *this, IRPosition::function(*F), DepClassTy::REQUIRED); + if (!AAFlatWorkGroupSize || !AAFlatWorkGroupSize->isValidState()) { + LLVM_DEBUG( + dbgs() << '[' << getName() + << "] AAAMDFlatWorkGroupSize is unavailable or invalid.\n"); + return ChangeStatus::UNCHANGED; + } + + if (AAFlatWorkGroupSize->isAtInitialState()) { + LLVM_DEBUG(dbgs() << '[' << getName() + << "] AAAMDFlatWorkGroupSize is still at initial " + "state. Skip the update.\n"); + return ChangeStatus::UNCHANGED; + } ---------------- shiltian wrote:
An initial state is always a valid state, but the reverse is not necessarily true. Once the value is updated, it is no longer in the initial state; however, it remains valid. As such, updates should continue, and the manifest function must still be invoked. https://github.com/llvm/llvm-project/pull/114726 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits