[llvm-commits] [llvm] r69574 - /llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp

Sanjiv Gupta sanjiv.gupta at microchip.com
Mon Apr 20 23:48:26 PDT 2009


Duncan Sands wrote:
> Hi Sanjiv,
>
>   
>>>> Before trying to introduce/eliminate cast/ext/trunc to make indices type as
>>>> pointer type, make sure that the pointer size is a valid sequential index type.
>>>>         
>
> I think a better approach would be to add a "get preferred type for GEP indices"
> method to TargetData.  This would return getIntPtrType on most targets, and i16
> on PIC16.  Then change this transform to use the type given by that method rather
> than getIntPtrType.
>   
I think you meant i32 on PIC16, because i16 indices are still not 
allowed to GEP.

> Ciao,
>
> Duncan.
>
>   
>>>>     
>>>>         
>>> what's this about?  Got a testcase?
>>>
>>> Ciao,
>>>
>>> Duncan.
>>>
>>>   
>>>       
>> Hi Duncan,
>>
>> Here it is
>> http://lists.cs.uiuc.edu/pipermail/llvmdev/2009-April/021785.html
>>
>> - Sanjiv
>>     
>>>> Modified:
>>>>     llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp
>>>>
>>>> Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=69574&r1=69573&r2=69574&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original)
>>>> +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Mon Apr 20 01:05:54 2009
>>>> @@ -10695,7 +10695,12 @@
>>>>    gep_type_iterator GTI = gep_type_begin(GEP);
>>>>    for (User::op_iterator i = GEP.op_begin() + 1, e = GEP.op_end();
>>>>         i != e; ++i, ++GTI) {
>>>> -    if (isa<SequentialType>(*GTI)) {
>>>> +    // Before trying to eliminate/introduce cast/ext/trunc to make
>>>> +    // indices as pointer types, make sure that the pointer size
>>>> +    // makes a valid sequential index.
>>>> +    const SequentialType *ST = dyn_cast<SequentialType>(*GTI);
>>>> +    Value *PtrTypeVal = Constant::getNullValue(TD->getIntPtrType());
>>>> +    if (ST && ST->indexValid(PtrTypeVal)) {
>>>>        if (CastInst *CI = dyn_cast<CastInst>(*i)) {
>>>>          if (CI->getOpcode() == Instruction::ZExt ||
>>>>              CI->getOpcode() == Instruction::SExt) {
>>>>
>>>>
>>>> _______________________________________________
>>>> 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