[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