mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-11-03 12:57:27 +00:00
Every IR value kept two lists of its users: uses (the users) and operandUses (the users with their operand index). AddArgument, ReplaceArgument and ReplaceAllUsesWith updated both, and each value allocated and freed both. Only operandUses is kept now. Uses() is a view of the users in operandUses, and HasUses, UseCount and Invalidate read it. sizeof(IrValue) drops from 152 to 128 bytes; the plan value encoder writes no use lists, so only its size check changes. The two lists held the same users in the same order, except after ReplaceArgument on a user that took the value in more than one operand: uses dropped the user's first entry and operandUses the replaced operand's entry. Uses() now follows operandUses there too. shader_ir_use_rewrite counted the allocations of both lists: its allocation failure check now fails the one reserve ReplaceAllUsesWith makes, and its growth check allows the allocations of one list, which main exceeds. Co-Authored-By: Claude Opus 5.5 <[email protected]>