[llvm-dev] [RFC] Introducing the maxobjsize attribute
Johannes Doerfert via llvm-dev
llvm-dev at lists.llvm.org
Sun Nov 1 10:46:22 PST 2020
Slight change of plans.
After talking to Philip, we agreed that it's unclear if we want to use
`dereferenceable` for the object-based property or the "hardware-based"
property. So if it is the extend remaining of the allocated object or
of the memory region that can be accessed without causing observable
behavior.
Since the use of `dereferenceable` was out of convenience, it is already
existing, there is a good argument to be made to go for the other option
instead: Create a "min-object-size" attribute matching the one described
below. Instead of introducing two attributes we'll go with a single one
that takes two values instead, a lower and upper bound for the minimal
and maximal object size can always be provided. Given the way attributes
are implemented right now, the min and max size will probably be limited
to ~2^32, though that seems OK to me. (Bigger objects just don't get an
attribute.)
The code will be updated shortly and the logic in BasicAA will be adjusted
to use the minimal object size not the dereferenceable bytes. We'll also
teach the ObjectSize deduction about the new attribute.
Please let us know if you have concerns with this, any feedback is welcome.
~ Johannes
On 10/13/20 11:35 AM, Atmn Patel via llvm-dev wrote:
> Hi All,
>
> We've prepared a new attribute `maxobjsize(<n>)` that tracks the maximum
> size of the object that a pointer points to. This attribute will be deduced
> through the Attributor framework and it is used for aliasing queries. The
> `maxobjsize` of an object, and number of `dereferenceable` bytes can be
> used as upper and lower bounds on the object size, and if there is no
> overlap, we can determine that the underlying objects cannot alias.
> Basically, an object that is at most N bytes long is not aliasing one that
> is at least N+1 bytes long.
>
> These changes are in:
> - D87975 - [IR] Introduce MaxObjSize Attribute
> - D87978 - [Attributor] Adds deduction for the MaxObjSize Attribute
> - D88353 - [BasicAA] Integrate MaxobjSize for NoAlias
>
> These are the Statistics changes for CTMark *without* the actual deduction (
> https://reviews.llvm.org/D88353#2301597):
> CHANGED: branch-folder NumHoist
> 438 -> 431 ( -1.598%)
> CHANGED: codegenprepare NumBlocksElim
> 16093 -> 15885 ( -1.292%)
> CHANGED: codegenprepare NumExtsMoved
> 6373 -> 6439 ( +1.036%)
> CHANGED: gvn
> IsValueFullyAvailableInBlockNumSpeculationsMax 6746 -> 6858 (
> +1.660%)
> CHANGED: gvn NumGVNInstr
> 78434 -> 79330 ( +1.142%)
> CHANGED: instcombine NumReassoc
> 22830 -> 23213 ( +1.678%)
> CHANGED: instsimplify NumSimplified
> 21278 -> 21495 ( +1.020%)
> CHANGED: licm NumPromoted
> 407 -> 497 ( +22.113%)
> CHANGED: loop-rotate NumNotRotatedDueToHeaderSize
> 37 -> 35 ( -5.405%)
> CHANGED: loop-simplify NumNested
> 126 -> 128 ( +1.587%)
> CHANGED: machinelicm NumPostRAHoisted
> 131 -> 134 ( +2.290%)
> CHANGED: memory-builtins ObjectVisitorLoad
> 96077 -> 97496 ( +1.477%)
> CHANGED: regalloc NumDCEFoldedLoads
> 38 -> 37 ( -2.632%)
> CHANGED: regalloc NumLaneConflicts
> 4408 -> 4332 ( -1.724%)
> CHANGED: regalloc NumReloadsRemoved
> 1062 -> 1050 ( -1.130%)
> CHANGED: regalloc NumSnippets
> 1168 -> 1152 ( -1.370%)
> CHANGED: regalloc NumSpillsRemoved
> 672 -> 665 ( -1.042%)
> CHANGED: stack-slot-coloring NumDead
> 14 -> 18 ( +28.571%)
> CHANGED: twoaddressinstruction NumConvertedTo3Addr
> 27054 -> 26695 ( -1.327%)
>
> These are the Statistic Changes in CTMark w/O3 before/after these patches (
> https://reviews.llvm.org/D87978#2307622):
> CHANGED: codegenprepare NumExtsMoved
> 3631 -> 3699 ( +1.873%)
> CHANGED: dse NumFastOther
> 192 -> 194 ( +1.042%)
> CHANGED: gvn
> IsValueFullyAvailableInBlockNumSpeculationsMax 4958 -> 5060 (
> +2.057%)
> CHANGED: gvn NumGVNInstr
> 46657 -> 47534 ( +1.880%)
> CHANGED: jump-threading NumDupes
> 91 -> 92 ( +1.099%)
> CHANGED: licm NumMovedLoads
> 6272 -> 6344 ( +1.148%)
> CHANGED: licm NumPromoted
> 381 -> 438 ( +14.961%)
> CHANGED: loop-rotate NumNotRotatedDueToHeaderSize
> 31 -> 29 ( -6.452%)
> CHANGED: machinelicm NumPostRAHoisted
> 88 -> 89 ( +1.136%)
> CHANGED: memdep NumCacheNonLocalPtr
> 1005887 -> 1016671 ( +1.072%)
> CHANGED: memory-builtins ObjectVisitorLoad
> 62048 -> 63473 ( +2.297%)
> CHANGED: peephole-opt NumCmps
> 532 -> 526 ( -1.128%)
> CHANGED: regalloc NumDCEFoldedLoads
> 27 -> 26 ( -3.704%)
> CHANGED: regalloc NumLocalSplits
> 1891 -> 1870 ( -1.111%)
>
> Feedback Welcome.
>
> Atmn and Johannes
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
More information about the llvm-dev
mailing list