[llvm] [Attributor] Pack out arguments into a struct (PR #119267)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 26 05:02:02 PST 2024
================
@@ -12989,6 +12991,179 @@ struct AAAllocationInfoCallSiteArgument : AAAllocationInfoImpl {
};
} // namespace
+/// ----------- AAConvertOutArgument ----------
+namespace {
+struct AAConvertOutArgumentFunction final : AAConvertOutArgument {
+ AAConvertOutArgumentFunction(const IRPosition &IRP, Attributor &A)
+ : AAConvertOutArgument(IRP, A) {}
+
+ /// See AbstractAttribute::updateImpl(...).
+ ChangeStatus updateImpl(Attributor &A) override {
+ const Function *F = getAssociatedFunction();
+ if (!F || F->isDeclaration())
+ return indicatePessimisticFixpoint();
+
+ bool hasCandidateArg = false;
+ for (const Argument &Arg : F->args())
+ if (Arg.getType()->isPointerTy() && isEligibleArgument(Arg, A, *this))
+ hasCandidateArg = true;
+
+ return hasCandidateArg ? indicateOptimisticFixpoint()
+ : indicatePessimisticFixpoint();
+ }
+
+ /// See AbstractAttribute::manifest(...).
+ ChangeStatus manifest(Attributor &A) override {
+ const Function &F = *getAssociatedFunction();
+ DenseMap<Argument*, Type*> PtrToType;
+ SmallVector<Argument *, 4> CandidateArgs;
+ for (unsigned argIdx = 0; argIdx < F.arg_size(); ++argIdx) {
+ Argument *Arg = F.getArg(argIdx);
+ if (isEligibleArgument(*Arg, A, *this)) {
+ CandidateArgs.push_back(Arg);
+ for (auto UseItr = Arg->use_begin(); UseItr != Arg->use_end(); ++UseItr) {
+ auto *Store = dyn_cast<StoreInst>(UseItr->getUser());
+ if (Store)
----------------
arsenm wrote:
Pretty sure you have a bug when a pointer is stored to itself
https://github.com/llvm/llvm-project/pull/119267
More information about the llvm-commits
mailing list