[llvm-commits] ConstantInt Patch #3
Chris Lattner
clattner at apple.com
Mon Feb 26 15:15:11 PST 2007
On Feb 26, 2007, at 3:09 PM, Reid Spencer wrote:
> This one avoids collisions in the IntConstants map by using APInt
> directly in the DenseMap. This was made possible by relaxing
> APInt::operator= and using a small structure for the key type so
> that we
> can do operator== correctly for APInt (handling different bit widths).
Please eliminate the uint64_t version of the ConstantInt ctor:
two ::get method's is fine, but you want just one ctor. I don't see
the use of the uint64_t version anyway.
+ APInt first;
+ const Type* second;
Please give these meaningful names.
+ bool operator==(const KeyTy& that) const {
+ if (this == &that)
+ return true;
You can drop this 'fast path' that will never be true.
+ return second == that.second &&
+ this->first.getBitWidth() == that.first.getBitWidth
() &&
+ this->first == that.first;
If the 'second's match, how could the types not match.
Otherwise, looks good. I didn't look at the APInt diff.
-Chris
> This passes tests. I'm likely to commit this soonish.
>
> Reid.
>
> On Mon, 2007-02-26 at 12:44 -0800, Reid Spencer wrote:
>> Chris,
>>
>> Here is round two. This is a slightly larger patch that also includes
>> the following changes:
>>
>> * APInt::getValue() -> getSExtValue() and getZExtValue()
>> * const APInt& ConstantInt::getValue() const { return Val; }
>> * ConstantInt::get(const Type*, const APInt&)
>> * APInt constructor for ConstantInt::get to use
>> * APInt::getHashValue() -- used for the DenseMap of
>> ConstantInt
>> values.
>> * Changes in Constants.cpp to use getHashValue() for the key in
>> the map of ConstantInt values.
>> Reid.
>>
>> On Mon, 2007-02-26 at 10:46 -0800, Reid Spencer wrote:
>>> Hi,
>>>
>>> I would like to commit this small patch but thought I should send
>>> it out
>>> first. This changes ConstantInt to use an APInt object as its value
>>> instead of a uint64_t. The interface to ConstantInt still uses
>>> uint64_t
>>> so the APInt is just being used as a glorified uint64_t as all bit
>>> widths are <= 64. This change passes DejaGnu, the MultiSource/
>>> Benchmarks
>>> test suite, and a few of the SPEC benchmarks that I tried (444.namd,
>>> 176.gcc, 473.astar).
>>>
>>> Okay to commit?
>>>
>>> Reid.
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>> <ConstantInt3.patch>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list