[llvm-dev] Generate Register Indirect mode instruction
Krzysztof Parzyszek via llvm-dev
llvm-dev at lists.llvm.org
Wed Oct 12 16:31:37 PDT 2016
On 10/12/2016 5:45 PM, Friedman, Eli via llvm-dev wrote:
> On 10/12/2016 3:15 PM, Alex Bradley wrote:
>>
>> Yes the result goes into memory. But the *address* of that destination
>> memory location also needs to be loaded first into a register.
>>
>
> Your architecture has a single instruction for the following operation?
>
> define void @foo(i32 **%a, i32**%b) {
> entry:
> %l1 = load i32*, i32** %a, align 4
> %l2 = load i32, i32* %l1, align 4
> %l3 = load i32*, i32** %b, align 4
> %l4 = load i32, i32* %l3, align 4
> %add = add i32 %l2, %l4
> store i32 %add, i32* %l1, align 4
> ret void
> }
If I understand correctly:
%v1 = load i32, i32* %a
%v2 = load i32, i32* %b
%v3 = add i32 %v1, %v2
store i32 %v3, i32* %c
maps to (using invented mnemonics):
ASSIGN R0, %a
ASSIGN R1, %b
ASSIGN R2, %c
ADD *R2, *R0, *R1
I.e. pattern
(store %c, (add (load %a), (load %b)))
becomes
(ADD (ASSIGN R2, %c), (ASSIGN R0, %a), (ASSIGN R1, %b))
-Krzysztof
More information about the llvm-dev
mailing list