@@ -444,21 +444,11 @@ define dso_local void @t15(ptr noalias sret(%struct.foo) %agg.result) nounwind
444
444
;
445
445
; X64-LABEL: t15:
446
446
; 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
453
448
;
454
449
; X32-LABEL: t15:
455
450
; 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
462
452
tail call fastcc void @f (ptr noalias sret (%struct.foo ) %agg.result ) nounwind
463
453
ret void
464
454
}
@@ -607,103 +597,50 @@ declare dso_local fastcc double @foo20(double) nounwind
607
597
define fastcc void @t21_sret_to_sret (ptr noalias sret (%struct.foo ) %agg.result ) nounwind {
608
598
; X86-LABEL: t21_sret_to_sret:
609
599
; 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
618
601
;
619
602
; X64-LABEL: t21_sret_to_sret:
620
603
; 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
627
605
;
628
606
; X32-LABEL: t21_sret_to_sret:
629
607
; 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
636
609
tail call fastcc void @t21_f_sret (ptr noalias sret (%struct.foo ) %agg.result ) nounwind
637
610
ret void
638
611
}
639
612
640
613
define fastcc void @t21_sret_to_sret_more_args (ptr noalias sret (%struct.foo ) %agg.result , i32 %a , i32 %b ) nounwind {
641
614
; X86-LABEL: t21_sret_to_sret_more_args:
642
615
; 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
653
617
;
654
618
; X64-LABEL: t21_sret_to_sret_more_args:
655
619
; 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
662
621
;
663
622
; X32-LABEL: t21_sret_to_sret_more_args:
664
623
; 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
671
625
tail call fastcc void @f_sret (ptr noalias sret (%struct.foo ) %agg.result , i32 %a , i32 %b ) nounwind
672
626
ret void
673
627
}
674
628
675
629
define fastcc void @t21_sret_to_sret_second_arg_sret (ptr noalias %agg.result , ptr noalias sret (%struct.foo ) %ret ) nounwind {
676
630
; X86-LABEL: t21_sret_to_sret_second_arg_sret:
677
631
; X86: # %bb.0:
678
- ; X86-NEXT: pushl %esi
679
- ; X86-NEXT: subl $8, %esp
680
- ; X86-NEXT: movl %edx, %esi
681
632
; 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
687
634
;
688
635
; X64-LABEL: t21_sret_to_sret_second_arg_sret:
689
636
; X64: # %bb.0:
690
- ; X64-NEXT: pushq %rbx
691
- ; X64-NEXT: movq %rsi, %rbx
692
637
; 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
697
639
;
698
640
; X32-LABEL: t21_sret_to_sret_second_arg_sret:
699
641
; X32: # %bb.0:
700
- ; X32-NEXT: pushq %rbx
701
- ; X32-NEXT: movq %rsi, %rbx
702
642
; 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
707
644
tail call fastcc void @t21_f_sret (ptr noalias sret (%struct.foo ) %ret ) nounwind
708
645
ret void
709
646
}
@@ -725,27 +662,17 @@ define fastcc void @t21_sret_to_sret_more_args2(ptr noalias sret(%struct.foo) %a
725
662
;
726
663
; X64-LABEL: t21_sret_to_sret_more_args2:
727
664
; X64: # %bb.0:
728
- ; X64-NEXT: pushq %rbx
729
665
; X64-NEXT: movl %esi, %eax
730
- ; X64-NEXT: movq %rdi, %rbx
731
666
; X64-NEXT: movl %edx, %esi
732
667
; 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
737
669
;
738
670
; X32-LABEL: t21_sret_to_sret_more_args2:
739
671
; X32: # %bb.0:
740
- ; X32-NEXT: pushq %rbx
741
672
; X32-NEXT: movl %esi, %eax
742
- ; X32-NEXT: movq %rdi, %rbx
743
673
; X32-NEXT: movl %edx, %esi
744
674
; 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
749
676
tail call fastcc void @f_sret (ptr noalias sret (%struct.foo ) %agg.result , i32 %b , i32 %a ) nounwind
750
677
ret void
751
678
}
0 commit comments