151208eacSJames Y Knight; RUN: llc -march=sparc < %s | FileCheck %s -check-prefix=V8 -check-prefix=V8-BE
251208eacSJames Y Knight; RUN: llc -march=sparcel < %s | FileCheck %s -check-prefix=V8 -check-prefix=V8-EL
37dae9ce0SVenkatraman Govindaraju; RUN: llc -march=sparc -O0 < %s | FileCheck %s -check-prefix=V8-UNOPT
47dae9ce0SVenkatraman Govindaraju; RUN: llc -march=sparc -mattr=v9 < %s | FileCheck %s -check-prefix=V9
55ae77f75SVenkatraman Govindaraju; RUN: llc -mtriple=sparc64-unknown-linux < %s | FileCheck %s -check-prefix=SPARC64
67dae9ce0SVenkatraman Govindaraju
7f799e3f9SStephen Lin; V8-LABEL:     test_neg:
87dae9ce0SVenkatraman Govindaraju; V8:     call get_double
951208eacSJames Y Knight; V8-BE:     fnegs %f0, %f0
1051208eacSJames Y Knight; V8-EL:     fnegs %f1, %f1
117dae9ce0SVenkatraman Govindaraju
12d24ab20eSStephen Lin; V8-UNOPT-LABEL:     test_neg:
137dae9ce0SVenkatraman Govindaraju; V8-UNOPT:     fnegs
147dae9ce0SVenkatraman Govindaraju; V8-UNOPT:     ! implicit-def
157dae9ce0SVenkatraman Govindaraju; V8-UNOPT:     fmovs {{.+}}, %f0
167dae9ce0SVenkatraman Govindaraju; V8-UNOPT:     fmovs {{.+}}, %f1
177dae9ce0SVenkatraman Govindaraju
18f799e3f9SStephen Lin; V9-LABEL:     test_neg:
197dae9ce0SVenkatraman Govindaraju; V9:     fnegd %f0, %f0
207dae9ce0SVenkatraman Govindaraju
215ae77f75SVenkatraman Govindaraju; SPARC64-LABEL: test_neg:
225ae77f75SVenkatraman Govindaraju; SPARC64:       fnegd %f0, %f0
235ae77f75SVenkatraman Govindaraju
247dae9ce0SVenkatraman Govindarajudefine double @test_neg() {
257dae9ce0SVenkatraman Govindarajuentry:
267dae9ce0SVenkatraman Govindaraju  %0 = tail call double @get_double()
277dae9ce0SVenkatraman Govindaraju  %1 = fsub double -0.000000e+00, %0
287dae9ce0SVenkatraman Govindaraju  ret double %1
297dae9ce0SVenkatraman Govindaraju}
307dae9ce0SVenkatraman Govindaraju
31f799e3f9SStephen Lin; V8-LABEL:     test_abs:
3251208eacSJames Y Knight; V8-BE:     fabss %f0, %f0
3351208eacSJames Y Knight; V8-EL:     fabss %f1, %f1
347dae9ce0SVenkatraman Govindaraju
35d24ab20eSStephen Lin; V8-UNOPT-LABEL:     test_abs:
367dae9ce0SVenkatraman Govindaraju; V8-UNOPT:     fabss
377dae9ce0SVenkatraman Govindaraju; V8-UNOPT:     ! implicit-def
387dae9ce0SVenkatraman Govindaraju; V8-UNOPT:     fmovs {{.+}}, %f0
397dae9ce0SVenkatraman Govindaraju; V8-UNOPT:     fmovs {{.+}}, %f1
407dae9ce0SVenkatraman Govindaraju
41f799e3f9SStephen Lin; V9-LABEL:     test_abs:
427dae9ce0SVenkatraman Govindaraju; V9:     fabsd %f0, %f0
437dae9ce0SVenkatraman Govindaraju
445ae77f75SVenkatraman Govindaraju
455ae77f75SVenkatraman Govindaraju; SPARC64-LABEL:     test_abs:
465ae77f75SVenkatraman Govindaraju; SPARC64:     fabsd %f0, %f0
475ae77f75SVenkatraman Govindaraju
487dae9ce0SVenkatraman Govindarajudefine double @test_abs() {
497dae9ce0SVenkatraman Govindarajuentry:
507dae9ce0SVenkatraman Govindaraju  %0 = tail call double @get_double()
517dae9ce0SVenkatraman Govindaraju  %1 = tail call double @llvm.fabs.f64(double %0)
527dae9ce0SVenkatraman Govindaraju  ret double %1
537dae9ce0SVenkatraman Govindaraju}
547dae9ce0SVenkatraman Govindaraju
557dae9ce0SVenkatraman Govindarajudeclare double @get_double()
567dae9ce0SVenkatraman Govindarajudeclare double @llvm.fabs.f64(double) nounwind readonly
577dae9ce0SVenkatraman Govindaraju
5812d8089bSVenkatraman Govindaraju; V8-LABEL:    test_v9_floatreg:
591f3e6af7SJames Y Knight; V8:          fsubd {{.+}}, {{.+}}, [[R:%f(((1|2)?(0|2|4|6|8))|30)]]
6012d8089bSVenkatraman Govindaraju; V8:          std [[R]], [%{{.+}}]
6112d8089bSVenkatraman Govindaraju; V8:          ldd [%{{.+}}], %f0
621f3e6af7SJames Y Knight; V8:          faddd {{.+}}, {{.+}}, {{.+}}
6312d8089bSVenkatraman Govindaraju
6412d8089bSVenkatraman Govindaraju; V9-LABEL:    test_v9_floatreg:
6512d8089bSVenkatraman Govindaraju; V9:          fsubd {{.+}}, {{.+}}, {{.+}}
661f3e6af7SJames Y Knight; V9:          faddd {{.+}}, {{.+}}, %f0
6712d8089bSVenkatraman Govindaraju
685ae77f75SVenkatraman Govindaraju; SPARC64-LABEL:    test_v9_floatreg:
695ae77f75SVenkatraman Govindaraju; SPARC64:          fsubd {{.+}}, {{.+}}, {{.+}}
701f3e6af7SJames Y Knight; SPARC64:          faddd {{.+}}, {{.+}}, %f0
7112d8089bSVenkatraman Govindaraju
7212d8089bSVenkatraman Govindarajudefine double @test_v9_floatreg() {
7312d8089bSVenkatraman Govindarajuentry:
7412d8089bSVenkatraman Govindaraju  %0 = tail call double @get_double()
7512d8089bSVenkatraman Govindaraju  %1 = tail call double @get_double()
7612d8089bSVenkatraman Govindaraju  %2 = fsub double %0, %1
7712d8089bSVenkatraman Govindaraju  tail call void asm sideeffect "", "~{f0},~{f2},~{f3},~{f4},~{f5},~{f6},~{f7},~{f8},~{f9},~{f10},~{f11},~{f12},~{f13},~{f14},~{f15},~{f16},~{f17},~{f18},~{f19},~{f20},~{f21},~{f22},~{f23},~{f24},~{f25},~{f26},~{f27},~{f28},~{f29},~{f30},~{f31}"()
7812d8089bSVenkatraman Govindaraju  %3 = fadd double %2, %2
7912d8089bSVenkatraman Govindaraju  ret double %3
8012d8089bSVenkatraman Govindaraju}
8112d8089bSVenkatraman Govindaraju
825ae77f75SVenkatraman Govindaraju; V8-LABEL:    test_xtos_stox
835ae77f75SVenkatraman Govindaraju; V8:          call __floatdisf
845ae77f75SVenkatraman Govindaraju; V8:          call __fixsfdi
8512d8089bSVenkatraman Govindaraju
865ae77f75SVenkatraman Govindaraju; V9-LABEL:    test_xtos_stox
875ae77f75SVenkatraman Govindaraju; V9:          call __floatdisf
885ae77f75SVenkatraman Govindaraju; V9:          call __fixsfdi
895ae77f75SVenkatraman Govindaraju
905ae77f75SVenkatraman Govindaraju; SPARC64-LABEL:    test_xtos_stox
915ae77f75SVenkatraman Govindaraju; SPARC64:          fxtos
925ae77f75SVenkatraman Govindaraju; SPARC64:          fstox
935ae77f75SVenkatraman Govindaraju
945ae77f75SVenkatraman Govindarajudefine void @test_xtos_stox(i64 %a, i64* %ptr0, float* %ptr1) {
955ae77f75SVenkatraman Govindarajuentry:
965ae77f75SVenkatraman Govindaraju  %0 = sitofp i64 %a to float
975ae77f75SVenkatraman Govindaraju  store float %0, float* %ptr1, align 8
985ae77f75SVenkatraman Govindaraju  %1 = fptosi float %0 to i64
995ae77f75SVenkatraman Govindaraju  store i64 %1, i64* %ptr0, align 8
1005ae77f75SVenkatraman Govindaraju  ret void
1015ae77f75SVenkatraman Govindaraju}
1025ae77f75SVenkatraman Govindaraju
1035ae77f75SVenkatraman Govindaraju; V8-LABEL:    test_itos_stoi
1045ae77f75SVenkatraman Govindaraju; V8:          fitos
1055ae77f75SVenkatraman Govindaraju; V8:          fstoi
1065ae77f75SVenkatraman Govindaraju
1075ae77f75SVenkatraman Govindaraju; V9-LABEL:    test_itos_stoi
1085ae77f75SVenkatraman Govindaraju; V9:          fitos
1095ae77f75SVenkatraman Govindaraju; V9:          fstoi
1105ae77f75SVenkatraman Govindaraju
1115ae77f75SVenkatraman Govindaraju; SPARC64-LABEL:    test_itos_stoi
1125ae77f75SVenkatraman Govindaraju; SPARC64:          fitos
1135ae77f75SVenkatraman Govindaraju; SPARC64:          fstoi
1145ae77f75SVenkatraman Govindaraju
1155ae77f75SVenkatraman Govindarajudefine void @test_itos_stoi(i32 %a, i32* %ptr0, float* %ptr1) {
1165ae77f75SVenkatraman Govindarajuentry:
1175ae77f75SVenkatraman Govindaraju  %0 = sitofp i32 %a to float
1185ae77f75SVenkatraman Govindaraju  store float %0, float* %ptr1, align 8
1195ae77f75SVenkatraman Govindaraju  %1 = fptosi float %0 to i32
1205ae77f75SVenkatraman Govindaraju  store i32 %1, i32* %ptr0, align 8
1215ae77f75SVenkatraman Govindaraju  ret void
1225ae77f75SVenkatraman Govindaraju}
1235ae77f75SVenkatraman Govindaraju
1245ae77f75SVenkatraman Govindaraju
1255ae77f75SVenkatraman Govindaraju; V8-LABEL:    test_xtod_dtox
1265ae77f75SVenkatraman Govindaraju; V8:          call __floatdidf
1275ae77f75SVenkatraman Govindaraju; V8:          call __fixdfdi
1285ae77f75SVenkatraman Govindaraju
1295ae77f75SVenkatraman Govindaraju; V9-LABEL:    test_xtod_dtox
1305ae77f75SVenkatraman Govindaraju; V9:          call __floatdidf
1315ae77f75SVenkatraman Govindaraju; V9:          call __fixdfdi
1325ae77f75SVenkatraman Govindaraju
1335ae77f75SVenkatraman Govindaraju; SPARC64-LABEL:    test_xtod_dtox
1345ae77f75SVenkatraman Govindaraju; SPARC64:          fxtod
1355ae77f75SVenkatraman Govindaraju; SPARC64:          fdtox
1365ae77f75SVenkatraman Govindaraju
1375ae77f75SVenkatraman Govindarajudefine void @test_xtod_dtox(i64 %a, i64* %ptr0, double* %ptr1) {
1385ae77f75SVenkatraman Govindarajuentry:
1395ae77f75SVenkatraman Govindaraju  %0 = sitofp i64 %a to double
1405ae77f75SVenkatraman Govindaraju  store double %0, double* %ptr1, align 8
1415ae77f75SVenkatraman Govindaraju  %1 = fptosi double %0 to i64
1425ae77f75SVenkatraman Govindaraju  store i64 %1, i64* %ptr0, align 8
1435ae77f75SVenkatraman Govindaraju  ret void
1445ae77f75SVenkatraman Govindaraju}
1455ae77f75SVenkatraman Govindaraju
1465ae77f75SVenkatraman Govindaraju; V8-LABEL:    test_itod_dtoi
1475ae77f75SVenkatraman Govindaraju; V8:          fitod
1485ae77f75SVenkatraman Govindaraju; V8:          fdtoi
1495ae77f75SVenkatraman Govindaraju
1505ae77f75SVenkatraman Govindaraju; V9-LABEL:    test_itod_dtoi
1515ae77f75SVenkatraman Govindaraju; V9:          fitod
1525ae77f75SVenkatraman Govindaraju; V9:          fdtoi
1535ae77f75SVenkatraman Govindaraju
1545ae77f75SVenkatraman Govindaraju; SPARC64-LABEL:    test_itod_dtoi
1555ae77f75SVenkatraman Govindaraju; SPARC64:          fitod
1565ae77f75SVenkatraman Govindaraju; SPARC64:          fdtoi
1575ae77f75SVenkatraman Govindaraju
1583e0023b8SMehdi Aminidefine void @test_itod_dtoi(i32 %a, double %b, i32* %ptr0, double* %ptr1) {
1595ae77f75SVenkatraman Govindarajuentry:
1605ae77f75SVenkatraman Govindaraju  %0 = sitofp i32 %a to double
1615ae77f75SVenkatraman Govindaraju  store double %0, double* %ptr1, align 8
1623e0023b8SMehdi Amini  %1 = fptosi double %b to i32
1635ae77f75SVenkatraman Govindaraju  store i32 %1, i32* %ptr0, align 8
1645ae77f75SVenkatraman Govindaraju  ret void
1655ae77f75SVenkatraman Govindaraju}
1665ae77f75SVenkatraman Govindaraju
1675ae77f75SVenkatraman Govindaraju; V8-LABEL:    test_uxtos_stoux
1685ae77f75SVenkatraman Govindaraju; V8:          call __floatundisf
1695ae77f75SVenkatraman Govindaraju; V8:          call __fixunssfdi
1705ae77f75SVenkatraman Govindaraju
1715ae77f75SVenkatraman Govindaraju; V9-LABEL:    test_uxtos_stoux
1725ae77f75SVenkatraman Govindaraju; V9:          call __floatundisf
1735ae77f75SVenkatraman Govindaraju; V9:          call __fixunssfdi
1745ae77f75SVenkatraman Govindaraju
1755ae77f75SVenkatraman Govindaraju; SPARC64-LABEL:   test_uxtos_stoux
1765ae77f75SVenkatraman Govindaraju; SPARC64-NOT:     call __floatundisf
1775ae77f75SVenkatraman Govindaraju; SPARC64-NOT:     call __fixunssfdi
1785ae77f75SVenkatraman Govindaraju
1795ae77f75SVenkatraman Govindarajudefine void @test_uxtos_stoux(i64 %a, i64* %ptr0, float* %ptr1) {
1805ae77f75SVenkatraman Govindarajuentry:
1815ae77f75SVenkatraman Govindaraju  %0 = uitofp i64 %a to float
1825ae77f75SVenkatraman Govindaraju  store float %0, float* %ptr1, align 8
1835ae77f75SVenkatraman Govindaraju  %1 = fptoui float %0 to i64
1845ae77f75SVenkatraman Govindaraju  store i64 %1, i64* %ptr0, align 8
1855ae77f75SVenkatraman Govindaraju  ret void
1865ae77f75SVenkatraman Govindaraju}
1875ae77f75SVenkatraman Govindaraju
1885ae77f75SVenkatraman Govindaraju; V8-LABEL:    test_utos_stou
1895ae77f75SVenkatraman Govindaraju; V8:          fdtos
1905ae77f75SVenkatraman Govindaraju; V8:          fstoi
1915ae77f75SVenkatraman Govindaraju
1925ae77f75SVenkatraman Govindaraju; V9-LABEL:    test_utos_stou
1935ae77f75SVenkatraman Govindaraju; V9:          fdtos
1945ae77f75SVenkatraman Govindaraju; V9:          fstoi
1955ae77f75SVenkatraman Govindaraju
1965ae77f75SVenkatraman Govindaraju; SPARC64-LABEL:    test_utos_stou
197*efef032fSRichard Trieu; SPARC64:     fdtos
1985ae77f75SVenkatraman Govindaraju; SPARC64:     fstoi
1995ae77f75SVenkatraman Govindaraju
2005ae77f75SVenkatraman Govindarajudefine void @test_utos_stou(i32 %a, i32* %ptr0, float* %ptr1) {
2015ae77f75SVenkatraman Govindarajuentry:
2025ae77f75SVenkatraman Govindaraju  %0 = uitofp i32 %a to float
2035ae77f75SVenkatraman Govindaraju  store float %0, float* %ptr1, align 8
2045ae77f75SVenkatraman Govindaraju  %1 = fptoui float %0 to i32
2055ae77f75SVenkatraman Govindaraju  store i32 %1, i32* %ptr0, align 8
2065ae77f75SVenkatraman Govindaraju  ret void
2075ae77f75SVenkatraman Govindaraju}
2085ae77f75SVenkatraman Govindaraju
2095ae77f75SVenkatraman Govindaraju
2105ae77f75SVenkatraman Govindaraju; V8-LABEL:    test_uxtod_dtoux
2115ae77f75SVenkatraman Govindaraju; V8:          call __floatundidf
2125ae77f75SVenkatraman Govindaraju; V8:          call __fixunsdfdi
2135ae77f75SVenkatraman Govindaraju
2145ae77f75SVenkatraman Govindaraju; V9-LABEL:    test_uxtod_dtoux
2155ae77f75SVenkatraman Govindaraju; V9:          call __floatundidf
2165ae77f75SVenkatraman Govindaraju; V9:          call __fixunsdfdi
2175ae77f75SVenkatraman Govindaraju
2185ae77f75SVenkatraman Govindaraju; SPARC64-LABEL:    test_uxtod_dtoux
2195ae77f75SVenkatraman Govindaraju; SPARC64-NOT:          call __floatundidf
2205ae77f75SVenkatraman Govindaraju; SPARC64-NOT:          call __floatunsdfdi
2215ae77f75SVenkatraman Govindaraju
2225ae77f75SVenkatraman Govindarajudefine void @test_uxtod_dtoux(i64 %a, i64* %ptr0, double* %ptr1) {
2235ae77f75SVenkatraman Govindarajuentry:
2245ae77f75SVenkatraman Govindaraju  %0 = uitofp i64 %a to double
2255ae77f75SVenkatraman Govindaraju  store double %0, double* %ptr1, align 8
2265ae77f75SVenkatraman Govindaraju  %1 = fptoui double %0 to i64
2275ae77f75SVenkatraman Govindaraju  store i64 %1, i64* %ptr0, align 8
2285ae77f75SVenkatraman Govindaraju  ret void
2295ae77f75SVenkatraman Govindaraju}
2305ae77f75SVenkatraman Govindaraju
2315ae77f75SVenkatraman Govindaraju; V8-LABEL:    test_utod_dtou
2325ae77f75SVenkatraman Govindaraju; V8-NOT:      fitod
2335ae77f75SVenkatraman Govindaraju; V8:          fdtoi
2345ae77f75SVenkatraman Govindaraju
2355ae77f75SVenkatraman Govindaraju; V9-LABEL:    test_utod_dtou
2365ae77f75SVenkatraman Govindaraju; V9-NOT:      fitod
2375ae77f75SVenkatraman Govindaraju; V9:          fdtoi
2385ae77f75SVenkatraman Govindaraju
2395ae77f75SVenkatraman Govindaraju; SPARC64-LABEL:    test_utod_dtou
2405ae77f75SVenkatraman Govindaraju; SPARC64-NOT:      fitod
2415ae77f75SVenkatraman Govindaraju; SPARC64:          fdtoi
2425ae77f75SVenkatraman Govindaraju
2435ae77f75SVenkatraman Govindarajudefine void @test_utod_dtou(i32 %a, double %b, i32* %ptr0, double* %ptr1) {
2445ae77f75SVenkatraman Govindarajuentry:
2455ae77f75SVenkatraman Govindaraju  %0 = uitofp i32 %a to double
2465ae77f75SVenkatraman Govindaraju  store double %0, double* %ptr1, align 8
2475ae77f75SVenkatraman Govindaraju  %1 = fptoui double %b to i32
2485ae77f75SVenkatraman Govindaraju  store i32 %1, i32* %ptr0, align 8
2495ae77f75SVenkatraman Govindaraju  ret void
2505ae77f75SVenkatraman Govindaraju}
251