<div dir="ltr"><div><div><div><div><div><div><div><div><div><div><div>Hi all,<br><br></div>I am writing a custom backend. Doing more testing i notice that for some reason something like:<br><br></div>int test(int x) { return x - 1; }<br><br></div>is being turned into this IR:<br><br>; Function Attrs: nounwind<br>define i32 @test(i32 %n) #0 {<br>entry:<br>  %n.addr = alloca i32, align 4<br>  store i32 %n, i32* %n.addr, align 4<br>  %0 = load i32* %n.addr, align 4<br>  %sub = sub nsw i32 %0, 1<br>  ret i32 %sub<br>}<br><br></div>But finally in code generation i am getting:<br><br>ldc r2, #-1<br>add r0, r2, r0<br><br></div>Should this not be doing:<br><br></div>ldc r2 #1<br></div>sub r0 r2 r0<br><br></div>I have defined both my add and sub instructions:<br><br>def ADD : ALUInst<0b0001, (outs GRRegs:$dst),<br>                   (ins GRRegs:$src1, GRRegs:$src2),<br>                   "add $src1, $src2, $dst",<br>                   [(set i32:$dst, (add i32:$src1, i32:$src2))]>;<br><br>def SUB : ALUInst<0b0010, (outs GRRegs:$dst),<br>                   (ins GRRegs:$src1, GRRegs:$src2),<br>                   "sub $src1, $src2, $dst",<br>                   [(set i32:$dst, (sub i32:$src1, i32:$src2))]>;<br><br></div>Is there a way to override this behaviour?<br><br></div>Thanks<br><br></div>--Phil<br><div><div><div><br></div></div></div></div>