[llvm-commits] Fold() function on TargetFolder class - removal of redundant constantexpr

Nick Lewycky nicholas at mxc.ca
Tue Feb 22 21:48:12 PST 2011


Jin Gu Kang wrote:
> OK. I see.
>
> I found wrong use count of value caused by useless ConstantExpr,
> so reported this issue. :)

You can call C->removeDeadConstantUsers() to get rid of those. It won't 
delete the constants, it just removes them from C's use list.

Nick

>
> Thanks your comment.
> Jin-Gu Kang
> ________________________________________
> From: Duncan Sands [baldrick at free.fr]
> Sent: Tuesday, February 22, 2011 6:22 PM
> To: Jin Gu Kang
> Cc: llvm-commits at cs.uiuc.edu
> Subject: Re: [llvm-commits] Fold() function on TargetFolder class - removal of redundant constantexpr
>
> Hi Jin Gu Kang,
>
>> OK. I unstand :)
>>
>> I send modified patch
>
> I think this is pointless.  Unused constants can be created in many places, so
> concentrating on one makes no sense.  If you want to get rid of them it would
> be better to add a pass that looks at all constants and zaps those that are
> unused.  For all I know maybe some pass does this already.
>
> Ciao, Duncan.
>
>>
>> Index: include/llvm/Support/TargetFolder.h
>> ===================================================================
>> --- include/llvm/Support/TargetFolder.h (revision 126080)
>> +++ include/llvm/Support/TargetFolder.h (working copy)
>> @@ -34,8 +34,12 @@
>>      /// Fold - Fold the constant using target specific information.
>>      Constant *Fold(Constant *C) const {
>>        if (ConstantExpr *CE = dyn_cast<ConstantExpr>(C))
>> -      if (Constant *CF = ConstantFoldConstantExpression(CE, TD))
>> +      if (Constant *CF = ConstantFoldConstantExpression(CE, TD)) {
>> +        if (CF != CE)
>> +         if (CE->use_empty())
>> +           CE->destroyConstant();
>>            return CF;
>> +     }
>>        return C;
>>      }
>>
>>
>> ________________________________________
>> From: Duncan Sands [baldrick at free.fr]
>> Sent: Tuesday, February 22, 2011 5:57 PM
>> To: Jin Gu Kang
>> Subject: Re: [llvm-commits] Fold() function on TargetFolder class - removal of redundant constantexpr
>>
>>> Argument of Fold() is as follows:
>>> file: include/llvm/Support/TargetFolder.h on llvm-2.8
>>>      Constant *CreateInBoundsGetElementPtr(Constant *C, Value* const *IdxList,
>>>                                            unsigned NumIdx) const {
>>>        return Fold(ConstantExpr::getInBoundsGetElementPtr(C, IdxList, NumIdx));
>>>      }
>>>
>>> Newly made ConstantExpr is argument of Fold() function.
>>
>> It may not really be new, that's the point.
>>
>> Ciao, Duncan.
>>
>>> -->    ConstantExpr::getInBoundsGetElementPtr(C, IdxList, NumIdx)
>>> so if Fold() function make new folded ConstantExpr, I think
>>> previous created ConstantExpr is redundant.
>>>
>>> ________________________________________
>>> From: llvm-commits-bounces at cs.uiuc.edu [llvm-commits-bounces at cs.uiuc.edu] On Behalf Of Duncan Sands [baldrick at free.fr]
>>> Sent: Tuesday, February 22, 2011 5:35 PM
>>> To: llvm-commits at cs.uiuc.edu
>>> Subject: Re: [llvm-commits] Fold() function on TargetFolder class - removal of redundant constantexpr
>>>
>>> Hi Jin Gu Kang,
>>>
>>>> --- include/llvm/Support/TargetFolder.h (revision 126080)
>>>> +++ include/llvm/Support/TargetFolder.h (working copy)
>>>> @@ -34,8 +34,11 @@
>>>> /// Fold - Fold the constant using target specific information.
>>>> Constant *Fold(Constant *C) const {
>>>> if (ConstantExpr *CE = dyn_cast<ConstantExpr>(C))
>>>> - if (Constant *CF = ConstantFoldConstantExpression(CE, TD))
>>>> + if (Constant *CF = ConstantFoldConstantExpression(CE, TD)) {
>>>> + if (CF != CE)
>>>> + CE->destroyConstant();
>>>
>>> this is wrong.  Constants are global and uniqued: if someone creates a constant,
>>> eg: 27, any later attempt to create an identical constant (27) returns the same
>>> constant as was created earlier, not a new one.  This means that you can check
>>> if constants are identical by comparing their pointer values.  It also means
>>> that you can't free a constant like your patch does without first proving that
>>> it is not being used anywhere.
>>>
>>> Ciao, Duncan.
>>> _______________________________________________
>>> 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
>




More information about the llvm-commits mailing list