vsavchenko added inline comments.

================
Comment at: 
clang/include/clang/StaticAnalyzer/Core/PathSensitive/RangedConstraintManager.h:245-246
+    ///
+    /// Complexity: O(N^2)
+    ///             where N = size(What)
+    RangeSet castTo(RangeSet What, APSIntType Ty);
----------------
ASDenysPetrov wrote:
> ASDenysPetrov wrote:
> > vsavchenko wrote:
> > > That is a bit of a red flag because instantly my intuition tells me that 
> > > there should be a linear option.
> > Unfortunately, `castTo` is N^2 because technically we can call 
> > `unite`(which is N) inside it N times.
> Corrected.
> Unfortunately, castTo is N^2 because technically we can call unite(which is 
> **N+M**) inside it N times.
> Unfortunately, castTo is N^2 because technically we can call unite(which is 
> N) inside it N times.

I know why you put N^2, and what I meant was that there is probably a better 
algorithm than that. 

And as I said there is a linear algorithm:
If you have a smaller type that is, let's say, 8 times smaller than the larger 
type.  We can split the original range set into 8 range sets and unite them.
This difference between type sizes is limited (because we don't support integer 
types of arbitrary bit width) aka is a constant.  However, IRL the size of 
range sets is very small, and this constant factor can make it much slower than 
your N^2 algorithm.

But it doesn't mean that there is no better algorithm and that you HAVE TO call 
`unite` in a loop N times.




Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D103094/new/

https://reviews.llvm.org/D103094

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to