On Mon, 2007-03-19 at 14:16 -0700, Chris Lattner wrote: > > Implement isOneBitSet in terms of APInt::countPopulation. > > > @@ -3474,8 +3474,7 @@ > > // isOneBitSet - Return true if there is exactly one bit set in > > the specified > > // constant. > > static bool isOneBitSet(const ConstantInt *CI) { > > - uint64_t V = CI->getZExtValue(); > > - return V && (V & (V-1)) == 0; > > + return CI->getValue().countPopulation() == 1; > > } > > Are you sure this is a good idea? countPopulation is *much* slower > than a couple of and's and a subtract.
Its the temporary construction of APInts that makes the performance of the existing algorithm poor. This will construct 3 temporaries, each potentially with a malloc. Using countPopulation is constant time (I agree, not super fast, but consistent) and much easier to read in the code. > > -Chris > _______________________________________________ > llvm-commits mailing list > llvm-commits@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits