@@ -444,21 +444,11 @@ define dso_local void @t15(ptr noalias sret(%struct.foo) %agg.result) nounwind
444444;
445445; X64-LABEL: t15:
446446; X64: # %bb.0:
447- ; X64-NEXT: pushq %rbx
448- ; X64-NEXT: movq %rdi, %rbx
449- ; X64-NEXT: callq f
450- ; X64-NEXT: movq %rbx, %rax
451- ; X64-NEXT: popq %rbx
452- ; X64-NEXT: retq
447+ ; X64-NEXT: jmp f # TAILCALL
453448;
454449; X32-LABEL: t15:
455450; X32: # %bb.0:
456- ; X32-NEXT: pushq %rbx
457- ; X32-NEXT: movq %rdi, %rbx
458- ; X32-NEXT: callq f
459- ; X32-NEXT: movl %ebx, %eax
460- ; X32-NEXT: popq %rbx
461- ; X32-NEXT: retq
451+ ; X32-NEXT: jmp f # TAILCALL
462452 tail call fastcc void @f (ptr noalias sret (%struct.foo ) %agg.result ) nounwind
463453 ret void
464454}
@@ -607,103 +597,50 @@ declare dso_local fastcc double @foo20(double) nounwind
607597define fastcc void @t21_sret_to_sret (ptr noalias sret (%struct.foo ) %agg.result ) nounwind {
608598; X86-LABEL: t21_sret_to_sret:
609599; X86: # %bb.0:
610- ; X86-NEXT: pushl %esi
611- ; X86-NEXT: subl $8, %esp
612- ; X86-NEXT: movl %ecx, %esi
613- ; X86-NEXT: calll t21_f_sret
614- ; X86-NEXT: movl %esi, %eax
615- ; X86-NEXT: addl $8, %esp
616- ; X86-NEXT: popl %esi
617- ; X86-NEXT: retl
600+ ; X86-NEXT: jmp t21_f_sret # TAILCALL
618601;
619602; X64-LABEL: t21_sret_to_sret:
620603; X64: # %bb.0:
621- ; X64-NEXT: pushq %rbx
622- ; X64-NEXT: movq %rdi, %rbx
623- ; X64-NEXT: callq t21_f_sret
624- ; X64-NEXT: movq %rbx, %rax
625- ; X64-NEXT: popq %rbx
626- ; X64-NEXT: retq
604+ ; X64-NEXT: jmp t21_f_sret # TAILCALL
627605;
628606; X32-LABEL: t21_sret_to_sret:
629607; X32: # %bb.0:
630- ; X32-NEXT: pushq %rbx
631- ; X32-NEXT: movq %rdi, %rbx
632- ; X32-NEXT: callq t21_f_sret
633- ; X32-NEXT: movl %ebx, %eax
634- ; X32-NEXT: popq %rbx
635- ; X32-NEXT: retq
608+ ; X32-NEXT: jmp t21_f_sret # TAILCALL
636609 tail call fastcc void @t21_f_sret (ptr noalias sret (%struct.foo ) %agg.result ) nounwind
637610 ret void
638611}
639612
640613define fastcc void @t21_sret_to_sret_more_args (ptr noalias sret (%struct.foo ) %agg.result , i32 %a , i32 %b ) nounwind {
641614; X86-LABEL: t21_sret_to_sret_more_args:
642615; X86: # %bb.0:
643- ; X86-NEXT: pushl %esi
644- ; X86-NEXT: subl $8, %esp
645- ; X86-NEXT: movl %ecx, %esi
646- ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
647- ; X86-NEXT: movl %eax, (%esp)
648- ; X86-NEXT: calll f_sret@PLT
649- ; X86-NEXT: movl %esi, %eax
650- ; X86-NEXT: addl $8, %esp
651- ; X86-NEXT: popl %esi
652- ; X86-NEXT: retl
616+ ; X86-NEXT: jmp f_sret@PLT # TAILCALL
653617;
654618; X64-LABEL: t21_sret_to_sret_more_args:
655619; X64: # %bb.0:
656- ; X64-NEXT: pushq %rbx
657- ; X64-NEXT: movq %rdi, %rbx
658- ; X64-NEXT: callq f_sret@PLT
659- ; X64-NEXT: movq %rbx, %rax
660- ; X64-NEXT: popq %rbx
661- ; X64-NEXT: retq
620+ ; X64-NEXT: jmp f_sret@PLT # TAILCALL
662621;
663622; X32-LABEL: t21_sret_to_sret_more_args:
664623; X32: # %bb.0:
665- ; X32-NEXT: pushq %rbx
666- ; X32-NEXT: movq %rdi, %rbx
667- ; X32-NEXT: callq f_sret@PLT
668- ; X32-NEXT: movl %ebx, %eax
669- ; X32-NEXT: popq %rbx
670- ; X32-NEXT: retq
624+ ; X32-NEXT: jmp f_sret@PLT # TAILCALL
671625 tail call fastcc void @f_sret (ptr noalias sret (%struct.foo ) %agg.result , i32 %a , i32 %b ) nounwind
672626 ret void
673627}
674628
675629define fastcc void @t21_sret_to_sret_second_arg_sret (ptr noalias %agg.result , ptr noalias sret (%struct.foo ) %ret ) nounwind {
676630; X86-LABEL: t21_sret_to_sret_second_arg_sret:
677631; X86: # %bb.0:
678- ; X86-NEXT: pushl %esi
679- ; X86-NEXT: subl $8, %esp
680- ; X86-NEXT: movl %edx, %esi
681632; X86-NEXT: movl %edx, %ecx
682- ; X86-NEXT: calll t21_f_sret
683- ; X86-NEXT: movl %esi, %eax
684- ; X86-NEXT: addl $8, %esp
685- ; X86-NEXT: popl %esi
686- ; X86-NEXT: retl
633+ ; X86-NEXT: jmp t21_f_sret # TAILCALL
687634;
688635; X64-LABEL: t21_sret_to_sret_second_arg_sret:
689636; X64: # %bb.0:
690- ; X64-NEXT: pushq %rbx
691- ; X64-NEXT: movq %rsi, %rbx
692637; X64-NEXT: movq %rsi, %rdi
693- ; X64-NEXT: callq t21_f_sret
694- ; X64-NEXT: movq %rbx, %rax
695- ; X64-NEXT: popq %rbx
696- ; X64-NEXT: retq
638+ ; X64-NEXT: jmp t21_f_sret # TAILCALL
697639;
698640; X32-LABEL: t21_sret_to_sret_second_arg_sret:
699641; X32: # %bb.0:
700- ; X32-NEXT: pushq %rbx
701- ; X32-NEXT: movq %rsi, %rbx
702642; X32-NEXT: movq %rsi, %rdi
703- ; X32-NEXT: callq t21_f_sret
704- ; X32-NEXT: movl %ebx, %eax
705- ; X32-NEXT: popq %rbx
706- ; X32-NEXT: retq
643+ ; X32-NEXT: jmp t21_f_sret # TAILCALL
707644 tail call fastcc void @t21_f_sret (ptr noalias sret (%struct.foo ) %ret ) nounwind
708645 ret void
709646}
@@ -725,27 +662,17 @@ define fastcc void @t21_sret_to_sret_more_args2(ptr noalias sret(%struct.foo) %a
725662;
726663; X64-LABEL: t21_sret_to_sret_more_args2:
727664; X64: # %bb.0:
728- ; X64-NEXT: pushq %rbx
729665; X64-NEXT: movl %esi, %eax
730- ; X64-NEXT: movq %rdi, %rbx
731666; X64-NEXT: movl %edx, %esi
732667; X64-NEXT: movl %eax, %edx
733- ; X64-NEXT: callq f_sret@PLT
734- ; X64-NEXT: movq %rbx, %rax
735- ; X64-NEXT: popq %rbx
736- ; X64-NEXT: retq
668+ ; X64-NEXT: jmp f_sret@PLT # TAILCALL
737669;
738670; X32-LABEL: t21_sret_to_sret_more_args2:
739671; X32: # %bb.0:
740- ; X32-NEXT: pushq %rbx
741672; X32-NEXT: movl %esi, %eax
742- ; X32-NEXT: movq %rdi, %rbx
743673; X32-NEXT: movl %edx, %esi
744674; X32-NEXT: movl %eax, %edx
745- ; X32-NEXT: callq f_sret@PLT
746- ; X32-NEXT: movl %ebx, %eax
747- ; X32-NEXT: popq %rbx
748- ; X32-NEXT: retq
675+ ; X32-NEXT: jmp f_sret@PLT # TAILCALL
749676 tail call fastcc void @f_sret (ptr noalias sret (%struct.foo ) %agg.result , i32 %b , i32 %a ) nounwind
750677 ret void
751678}
0 commit comments