[all-commits] [llvm/llvm-project] 2268a3: IROutliner: Fixme relies on constant use lists

Matt Arsenault via All-commits all-commits at lists.llvm.org
Mon Apr 7 09:56:19 PDT 2025


  Branch: refs/heads/users/arsenm/ir/remove-uselist-for-constantdata
  Home:   https://github.com/llvm/llvm-project
  Commit: 2268a37a5e5907d4e804c29ea868703907982180
      https://github.com/llvm/llvm-project/commit/2268a37a5e5907d4e804c29ea868703907982180
  Author: Matt Arsenault <Matthew.Arsenault at amd.com>
  Date:   2025-04-07 (Mon, 07 Apr 2025)

  Changed paths:
    M llvm/lib/Transforms/IPO/IROutliner.cpp

  Log Message:
  -----------
  IROutliner: Fixme relies on constant use lists


  Commit: f79a8b028520b40fde9042cffdbbffe1fc0b5d42
      https://github.com/llvm/llvm-project/commit/f79a8b028520b40fde9042cffdbbffe1fc0b5d42
  Author: Matt Arsenault <Matthew.Arsenault at amd.com>
  Date:   2025-04-07 (Mon, 07 Apr 2025)

  Changed paths:
    M llvm/include/llvm/IR/Use.h
    M llvm/include/llvm/IR/Value.h
    M llvm/lib/Analysis/TypeMetadataUtils.cpp
    M llvm/lib/AsmParser/LLParser.cpp
    M llvm/lib/Bitcode/Reader/BitcodeReader.cpp
    M llvm/lib/Bitcode/Writer/ValueEnumerator.cpp
    M llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
    M llvm/lib/CodeGen/CodeGenPrepare.cpp
    M llvm/lib/CodeGen/ComplexDeinterleavingPass.cpp
    M llvm/lib/IR/AsmWriter.cpp
    M llvm/lib/IR/Instruction.cpp
    M llvm/lib/IR/Use.cpp
    M llvm/lib/IR/Value.cpp
    M llvm/lib/Target/AArch64/GISel/AArch64RegisterBankInfo.cpp
    M llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp
    M llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
    M llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
    M llvm/lib/Transforms/Scalar/Reassociate.cpp
    M llvm/test/Analysis/MemorySSA/nondeterminism.ll
    A llvm/test/tools/llvm-diff/uselistorder-issue58629-gv.ll
    M llvm/test/tools/llvm-diff/uselistorder-issue58629.ll
    M llvm/test/tools/llvm-reduce/bitcode-uselistorder.ll
    M llvm/test/tools/llvm-reduce/uselistorder-invalid-ir-output.ll
    M llvm/tools/verify-uselistorder/verify-uselistorder.cpp

  Log Message:
  -----------
  IR: Remove uselist for constantdata

This is a resurrected version of the patch attached to this RFC:

https://discourse.llvm.org/t/rfc-constantdata-should-not-have-use-lists/42606

In this adaptation, there are a few differences. In the original patch, the Use's
use list was replaced with an unsigned* to the reference count in the value. This
version leaves them as null and leaves the ref counting only in Value.

The current blocker is IROutliner has its own diy cloning, which doesn't use
ValueMapper and it does make direct use of constant use lists.

Remove use-lists from instances of ConstantData (which are shared
across modules and have no operands).

To continue supporting most of the use-list API, store a ref-count in
place of the use-list; this is for API like Value::use_empty and
Value::hasNUses.  Operations that actually need the use-list -- like
Value::use_begin -- will assert.

This change has three benefits:

 1. The compiler output cannot in any way depend on the use-list order
    of instances of ConstantData.

 2. There's no use-list traffic when adding and removing simple
    constants from operand lists (although there is ref-count traffic;
    YMMV).

 3. It's cheaper to serialize use-lists (since we're no longer
    serializing the use-list order of things like i32 0).

The downside is that you can't look at all the users of ConstantData,
but traversals of users of i32 0 are already ill-advised.

Possible follow-ups:
  - Track if an instance of a ConstantVector/ConstantArray/etc. is known
    to have all ConstantData arguments, and drop the use-lists to
    ref-counts in those cases.  Callers need to check Value::hasUseList
    before iterating through the use-list.
  - Remove even the ref-counts.  I'm not sure they have any benefit
    besides minimizing the scope of this commit, and maintaining the
    counts is not free.

Fixes #58629


Compare: https://github.com/llvm/llvm-project/compare/2268a37a5e59%5E...f79a8b028520

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