[llvm-dev] Backend subtraction changed to negative addition
Philip Herron via llvm-dev
llvm-dev at lists.llvm.org
Wed Jan 25 13:05:04 PST 2017
Hi all,
I am writing a custom backend. Doing more testing i notice that for some
reason something like:
int test(int x) { return x - 1; }
is being turned into this IR:
; Function Attrs: nounwind
define i32 @test(i32 %n) #0 {
entry:
%n.addr = alloca i32, align 4
store i32 %n, i32* %n.addr, align 4
%0 = load i32* %n.addr, align 4
%sub = sub nsw i32 %0, 1
ret i32 %sub
}
But finally in code generation i am getting:
ldc r2, #-1
add r0, r2, r0
Should this not be doing:
ldc r2 #1
sub r0 r2 r0
I have defined both my add and sub instructions:
def ADD : ALUInst<0b0001, (outs GRRegs:$dst),
(ins GRRegs:$src1, GRRegs:$src2),
"add $src1, $src2, $dst",
[(set i32:$dst, (add i32:$src1, i32:$src2))]>;
def SUB : ALUInst<0b0010, (outs GRRegs:$dst),
(ins GRRegs:$src1, GRRegs:$src2),
"sub $src1, $src2, $dst",
[(set i32:$dst, (sub i32:$src1, i32:$src2))]>;
Is there a way to override this behaviour?
Thanks
--Phil
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170125/85ca7ab4/attachment.html>
More information about the llvm-dev
mailing list