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