[LLVMdev] Address calculation

Villmow, Micah Micah.Villmow at amd.com
Mon Oct 6 09:03:48 PDT 2008

I am attempting to get indexing code generation working with my backend.
However, it seems that the addresses being calculated is being
multiplied by the width of the data type.


define void @ test_input_index_constant_int(i32 addrspace(11)* %input,
i32 addrspace(11)* %result) {


        %input.addr = alloca i32 addrspace(11)*         ; <i32
addrspace(11)**> [#uses=2]

        %result.addr = alloca i32 addrspace(11)*                ; <i32
addrspace(11)**> [#uses=2]

        store i32 addrspace(11)* %input, i32 addrspace(11)** %input.addr

        store i32 addrspace(11)* %result, i32 addrspace(11)**

        %tmp = load i32 addrspace(11)** %result.addr            ; <i32
addrspace(11)*> [#uses=1]

        %tmp1 = load i32 addrspace(11)** %input.addr            ; <i32
addrspace(11)*> [#uses=1]

        %arrayidx = getelementptr i32 addrspace(11)* %tmp1, i32 23
; <i32 addrspace(11)*> [#uses=1]

        %tmp2 = load i32 addrspace(11)* %arrayidx               ; <i32>

        store i32 %tmp2, i32 addrspace(11)* %tmp

        ret void



The value 23 in the getelementptr is being multiplied by 4 bytes and the
generated code is the value 96. However, I don't want this
multiplication to occur and I cannot figure out how to divide the
immediate by 4 when lowering the Add instruction that is linked to a
load/store operation.


So my question is, how do I modified a immediate constant value from an
SDValue struct? If that is not possible, what section of code do I need
to modify to get LLVM to stop multiplying the index by the data size.



Micah Villmow

Systems Engineer

Advanced Technology & Performance

Advanced Micro Devices Inc.

4555 Great America Pkwy,

Santa Clara, CA. 95054

P: 408-572-6219

F: 408-572-6596


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20081006/d2035c64/attachment.html>

More information about the llvm-dev mailing list