[llvm-commits] CVS: llvm/lib/VMCore/ConstantFold.cpp
Chris Lattner
clattner at apple.com
Tue Feb 27 15:43:17 PST 2007
On Feb 27, 2007, at 3:35 PM, Reid Spencer wrote:
> On Tue, 2007-02-27 at 14:17 -0800, Chris Lattner wrote:
>>>> This seems like a poor choice of API. RoundDoubleToAPInt should
>>>> take
>>>> a result bitwidth. Without this, this appears like it could make a
>>>> "large" APInt, then truncate it down to a small one when converting
>>>> from double, which is very inefficient.
>>>
>>> Done.
>>
>> Thanks, but why the default argument?
>
> For compatibility with existing code that didn't have that parameter.
> Call me lazy but I didn't feel like messing with all the test cases
> that
> use this.
The test cases are temporary, right? When they go, the default will
go? If you want, I can file a bug so that we don't forget this.
>>
>> The the interface takes a pointer to uint32_t or uint64_t, it doesn't
>> matter what the internal size is, it has to work with that array.
>
> I have since made a bunch of things in the APInt interface private,
> including these enum values.
Thanks!
>>
>> Additionally, why are you checking this here? What does
>> APINT_BITS_PER_WORD have to do with whether or not this operation can
>> be constant folded?
>
> It doesn't. Don't know what I was thinking when I wrote that.
ok
>> I'm just saying that instead of: APInt::doFoo(x, bool), we should
>> have APInt::doFooSigned(x) and APInt::doFooUnsigned(x). This is an
>> interface change, not a functionality change.
>
> Did it several hours ago.
thanks
>>
>>>>>
>>>>> @@ -382,7 +412,7 @@
>>>>> Ops.reserve(numOps);
>>>>> for (unsigned i = 0; i < numOps; ++i) {
>>>>> const Constant *Op =
>>>>> - (i == idxVal) ? Elt : Constant::getNullValue(Elt->getType
>>>>> ());
>>>>> + (idxVal == i) ? Elt : Constant::getNullValue(Elt->getType
>>>>> ());
>>>>
>>>> This sort of change makes the diff more noisy, and there is no
>>>> apparent reason for doing it. Generally, the mutating value (i) is
>>>> on the LHS, why do this (in many places)?
>>>
>>> Becasue there is no operator==(int, APInt) but there is an
>>> APInt::operator==(int).
>>
>> Okay, can you add the other one?
>
> You have two options:
>
> 1. Overload global operator== (bad practice in my books)
> 2. Deal with calls like: APIntOps::operator==(i, idxVal) which is
> uglier
> than
> just reversing the operands.
>
> What's the big deal about reversing the order of the operands?
What's the problem with #1? It's already overloaded for many other
things, as is global operator<< (for printing).
-Chris
More information about the llvm-commits
mailing list