Skip to content

Commit b3a57f3

Browse files
committed
Fix long double __Complex returns
1 parent 65c0156 commit b3a57f3

File tree

2 files changed

+67
-104
lines changed

2 files changed

+67
-104
lines changed

llvm/lib/Target/Sparc/SparcCallingConv.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ def RetCC_Sparc32 : CallingConv<[
3434
CCIfType<[i32], CCAssignToReg<[I0, I1, I2, I3, I4, I5]>>,
3535
CCIfType<[f32], CCAssignToReg<[F0, F1, F2, F3]>>,
3636
CCIfType<[f64], CCAssignToReg<[D0, D1]>>,
37+
CCIfType<[f128], CCAssignToReg<[Q0, Q1]>>,
3738
CCIfType<[v2i32], CCCustom<"CC_Sparc_Assign_Ret_Split_64">>
3839
]>;
3940

llvm/test/CodeGen/SPARC/llvm.sincos.ll

Lines changed: 66 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -943,45 +943,33 @@ define { <2 x double>, <2 x double> } @test_sincos_v2f64(<2 x double> %a) #0 {
943943
define void @test_sincos_f128(ptr sret({ fp128, fp128 }) %ret, ptr %in) #0 {
944944
; SPARC32-LABEL: test_sincos_f128:
945945
; SPARC32: ! %bb.0:
946-
; SPARC32-NEXT: save %sp, -200, %sp
946+
; SPARC32-NEXT: save %sp, -176, %sp
947947
; SPARC32-NEXT: ld [%fp+64], %i1
948948
; SPARC32-NEXT: ldd [%i0], %f0
949-
; SPARC32-NEXT: std %f0, [%fp+-96]
950-
; SPARC32-NEXT: std %f2, [%fp+-88] ! 16-byte Folded Spill
949+
; SPARC32-NEXT: std %f0, [%fp+-72]
950+
; SPARC32-NEXT: std %f2, [%fp+-64] ! 16-byte Folded Spill
951951
; SPARC32-NEXT: ldd [%i0+8], %f4
952-
; SPARC32-NEXT: std %f4, [%fp+-80] ! 8-byte Folded Spill
953-
; SPARC32-NEXT: add %fp, -64, %i0
954-
; SPARC32-NEXT: st %i0, [%sp+92]
955-
; SPARC32-NEXT: add %fp, -48, %i0
956-
; SPARC32-NEXT: st %i0, [%sp+64]
957-
; SPARC32-NEXT: std %f4, [%fp+-56]
958-
; SPARC32-NEXT: call sinl
959-
; SPARC32-NEXT: std %f0, [%fp+-64]
960-
; SPARC32-NEXT: unimp 16
952+
; SPARC32-NEXT: std %f4, [%fp+-56] ! 8-byte Folded Spill
961953
; SPARC32-NEXT: add %fp, -32, %i0
962954
; SPARC32-NEXT: st %i0, [%sp+92]
963-
; SPARC32-NEXT: add %fp, -16, %i0
964-
; SPARC32-NEXT: st %i0, [%sp+64]
965-
; SPARC32-NEXT: ldd [%fp+-80], %f0 ! 8-byte Folded Reload
966-
; SPARC32-NEXT: std %f0, [%fp+-24]
967-
; SPARC32-NEXT: ldd [%fp+-96], %f0
968-
; SPARC32-NEXT: ldd [%fp+-88], %f2 ! 16-byte Folded Reload
955+
; SPARC32-NEXT: std %f4, [%fp+-24]
956+
; SPARC32-NEXT: call sinl
969957
; SPARC32-NEXT: std %f0, [%fp+-32]
970-
; SPARC32-NEXT: ldd [%fp+-48], %f0
971-
; SPARC32-NEXT: std %f0, [%fp+-80]
972-
; SPARC32-NEXT: std %f2, [%fp+-72] ! 16-byte Folded Spill
973-
; SPARC32-NEXT: ldd [%fp+-40], %f0
958+
; SPARC32-NEXT: std %f0, [%fp+-48]
959+
; SPARC32-NEXT: std %f2, [%fp+-40] ! 16-byte Folded Spill
960+
; SPARC32-NEXT: add %fp, -16, %i0
961+
; SPARC32-NEXT: st %i0, [%sp+92]
962+
; SPARC32-NEXT: ldd [%fp+-56], %f0 ! 8-byte Folded Reload
963+
; SPARC32-NEXT: std %f0, [%fp+-8]
964+
; SPARC32-NEXT: ldd [%fp+-72], %f0
965+
; SPARC32-NEXT: ldd [%fp+-64], %f2 ! 16-byte Folded Reload
974966
; SPARC32-NEXT: call cosl
975-
; SPARC32-NEXT: std %f0, [%fp+-96]
976-
; SPARC32-NEXT: unimp 16
977-
; SPARC32-NEXT: ldd [%fp+-8], %f0
978-
; SPARC32-NEXT: ldd [%fp+-16], %f4
979-
; SPARC32-NEXT: std %f0, [%i1+24]
980-
; SPARC32-NEXT: std %f4, [%i1+16]
981-
; SPARC32-NEXT: ldd [%fp+-96], %f0 ! 8-byte Folded Reload
982-
; SPARC32-NEXT: std %f0, [%i1+8]
983-
; SPARC32-NEXT: ldd [%fp+-80], %f0
984-
; SPARC32-NEXT: ldd [%fp+-72], %f2 ! 16-byte Folded Reload
967+
; SPARC32-NEXT: std %f0, [%fp+-16]
968+
; SPARC32-NEXT: std %f2, [%i1+24]
969+
; SPARC32-NEXT: std %f0, [%i1+16]
970+
; SPARC32-NEXT: ldd [%fp+-48], %f0
971+
; SPARC32-NEXT: ldd [%fp+-40], %f2 ! 16-byte Folded Reload
972+
; SPARC32-NEXT: std %f2, [%i1+8]
985973
; SPARC32-NEXT: std %f0, [%i1]
986974
; SPARC32-NEXT: jmp %i7+12
987975
; SPARC32-NEXT: restore %g0, %i1, %o0
@@ -1063,93 +1051,67 @@ define void @test_sincos_f128(ptr sret({ fp128, fp128 }) %ret, ptr %in) #0 {
10631051
define void @test_sincos_v2f128(ptr sret({ <2 x fp128>, <2 x fp128> }) %ret, ptr %in) #0 {
10641052
; SPARC32-LABEL: test_sincos_v2f128:
10651053
; SPARC32: ! %bb.0:
1066-
; SPARC32-NEXT: save %sp, -312, %sp
1054+
; SPARC32-NEXT: save %sp, -256, %sp
10671055
; SPARC32-NEXT: mov %i0, %i1
10681056
; SPARC32-NEXT: ld [%fp+64], %i0
1069-
; SPARC32-NEXT: ldd [%i1], %f0
1070-
; SPARC32-NEXT: std %f0, [%fp+-144]
1071-
; SPARC32-NEXT: std %f2, [%fp+-136] ! 16-byte Folded Spill
1072-
; SPARC32-NEXT: ldd [%i1+8], %f0
1073-
; SPARC32-NEXT: std %f0, [%fp+-152] ! 8-byte Folded Spill
10741057
; SPARC32-NEXT: ldd [%i1+16], %f0
1075-
; SPARC32-NEXT: std %f0, [%fp+-184]
1076-
; SPARC32-NEXT: std %f2, [%fp+-176] ! 16-byte Folded Spill
1077-
; SPARC32-NEXT: ldd [%i1+24], %f4
1078-
; SPARC32-NEXT: std %f4, [%fp+-168] ! 8-byte Folded Spill
1079-
; SPARC32-NEXT: add %fp, -128, %i1
1080-
; SPARC32-NEXT: st %i1, [%sp+92]
1081-
; SPARC32-NEXT: add %fp, -112, %i1
1082-
; SPARC32-NEXT: st %i1, [%sp+64]
1083-
; SPARC32-NEXT: std %f4, [%fp+-120]
1084-
; SPARC32-NEXT: call sinl
1085-
; SPARC32-NEXT: std %f0, [%fp+-128]
1086-
; SPARC32-NEXT: unimp 16
1058+
; SPARC32-NEXT: std %f0, [%fp+-80]
1059+
; SPARC32-NEXT: std %f2, [%fp+-72] ! 16-byte Folded Spill
1060+
; SPARC32-NEXT: ldd [%i1+24], %f0
1061+
; SPARC32-NEXT: std %f0, [%fp+-88] ! 8-byte Folded Spill
1062+
; SPARC32-NEXT: ldd [%i1], %f0
1063+
; SPARC32-NEXT: std %f0, [%fp+-152]
1064+
; SPARC32-NEXT: std %f2, [%fp+-144] ! 16-byte Folded Spill
1065+
; SPARC32-NEXT: ldd [%i1+8], %f4
1066+
; SPARC32-NEXT: std %f4, [%fp+-136] ! 8-byte Folded Spill
10871067
; SPARC32-NEXT: add %fp, -32, %i1
10881068
; SPARC32-NEXT: st %i1, [%sp+92]
1089-
; SPARC32-NEXT: add %fp, -16, %i1
1090-
; SPARC32-NEXT: st %i1, [%sp+64]
1091-
; SPARC32-NEXT: ldd [%fp+-152], %f0 ! 8-byte Folded Reload
1092-
; SPARC32-NEXT: std %f0, [%fp+-24]
1093-
; SPARC32-NEXT: ldd [%fp+-144], %f0
1094-
; SPARC32-NEXT: ldd [%fp+-136], %f2 ! 16-byte Folded Reload
1095-
; SPARC32-NEXT: call cosl
1069+
; SPARC32-NEXT: std %f4, [%fp+-24]
1070+
; SPARC32-NEXT: call sinl
10961071
; SPARC32-NEXT: std %f0, [%fp+-32]
1097-
; SPARC32-NEXT: unimp 16
1072+
; SPARC32-NEXT: std %f0, [%fp+-104]
1073+
; SPARC32-NEXT: std %f2, [%fp+-96] ! 16-byte Folded Spill
10981074
; SPARC32-NEXT: add %fp, -64, %i1
10991075
; SPARC32-NEXT: st %i1, [%sp+92]
1100-
; SPARC32-NEXT: add %fp, -48, %i1
1101-
; SPARC32-NEXT: st %i1, [%sp+64]
1102-
; SPARC32-NEXT: ldd [%fp+-152], %f0 ! 8-byte Folded Reload
1076+
; SPARC32-NEXT: ldd [%fp+-88], %f0 ! 8-byte Folded Reload
11031077
; SPARC32-NEXT: std %f0, [%fp+-56]
1104-
; SPARC32-NEXT: ldd [%fp+-144], %f0
1105-
; SPARC32-NEXT: ldd [%fp+-136], %f2 ! 16-byte Folded Reload
1078+
; SPARC32-NEXT: ldd [%fp+-80], %f0
1079+
; SPARC32-NEXT: ldd [%fp+-72], %f2 ! 16-byte Folded Reload
11061080
; SPARC32-NEXT: call sinl
11071081
; SPARC32-NEXT: std %f0, [%fp+-64]
1108-
; SPARC32-NEXT: unimp 16
1109-
; SPARC32-NEXT: add %fp, -96, %i1
1082+
; SPARC32-NEXT: std %f0, [%fp+-120]
1083+
; SPARC32-NEXT: std %f2, [%fp+-112] ! 16-byte Folded Spill
1084+
; SPARC32-NEXT: add %fp, -16, %i1
11101085
; SPARC32-NEXT: st %i1, [%sp+92]
1111-
; SPARC32-NEXT: add %fp, -80, %i1
1112-
; SPARC32-NEXT: st %i1, [%sp+64]
1113-
; SPARC32-NEXT: ldd [%fp+-168], %f0 ! 8-byte Folded Reload
1114-
; SPARC32-NEXT: std %f0, [%fp+-88]
1115-
; SPARC32-NEXT: ldd [%fp+-184], %f0
1116-
; SPARC32-NEXT: ldd [%fp+-176], %f2 ! 16-byte Folded Reload
1117-
; SPARC32-NEXT: std %f0, [%fp+-96]
1118-
; SPARC32-NEXT: ldd [%fp+-48], %f0
1119-
; SPARC32-NEXT: std %f0, [%fp+-144]
1120-
; SPARC32-NEXT: std %f2, [%fp+-136] ! 16-byte Folded Spill
1121-
; SPARC32-NEXT: ldd [%fp+-40], %f0
1122-
; SPARC32-NEXT: std %f0, [%fp+-152] ! 8-byte Folded Spill
1123-
; SPARC32-NEXT: ldd [%fp+-112], %f0
1124-
; SPARC32-NEXT: std %f0, [%fp+-168]
1125-
; SPARC32-NEXT: std %f2, [%fp+-160] ! 16-byte Folded Spill
1126-
; SPARC32-NEXT: ldd [%fp+-104], %f0
1127-
; SPARC32-NEXT: std %f0, [%fp+-184] ! 8-byte Folded Spill
1128-
; SPARC32-NEXT: ldd [%fp+-16], %f0
1129-
; SPARC32-NEXT: std %f0, [%fp+-200]
1130-
; SPARC32-NEXT: std %f2, [%fp+-192] ! 16-byte Folded Spill
1131-
; SPARC32-NEXT: ldd [%fp+-8], %f0
1086+
; SPARC32-NEXT: ldd [%fp+-136], %f0 ! 8-byte Folded Reload
1087+
; SPARC32-NEXT: std %f0, [%fp+-8]
1088+
; SPARC32-NEXT: ldd [%fp+-152], %f0
1089+
; SPARC32-NEXT: ldd [%fp+-144], %f2 ! 16-byte Folded Reload
11321090
; SPARC32-NEXT: call cosl
1133-
; SPARC32-NEXT: std %f0, [%fp+-208]
1134-
; SPARC32-NEXT: unimp 16
1135-
; SPARC32-NEXT: ldd [%fp+-72], %f0
1136-
; SPARC32-NEXT: ldd [%fp+-80], %f4
1137-
; SPARC32-NEXT: std %f0, [%i0+56]
1138-
; SPARC32-NEXT: std %f4, [%i0+48]
1139-
; SPARC32-NEXT: ldd [%fp+-208], %f0 ! 8-byte Folded Reload
1140-
; SPARC32-NEXT: std %f0, [%i0+40]
1141-
; SPARC32-NEXT: ldd [%fp+-200], %f0
1142-
; SPARC32-NEXT: ldd [%fp+-192], %f2 ! 16-byte Folded Reload
1091+
; SPARC32-NEXT: std %f0, [%fp+-16]
1092+
; SPARC32-NEXT: std %f0, [%fp+-136]
1093+
; SPARC32-NEXT: std %f2, [%fp+-128] ! 16-byte Folded Spill
1094+
; SPARC32-NEXT: add %fp, -48, %i1
1095+
; SPARC32-NEXT: st %i1, [%sp+92]
1096+
; SPARC32-NEXT: ldd [%fp+-88], %f0 ! 8-byte Folded Reload
1097+
; SPARC32-NEXT: std %f0, [%fp+-40]
1098+
; SPARC32-NEXT: ldd [%fp+-80], %f0
1099+
; SPARC32-NEXT: ldd [%fp+-72], %f2 ! 16-byte Folded Reload
1100+
; SPARC32-NEXT: call cosl
1101+
; SPARC32-NEXT: std %f0, [%fp+-48]
1102+
; SPARC32-NEXT: std %f2, [%i0+56]
1103+
; SPARC32-NEXT: std %f0, [%i0+48]
1104+
; SPARC32-NEXT: ldd [%fp+-136], %f0
1105+
; SPARC32-NEXT: ldd [%fp+-128], %f2 ! 16-byte Folded Reload
1106+
; SPARC32-NEXT: std %f2, [%i0+40]
11431107
; SPARC32-NEXT: std %f0, [%i0+32]
1144-
; SPARC32-NEXT: ldd [%fp+-184], %f0 ! 8-byte Folded Reload
1145-
; SPARC32-NEXT: std %f0, [%i0+24]
1146-
; SPARC32-NEXT: ldd [%fp+-168], %f0
1147-
; SPARC32-NEXT: ldd [%fp+-160], %f2 ! 16-byte Folded Reload
1108+
; SPARC32-NEXT: ldd [%fp+-120], %f0
1109+
; SPARC32-NEXT: ldd [%fp+-112], %f2 ! 16-byte Folded Reload
1110+
; SPARC32-NEXT: std %f2, [%i0+24]
11481111
; SPARC32-NEXT: std %f0, [%i0+16]
1149-
; SPARC32-NEXT: ldd [%fp+-152], %f0 ! 8-byte Folded Reload
1150-
; SPARC32-NEXT: std %f0, [%i0+8]
1151-
; SPARC32-NEXT: ldd [%fp+-144], %f0
1152-
; SPARC32-NEXT: ldd [%fp+-136], %f2 ! 16-byte Folded Reload
1112+
; SPARC32-NEXT: ldd [%fp+-104], %f0
1113+
; SPARC32-NEXT: ldd [%fp+-96], %f2 ! 16-byte Folded Reload
1114+
; SPARC32-NEXT: std %f2, [%i0+8]
11531115
; SPARC32-NEXT: std %f0, [%i0]
11541116
; SPARC32-NEXT: jmp %i7+12
11551117
; SPARC32-NEXT: restore

0 commit comments

Comments
 (0)