[PATCH] D67612: [UnrolledInstAnalyzer] Use MSSA to find stored values outside of loop.

Alina Sbirlea via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 16 12:52:22 PDT 2019


asbirlea added a comment.

Would something like this work for your purpose?

  if (MSSA) {
      auto *D = MSSA->getWalker()->getClobberingMemoryAccess(&I);
      if (MemoryDef *MD = dyn_cast<MemoryDef>(D))
          if (StoreInst *SI = dyn_cast<StoreInst>(MD->getMemoryInst())) 
              if (Optional<SimplifiedAddress> MaybeSimpAddr =
                  simplifyNonLoopAddress(SI->getPointerOperand()))
                  if (MaybeSimpAddr->Base == AddrBase &&
                      MaybeSimpAddr->Offset == SimplifiedAddrOp)
                      return true;
  }

I don't know if you want to `return false;` on some of those branches or continue with the checks below.

The walker will stop at the first access that may alias the Load. If it's not a Def, it's a Phi and it should give up, similarly if it's a Def but not a Store. Then, only if it's a store and has the conditions you added, the load can be folded/cost is ignored.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D67612/new/

https://reviews.llvm.org/D67612





More information about the llvm-commits mailing list