[LLVMdev] GEP vs IntToPtr/PtrToInt
Eli Friedman
eli.friedman at gmail.com
Mon Apr 4 18:34:00 PDT 2011
On Mon, Apr 4, 2011 at 7:10 AM, John Criswell <criswell at illinois.edu> wrote:
> On 4/4/2011 6:45 PM, Eli Friedman wrote:
>>
>> On Mon, Apr 4, 2011 at 5:02 PM, Arushi Aggarwal<arushi987 at gmail.com>
>> wrote:
>>>
>>>> Hi,
>>>> Is it correct to convert,
>>>> %196 = load i32* %195, align 8 ;<i32> [#uses=1]
>>>> %197 = zext i32 %196 to i64 ;<i64> [#uses=1]
>>>> %198 = ptrtoint i8* %193 to i64 ;<i64> [#uses=1]
>>>> %199 = add i64 %198, %197 ;<i64> [#uses=1]
>>>> %200 = inttoptr i64 %199 to i8* ;<i8*> [#uses=1]
>>>> into
>>>> %200 = getelementptr %193, %196
>>>> Reducing the unnecessary casts of converting to integers and then back?
>>>> Thanks,
>>>> Arushi
>>>>
>> See http://llvm.org/docs/LangRef.html#pointeraliasing ; it's not
>> correct in general. It is correct if %196 isn't dependent on the
>> address of any memory object, though.
>
> Can you clarify why the transform isn't correct? Is it because in the
> original code, %200 is based on both the originally cast pointer (%193) and
> the indexed offset from it (%197) while the transformed code is only based
> on %193?
Yes, exactly.
-Eli
More information about the llvm-dev
mailing list