[PATCH] D103096: [analyzer] Implement cast for ranges of symbolic integers
Denys Petrov via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 11 09:06:22 PDT 2022
ASDenysPetrov marked 10 inline comments as done.
ASDenysPetrov added a comment.
@martong Thank you for your patience. I started moving to a bit another direction that we can improving it iteratively.
Just spoiling, in my latest solution a single symbol will be associated to many classes. Here are also tricky cases:
---
Consider equalities
a32 == (int8)b32
b32 == c32
Class-Symbol map is:
class1 { a32 , (int8)b32 }
class2 { b32 , c32 }
Symbol-Class map is:
a32 { 32 : class1 }
b32 { 8 : class1, 32 : class2 }
c32 { 32 : class2 }
If we know:
(int8)c32 == -1
then what is:
(int8)a32 - ?
Should we traverse like `a -> 32 -> class1 -> (int8)b32 -> b32 -> class2 -> c32 -> (int8)c32 ` ?
---
The `x8 == y32` we can treat as a range of `int8` ( {-128, 127} or {0, 255} ).
---
For `(int8)x32 == (int16)x32` we can eliminate one of the symbols in the class a s a redundant one.
---
If `x32 == 0` then we can simplify(merge) such classes `(int16)x32 == y` and `(int8)x32 == z` into a single class. I beleive there are more cases.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D103096/new/
https://reviews.llvm.org/D103096
More information about the cfe-commits
mailing list