[all-commits] [llvm/llvm-project] 9623ae: [clang][bytecode] Add `PtrView` for non-tracking p...

Timm Baeder via All-commits all-commits at lists.llvm.org
Fri Jun 12 05:13:21 PDT 2026


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 9623ae8878b1d2d7ff39f9ce5c30e8bf82dd1896
      https://github.com/llvm/llvm-project/commit/9623ae8878b1d2d7ff39f9ce5c30e8bf82dd1896
  Author: Timm Baeder <tbaeder at redhat.com>
  Date:   2026-06-12 (Fri, 12 Jun 2026)

  Changed paths:
    M clang/lib/AST/ByteCode/EvaluationResult.cpp
    M clang/lib/AST/ByteCode/Interp.cpp
    M clang/lib/AST/ByteCode/Interp.h
    M clang/lib/AST/ByteCode/InterpBuiltin.cpp
    M clang/lib/AST/ByteCode/InterpBuiltinBitCast.cpp
    M clang/lib/AST/ByteCode/InterpHelpers.h
    M clang/lib/AST/ByteCode/Pointer.cpp
    M clang/lib/AST/ByteCode/Pointer.h
    M clang/test/AST/ByteCode/cxx20.cpp

  Log Message:
  -----------
  [clang][bytecode] Add `PtrView` for non-tracking pointers (#184129)

Currently, when creating a `Pointer` (of block type, which I will assume
here), the pointer will add itself (via its address) to its block's
pointer list. This way, a block always knows what pointers point to it.
That's important so we can handle the case when a block (which was e.g.
created for a local variable) is destroyed and we now need to update its
pointers.

However, since always do this for all `Pointer` instances, it creates a
weird performance problem where we do this dance all the time for no
reason, e.g. consider `Pointer::stripBaseCasts()`:

https://github.com/llvm/llvm-project/blob/88693c49d9ac58a33af5978d31f6c70fe1d5b45b/clang/lib/AST/ByteCode/Pointer.h#L778-L783

This will add and remove the newly created pointer from the block's
pointer list every iteration. Other offenders are `Pointer::toRValue()`,
`EvaluationResult::checkFullyInitialized()` or
`Pointer::computeOffsetForComparison()`.

This commit introduces a `PtrView` struct, which is like a
`BlockPointer`, but without the prev/next next links to other `Pointer`s
in the block's pointer list. It also moves a lot of the accessors from
`Pointer` to `PtrView` (e.g. `isRoot()` or `getFieldDesc()`, etc.).


compile-time-tracker:
https://llvm-compile-time-tracker.com/compare.php?from=4716dc8c51719cbcc82928cd00e41a29e5b9adff&to=28d69d4ec16e77370938675826b07752e108eede&stat=instructions:u



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