[LLVMdev] Dependence Analysis [was: Flow-Sensitive AA]
wmatyjewicz at fastmail.fm
Sun Aug 24 14:46:52 PDT 2008
> I asked myself the same question. Without mod, how do you ensure that for instance the expression 2*i+255 was not actually 2*i-1 ?
I think it is not possible in general, but I believe it is possible in
case of affine expressions used as GEP indices.
I assume, GEP indices (except indexing into struct) are interpreted as
signed integers. It isn't explicitly stated in the LangRef, but the code
seems to treat them this way. Am I correct?
If the result of an affine expression:
a_1*i_1 + a_2*i_2 + ... + a_n*i_n
is interpreted as signed value during the program run, it should be safe
to assume during the program analysis that all operations (coefficients)
are signed - signed evaluation of such an expression will bring the same
result as evaluation of the expression using original signedness and
interpretation of the produced value as signed. However, such an
assumption requires that arbitrary precise arithmetic is used during the
program analysis. Otherwise, a signed overflow (undefined in LLVM) might
be introduced that does not appear during the program run.
More information about the llvm-dev