<div dir="ltr"><div>Hello LLVM Devs,</div><div><br></div><div>I am trying to compile following simple program for an experimental backend</div><div><br></div><div>int main()</div><div>{</div><div>   printf("Hello World \n");</div><div>    return 0;</div><div>}</div><div><br></div><div>I have added code to lower return instruction in the backend however in assembly I don't find return instruction generated.</div><div>In the debug-only=isel dump I can see that my target specific SDNode for RET_FLAG is added but it gets removed during DAG</div><div>optimization phase.</div><div><br></div><div><br></div><div>Initial selection DAG: BB#0 'main:entry'</div><div>SelectionDAG has 18 nodes:              </div><div>  t5: i32 = GlobalAddress<i32 (i8*, ...)* @printf> 0</div><div>        t0: ch = EntryToken                         </div><div>      t4: ch = store<ST4[%retval]> t0, Constant:i32<0>, FrameIndex:i32<0>, undef:i32</div><div>    t8: ch,glue = callseq_start t4, TargetConstant:i32<0>                           </div><div>  t10: ch,glue = CopyToReg t8, Register:i32 %R5, GlobalAddress:i32<[14 x i8]* @.str> 0</div><div>  t12: ch,glue = DummyArchISD::CALL t10, TargetGlobalAddress:i32<i32 (i8*, ...)* @printf> 0, Register:i32 %R5, t10:1</div><div>  t13: ch,glue = callseq_end t12, TargetConstant:i32<0>, TargetConstant:i32<0>, t12:1                                </div><div>    t15: i32,ch,glue = CopyFromReg t13, Register:i32 %R3, t13:1                                                      </div><div>  t16: ch,glue = CopyToReg t15:1, Register:i32 %R3, Constant:i32<0>                                                  </div><div>  t17: ch = DummyArchISD::RET_FLAG t16, Register:i32 %R3, t16:1                                                     </div><div>  t15: i32,ch,glue = CopyFromReg t13, Register:i32 %R3, t13:1                                                        </div><div><br></div><div>Optimized lowered selection DAG: BB#0 'main:entry'</div><div>SelectionDAG has 15 nodes:                        </div><div>        t0: ch = EntryToken                       </div><div>      t4: ch = store<ST4[%retval]> t0, Constant:i32<0>, FrameIndex:i32<0>, undef:i32</div><div>    t8: ch,glue = callseq_start t4, TargetConstant:i32<0>                           </div><div>  t10: ch,glue = CopyToReg t8, Register:i32 %R5, GlobalAddress:i32<[14 x i8]* @.str> 0</div><div>  t12: ch,glue = DummyArchISD::CALL t10, TargetGlobalAddress:i32<i32 (i8*, ...)* @printf> 0, Register:i32 %R5, t10:1</div><div>  t13: ch,glue = callseq_end t12, TargetConstant:i32<0>, TargetConstant:i32<0>, t12:1                                </div><div>  t15: i32,ch,glue = CopyFromReg t13, Register:i32 %R3, t13:1                                                        </div><div><br></div><div><br></div><div>Can someone please guide me how to furhter debug this situation? Or any hints.</div><div><br></div><div>Sincerely,</div><div>Vivek</div></div>