@@ -865,6 +865,168 @@ define i32 @test_call_defined_many_args(i32 %a) nounwind {
865
865
i32 %a , i32 %a , i32 %a , i32 %a , i32 %a )
866
866
ret i32 %1
867
867
}
868
+
869
+ define fastcc void @fastcc_call_nonfastcc (){
870
+ ; CHECK-LABEL: fastcc_call_nonfastcc:
871
+ ; CHECK: # %bb.0:
872
+ ; CHECK-NEXT: addi sp, sp, -16
873
+ ; CHECK-NEXT: .cfi_def_cfa_offset 16
874
+ ; CHECK-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
875
+ ; CHECK-NEXT: .cfi_offset ra, -4
876
+ ; CHECK-NEXT: li t0, 10
877
+ ; CHECK-NEXT: li t1, 9
878
+ ; CHECK-NEXT: li a0, 1
879
+ ; CHECK-NEXT: li a1, 2
880
+ ; CHECK-NEXT: li a2, 3
881
+ ; CHECK-NEXT: li a3, 4
882
+ ; CHECK-NEXT: li a4, 5
883
+ ; CHECK-NEXT: li a5, 6
884
+ ; CHECK-NEXT: li a6, 7
885
+ ; CHECK-NEXT: li a7, 8
886
+ ; CHECK-NEXT: sw t1, 0(sp)
887
+ ; CHECK-NEXT: sw t0, 4(sp)
888
+ ; CHECK-NEXT: call external_many_args
889
+ ; CHECK-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
890
+ ; CHECK-NEXT: .cfi_restore ra
891
+ ; CHECK-NEXT: addi sp, sp, 16
892
+ ; CHECK-NEXT: .cfi_def_cfa_offset 0
893
+ ; CHECK-NEXT: ret
894
+ ;
895
+ ; RV64I-LABEL: fastcc_call_nonfastcc:
896
+ ; RV64I: # %bb.0:
897
+ ; RV64I-NEXT: addi sp, sp, -32
898
+ ; RV64I-NEXT: .cfi_def_cfa_offset 32
899
+ ; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
900
+ ; RV64I-NEXT: .cfi_offset ra, -8
901
+ ; RV64I-NEXT: li t0, 10
902
+ ; RV64I-NEXT: li t1, 9
903
+ ; RV64I-NEXT: li a0, 1
904
+ ; RV64I-NEXT: li a1, 2
905
+ ; RV64I-NEXT: li a2, 3
906
+ ; RV64I-NEXT: li a3, 4
907
+ ; RV64I-NEXT: li a4, 5
908
+ ; RV64I-NEXT: li a5, 6
909
+ ; RV64I-NEXT: li a6, 7
910
+ ; RV64I-NEXT: li a7, 8
911
+ ; RV64I-NEXT: sd t1, 0(sp)
912
+ ; RV64I-NEXT: sd t0, 8(sp)
913
+ ; RV64I-NEXT: call external_many_args
914
+ ; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
915
+ ; RV64I-NEXT: .cfi_restore ra
916
+ ; RV64I-NEXT: addi sp, sp, 32
917
+ ; RV64I-NEXT: .cfi_def_cfa_offset 0
918
+ ; RV64I-NEXT: ret
919
+ ;
920
+ ; RV64I-SMALL-LABEL: fastcc_call_nonfastcc:
921
+ ; RV64I-SMALL: # %bb.0:
922
+ ; RV64I-SMALL-NEXT: addi sp, sp, -32
923
+ ; RV64I-SMALL-NEXT: .cfi_def_cfa_offset 32
924
+ ; RV64I-SMALL-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
925
+ ; RV64I-SMALL-NEXT: .cfi_offset ra, -8
926
+ ; RV64I-SMALL-NEXT: li t0, 10
927
+ ; RV64I-SMALL-NEXT: li t1, 9
928
+ ; RV64I-SMALL-NEXT: li a0, 1
929
+ ; RV64I-SMALL-NEXT: li a1, 2
930
+ ; RV64I-SMALL-NEXT: li a2, 3
931
+ ; RV64I-SMALL-NEXT: li a3, 4
932
+ ; RV64I-SMALL-NEXT: li a4, 5
933
+ ; RV64I-SMALL-NEXT: li a5, 6
934
+ ; RV64I-SMALL-NEXT: li a6, 7
935
+ ; RV64I-SMALL-NEXT: li a7, 8
936
+ ; RV64I-SMALL-NEXT: sd t1, 0(sp)
937
+ ; RV64I-SMALL-NEXT: sd t0, 8(sp)
938
+ ; RV64I-SMALL-NEXT: call external_many_args
939
+ ; RV64I-SMALL-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
940
+ ; RV64I-SMALL-NEXT: .cfi_restore ra
941
+ ; RV64I-SMALL-NEXT: addi sp, sp, 32
942
+ ; RV64I-SMALL-NEXT: .cfi_def_cfa_offset 0
943
+ ; RV64I-SMALL-NEXT: ret
944
+ ;
945
+ ; RV64I-MEDIUM-LABEL: fastcc_call_nonfastcc:
946
+ ; RV64I-MEDIUM: # %bb.0:
947
+ ; RV64I-MEDIUM-NEXT: addi sp, sp, -32
948
+ ; RV64I-MEDIUM-NEXT: .cfi_def_cfa_offset 32
949
+ ; RV64I-MEDIUM-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
950
+ ; RV64I-MEDIUM-NEXT: .cfi_offset ra, -8
951
+ ; RV64I-MEDIUM-NEXT: li t0, 10
952
+ ; RV64I-MEDIUM-NEXT: li t1, 9
953
+ ; RV64I-MEDIUM-NEXT: li a0, 1
954
+ ; RV64I-MEDIUM-NEXT: li a1, 2
955
+ ; RV64I-MEDIUM-NEXT: li a2, 3
956
+ ; RV64I-MEDIUM-NEXT: li a3, 4
957
+ ; RV64I-MEDIUM-NEXT: li a4, 5
958
+ ; RV64I-MEDIUM-NEXT: li a5, 6
959
+ ; RV64I-MEDIUM-NEXT: li a6, 7
960
+ ; RV64I-MEDIUM-NEXT: li a7, 8
961
+ ; RV64I-MEDIUM-NEXT: sd t1, 0(sp)
962
+ ; RV64I-MEDIUM-NEXT: sd t0, 8(sp)
963
+ ; RV64I-MEDIUM-NEXT: call external_many_args
964
+ ; RV64I-MEDIUM-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
965
+ ; RV64I-MEDIUM-NEXT: .cfi_restore ra
966
+ ; RV64I-MEDIUM-NEXT: addi sp, sp, 32
967
+ ; RV64I-MEDIUM-NEXT: .cfi_def_cfa_offset 0
968
+ ; RV64I-MEDIUM-NEXT: ret
969
+ ;
970
+ ; RV64I-LARGE-LABEL: fastcc_call_nonfastcc:
971
+ ; RV64I-LARGE: # %bb.0:
972
+ ; RV64I-LARGE-NEXT: addi sp, sp, -32
973
+ ; RV64I-LARGE-NEXT: .cfi_def_cfa_offset 32
974
+ ; RV64I-LARGE-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
975
+ ; RV64I-LARGE-NEXT: .cfi_offset ra, -8
976
+ ; RV64I-LARGE-NEXT: li t0, 10
977
+ ; RV64I-LARGE-NEXT: li t1, 9
978
+ ; RV64I-LARGE-NEXT: .Lpcrel_hi6:
979
+ ; RV64I-LARGE-NEXT: auipc a5, %pcrel_hi(.LCPI11_0)
980
+ ; RV64I-LARGE-NEXT: li a0, 1
981
+ ; RV64I-LARGE-NEXT: li a1, 2
982
+ ; RV64I-LARGE-NEXT: li a2, 3
983
+ ; RV64I-LARGE-NEXT: li a3, 4
984
+ ; RV64I-LARGE-NEXT: li a4, 5
985
+ ; RV64I-LARGE-NEXT: ld t2, %pcrel_lo(.Lpcrel_hi6)(a5)
986
+ ; RV64I-LARGE-NEXT: li a5, 6
987
+ ; RV64I-LARGE-NEXT: li a6, 7
988
+ ; RV64I-LARGE-NEXT: li a7, 8
989
+ ; RV64I-LARGE-NEXT: sd t1, 0(sp)
990
+ ; RV64I-LARGE-NEXT: sd t0, 8(sp)
991
+ ; RV64I-LARGE-NEXT: jalr t2
992
+ ; RV64I-LARGE-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
993
+ ; RV64I-LARGE-NEXT: .cfi_restore ra
994
+ ; RV64I-LARGE-NEXT: addi sp, sp, 32
995
+ ; RV64I-LARGE-NEXT: .cfi_def_cfa_offset 0
996
+ ; RV64I-LARGE-NEXT: ret
997
+ ;
998
+ ; RV64I-LARGE-ZICFILP-LABEL: fastcc_call_nonfastcc:
999
+ ; RV64I-LARGE-ZICFILP: # %bb.0:
1000
+ ; RV64I-LARGE-ZICFILP-NEXT: lpad 0
1001
+ ; RV64I-LARGE-ZICFILP-NEXT: addi sp, sp, -32
1002
+ ; RV64I-LARGE-ZICFILP-NEXT: .cfi_def_cfa_offset 32
1003
+ ; RV64I-LARGE-ZICFILP-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
1004
+ ; RV64I-LARGE-ZICFILP-NEXT: .cfi_offset ra, -8
1005
+ ; RV64I-LARGE-ZICFILP-NEXT: li t0, 10
1006
+ ; RV64I-LARGE-ZICFILP-NEXT: li t1, 9
1007
+ ; RV64I-LARGE-ZICFILP-NEXT: .Lpcrel_hi6:
1008
+ ; RV64I-LARGE-ZICFILP-NEXT: auipc a5, %pcrel_hi(.LCPI11_0)
1009
+ ; RV64I-LARGE-ZICFILP-NEXT: li a0, 1
1010
+ ; RV64I-LARGE-ZICFILP-NEXT: li a1, 2
1011
+ ; RV64I-LARGE-ZICFILP-NEXT: li a2, 3
1012
+ ; RV64I-LARGE-ZICFILP-NEXT: li a3, 4
1013
+ ; RV64I-LARGE-ZICFILP-NEXT: li a4, 5
1014
+ ; RV64I-LARGE-ZICFILP-NEXT: ld t2, %pcrel_lo(.Lpcrel_hi6)(a5)
1015
+ ; RV64I-LARGE-ZICFILP-NEXT: li a5, 6
1016
+ ; RV64I-LARGE-ZICFILP-NEXT: li a6, 7
1017
+ ; RV64I-LARGE-ZICFILP-NEXT: li a7, 8
1018
+ ; RV64I-LARGE-ZICFILP-NEXT: sd t1, 0(sp)
1019
+ ; RV64I-LARGE-ZICFILP-NEXT: sd t0, 8(sp)
1020
+ ; RV64I-LARGE-ZICFILP-NEXT: jalr t2
1021
+ ; RV64I-LARGE-ZICFILP-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
1022
+ ; RV64I-LARGE-ZICFILP-NEXT: .cfi_restore ra
1023
+ ; RV64I-LARGE-ZICFILP-NEXT: addi sp, sp, 32
1024
+ ; RV64I-LARGE-ZICFILP-NEXT: .cfi_def_cfa_offset 0
1025
+ ; RV64I-LARGE-ZICFILP-NEXT: ret
1026
+ call void @external_many_args (i32 1 , i32 2 ,i32 3 ,i32 4 ,i32 5 ,i32 6 ,i32 7 ,i32 8 ,i32 9 ,i32 10 )
1027
+ ret void
1028
+ }
1029
+
868
1030
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
869
1031
; RV32I: {{.*}}
870
1032
; RV32I-PIC: {{.*}}
0 commit comments