[llvm-commits] CVS: llvm/lib/VMCore/Constants.cpp
Chris Lattner
clattner at apple.com
Tue Feb 27 14:14:57 PST 2007
On Feb 27, 2007, at 11:34 AM, Reid Spencer wrote:
> On Tue, 2007-02-27 at 09:10 -0800, Chris Lattner wrote:
>>> Index: llvm/lib/VMCore/Constants.cpp
>>> diff -u llvm/lib/VMCore/Constants.cpp:1.222 llvm/lib/VMCore/
>>> Constants.cpp:1.223
>>> --- llvm/lib/VMCore/Constants.cpp:1.222 Mon Feb 26 21:05:06 2007
>>> +++ llvm/lib/VMCore/Constants.cpp Tue Feb 27 01:57:53 2007
>>> @@ -118,7 +118,7 @@
>>> if (ITy->getBitWidth() == 1)
>>> return ConstantInt::getTrue();
>>> else
>>> - return ConstantInt::get(Ty, int64_t(-1));
>>> + return ConstantInt::get(Ty, APInt::getAllOnesValue(ITy-
>>>> getBitWidth()));
>>> return 0;
>>> }
>>
>> The special case for 'i1' can be removed, right?
>
> I assumed the special case was because of this mess:
>
Nope, it's not needed, ConstantInt::get(Type::Int1Ty, x) works.
>> ConstantInt *ConstantInt::TheTrueVal = 0;
>> ConstantInt *ConstantInt::TheFalseVal = 0;
>>
>> namespace llvm {
>> void CleanupTrueFalse(void *) {
>> ConstantInt::ResetTrueFalse();
>> }
>> }
>>
>> static ManagedCleanup<llvm::CleanupTrueFalse> TrueFalseCleanup;
>>
>> ConstantInt *ConstantInt::CreateTrueFalseVals(bool WhichOne) {
>> assert(TheTrueVal == 0 && TheFalseVal == 0);
>> TheTrueVal = get(Type::Int1Ty, 1);
>> TheFalseVal = get(Type::Int1Ty, 0);
>>
>> // Ensure that llvm_shutdown nulls out TheTrueVal/TheFalseVal.
>> TrueFalseCleanup.Register();
>>
>> return WhichOne ? TheTrueVal : TheFalseVal;
>> }
>
> why do we need this?
This is needed to make ConstantInt::getTrue() / getFalse() efficient.
-Chris
More information about the llvm-commits
mailing list