<div dir="ltr"><div><div><div>Hello!!<br><br></div>Im trying to write a C Backend using LLVM. I tried modifying the target "MSP430" to suit my backend. My target Architecture doesnt have a STACK. so i used "mem2reg" option using "OPT". Now Problem i have is..., the results produced are being written back to memory.<br><br></div>Following example should illustrate the problem<br><br></div><u><b>Intermediate file after MEM2REG pass:</b></u><br><div><br>@.str = private unnamed_addr constant [9 x i8] c"%d %d %d\00", align 1<br><br>; Function Attrs: nounwind<br>define void @main() #0 {<br>  %1 = add nsw i32 2, 10<br>  %2 = add nsw i32 %1, 3<br>  %3 = sub nsw i32 3, 2<br>  %4 = sub nsw i32 %3, 5<br>  %5 = xor i32 4, 4<br>  %6 = xor i32 %5, %5<br>  %7 = or i32 5, %4<br>  %8 = and i32 %4, 2<br>  %9 = or i32 7, 2<br>  %10 = or i32 %8, %6<br>  %11 = and i32 %9, %10<br>  %12 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([9 x i8]* @.str, i32 0, i32 0), i32 7, i32 %11, i32 %6)<br>  ret void<br>}<br><br></div><div><u><b>Assembly file in my target:</b></u><br><br>main:                                   ; @main<br>; BB#0:<br>        Mov REG[12],.L.str,4<br>        Mov 0(REG[1]), REG[12],4<br>        Mov 6(REG[1]), 0,4<br>        Mov 4(REG[1]), 0,4<br>        Mov 2(REG[1]), 7,4<br>        Call printf<br>         Nop<br>         Nop<br>        Return;<br>.Ltmp0:<br>        .size   main, .Ltmp0-main<br><br>        .type   .L.str,@object          ; @.str<br>        .section        .rodata.str1.1,"aMS",@progbits,1<br><br>.L.str:<br>        .asciz  "%d %d %d"<br>        .size   .L.str, 9<br><br><br></div><div>As you can see..., 0 is written to 6(REG[1]) in third line. here REG[1] is my frame pointer register and the compiler is writing result to memory location 6(REG[1]).<br><br></div><div>This would have been valid with a stack..,but since my target doesnt have a stack, i need to keep the results in REGISTERS ONLY. <br><br></div><div>So...,please suggest me how to prevent writing the final results to memory<br><br></div><div>Regards,<br></div><div>Avinash<br></div><div><br><br></div></div>