Hello,

I'm trying to understand ipa-bit-cp/ipa-cp and how the known bits are
propagated to the lattice in the case of a pointer_plus_expr.

I have a piece of code similar to the following (this being a simplified
example)

int main ()
{
  // a = some pointer.
  foo (a);
}

foo (void* a)
{
  bar (a + 1);
}

bar (void *a) {}

I have the following ipa-cp dump:

callsite main -> foo
param 0: UNKNOWN
     value: 0x0, mask 0xfffffffffffffff8


as it is passed to bar I have the following:

callsite foo -> bar
param 0: PASS THROUGH: 0, op poiner_plus_expr 8
  value: 0x0, mask 0xffffffffffffffff

My question is, shouldn't the mask to bar be 0xfffffffffffffff8?

If I understand correctly the mask being 0xfffffffffffffff8 implies that
the value will be a multiple of 8. By adding 8 (or any multiple of 8) to
it, it should still be a multiple of 8. Where I believe the mask becomes
0xffffffffffffffff is that during the addition there might be an overflow
of the masks and the operand 8. But I am still unsure. Can someone point
out what is happening here?

Thanks!

Reply via email to