APInt with uint64_t comparison

Hi LLVM,

I have painfully found out that APInt comparison with uint64_t using methods like .ult() is done with the precision of the APInt instance. The uint64_t argument is usually silently truncated then. E.g. APInt{8, 1}.ult(256) is false.

I propose to change that and do the comparison with 64 bit precision. I think it is much more useful as APInts representing the value of a constant is often compared with the size of a type.

There are no unit tests for APInt comparisons. I’ve changed the implementation locally and haven’t spot any regressions.

If the proposal is accepted I will send the patch for review and do self-hosted testing.

Cheers,

  • Paweł

Hi LLVM,

I have painfully found out that APInt comparison with uint64_t using methods like .ult() is done with the precision of the APInt instance. The uint64_t argument is usually silently truncated then. E.g. APInt{8, 1}.ult(256) is false.

I propose to change that and do the comparison with 64 bit precision. I think it is much more useful as APInts representing the value of a constant is often compared with the size of a type.

There are no unit tests for APInt comparisons. I’ve changed the implementation locally and haven’t spot any regressions.

I haven’t found any issues in self-hosted check-all and test-suite.
Patch: http://reviews.llvm.org/D10655