[all-commits] [llvm/llvm-project] 9fb78f: [ValueTracking] Support multiple predecessors in w...

Vy Nguyen via All-commits all-commits at lists.llvm.org
Wed Sep 30 06:57:31 PDT 2026


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 9fb78fc2451015af1df8c0efa8ca5ac6a987e2b3
      https://github.com/llvm/llvm-project/commit/9fb78fc2451015af1df8c0efa8ca5ac6a987e2b3
  Author: Vy Nguyen <vyng at google.com>
  Date:   2026-09-30 (Wed, 30 Sep 2026)

  Changed paths:
    M llvm/include/llvm/Analysis/ValueTracking.h
    M llvm/lib/Analysis/Loads.cpp
    M llvm/lib/Analysis/ValueTracking.cpp
    M llvm/test/Analysis/ValueTracking/memory-dereferenceable.ll
    M llvm/test/Transforms/LICM/hoist-speculatable-load.ll
    M llvm/test/Transforms/LoopVectorize/dereferenceable-info-from-assumption-constant-size.ll

  Log Message:
  -----------
  [ValueTracking] Support multiple predecessors in willNotFreeBetween (#223580)

Previously, `willNotFreeBetween` only walked backward along a linear
chain of single-predecessor blocks, bailing out whenever control flow
branched and merged (eg., conditional `if-else` blocks before a loop
preheader).

This PR generalises the backward walk to use a worklist over all
predecessors from `CtxBB` to `AssumeBB` (bounded by
`MaxInstrsToCheckForFree`). This enables LICM( and possibly other
passes) to prove dereferenceability and hoist invariant loads across
merging control flow when no path contains a freeing instruction.

---------

Co-authored-by: Florian Hahn <flo at fhahn.com>
Co-authored-by: Antonio Frighetto <me at antoniofrighetto.com>



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list