[all-commits] [llvm/llvm-project] 35df00: [TBAA] Recover !tbaa for a memcpy of struct with s...

Abhay Kanhere via All-commits all-commits at lists.llvm.org
Fri Sep 25 14:19:38 PDT 2026


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 35df00b0aa5d9f4deec215306dc24d247f5eb66c
      https://github.com/llvm/llvm-project/commit/35df00b0aa5d9f4deec215306dc24d247f5eb66c
  Author: Abhay Kanhere <a_kanhere at apple.com>
  Date:   2026-09-25 (Fri, 25 Sep 2026)

  Changed paths:
    M llvm/lib/Analysis/TypeBasedAliasAnalysis.cpp
    M llvm/test/Transforms/InstCombine/struct-assign-tbaa.ll

  Log Message:
  -----------
  [TBAA] Recover !tbaa for a memcpy of struct with same type fields (#214116)

When InstCombine widens a small same-typed aggregate copy into an
integer load/store, it derives no !tbaa, and !tbaa.struct is nulled out,
so the load/store are left untyped. An untyped access may-alias every
typed access and blocks optimization:

  struct Coord { int x, y; };
void copy_if_inbounds(Coord *dst, const Coord *src, const long *bound,
int n) {
    for (int i = 0; i < n; ++i)
      if (i < *bound)
        dst[i] = *src;   // {int,int} copy -> memcpy + !tbaa.struct
  }

compare this to field-by-field copy, which has typed field access
void copy_fields_if_inbounds(Coord *dst, const Coord *src, const long
*bound, int n) {
    for (int i = 0; i < n; ++i)
if (i < *bound) { dst[i].x = src->x; dst[i].y = src->y; } // per-field,
typed
  }



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