On 5/18/22 16:40, Segher Boessenkool wrote:
On Wed, May 18, 2022 at 04:24:06PM -0400, Andrew MacLeod wrote:
On 5/18/22 14:13, Segher Boessenkool wrote:
"Side effect" already has a meaning, very commonly used in language
theory, and even in the C standard itself: a function has a side effect
if it does something more than just return a value: if it changes state.
This can be some I/O, or it can just be writing to some non-local data.

Side effects are crucial to what a compiler does, and they are used all
over the place (the gcc/ dir has some thousand mentions of it for
example).

Please don't make life hard for everyone by overloading this term.

I'm open to suggestions for a better term!
Glad to hear that, and this isn't set in stione yet!

Is there a commonly used alternate term to describe an observable effect
on the value of an input operand?
I'd use something with "known" in the name.  But:

As far as I understand what you are doing this is not an effect on the
operand at all!  It cannot be one even, the operand is an input only
after all.  Instead, it changes what is known about the value of that
input: it cannot be 0 in this case, it is known to not be 0.

This is similar to other known value things we have in GCC already.  Can
you not just use one of those, even?  What are the benefit to this new
abstraction?

Well, This is a component of ranger tracking value ranges..  it is recording the "side-effect" of the stmt on the known range of an object. The file is called  "gimple-range-side-effect.h"

Its a generalization of how ranger tracks non-null pointer values, enabling it to track arbitrary observable ranges values. (The old mechanism also utilized immediate-use chains, which prevented it from being utilized in gimple-folding)

WIth this change, we can also track things like a = b / c causing the effect that c is known non-zero after the statement if there were no traps, or https://gcc.gnu.org/bugzilla/show_bug.cgi?id=31178 , which after 15 years, we can now simply indicate that for  a = b >> c , its only defined behaviour if c is in the range [0, PRECISION(b)]

So its basically just a generalization of how we track known values within the range system.

Andrew


Reply via email to