19e966dd2SAlex Bradbury; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 29e966dd2SAlex Bradbury; RUN: llc -mtriple=riscv32 -mattr=+d -verify-machineinstrs -target-abi=ilp32d < %s \ 337b474a2SJim Lin; RUN: | FileCheck -check-prefixes=RV32-ALL,F-ABI-ALL,D-ABI-ALL,RV32IFD-ILP32D %s 49e966dd2SAlex Bradbury; RUN: llc -mtriple=riscv32 -mattr=+f -verify-machineinstrs -target-abi=ilp32f < %s \ 537b474a2SJim Lin; RUN: | FileCheck -check-prefixes=RV32-ALL,F-ABI-ALL,RV32IF-ILP32F %s 69e966dd2SAlex Bradbury; RUN: llc -mtriple=riscv32 -mattr=+d -verify-machineinstrs -target-abi=ilp32 < %s \ 737b474a2SJim Lin; RUN: | FileCheck -check-prefixes=RV32-ALL,RV32-ILP32-ALL,RV32IFD-ILP32 %s 89e966dd2SAlex Bradbury; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \ 937b474a2SJim Lin; RUN: | FileCheck -check-prefixes=RV32-ALL,RV32-ILP32-ALL,RV32I-ILP32 %s 109e966dd2SAlex Bradbury; RUN: llc -mtriple=riscv64 -mattr=+d -verify-machineinstrs -target-abi=lp64d < %s \ 1137b474a2SJim Lin; RUN: | FileCheck -check-prefixes=RV64-ALL,F-ABI-ALL,D-ABI-ALL,RV64IFD-LP64D %s 129e966dd2SAlex Bradbury; RUN: llc -mtriple=riscv64 -mattr=+f -verify-machineinstrs -target-abi=lp64f < %s \ 1337b474a2SJim Lin; RUN: | FileCheck -check-prefixes=RV64-ALL,F-ABI-ALL,RV64IF-LP64F %s 149e966dd2SAlex Bradbury; RUN: llc -mtriple=riscv64 -mattr=+d -verify-machineinstrs -target-abi=lp64 < %s \ 1537b474a2SJim Lin; RUN: | FileCheck -check-prefixes=RV64-ALL,RV64-LP64-ALL,RV64IFD-LP64 %s 169e966dd2SAlex Bradbury; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \ 1737b474a2SJim Lin; RUN: | FileCheck -check-prefixes=RV64-ALL,RV64-LP64-ALL,RV64I-LP64 %s 189e966dd2SAlex Bradbury 199e966dd2SAlex Bradbury; This file checks for the backend's ability to tailcall libcalls. While other 209e966dd2SAlex Bradbury; tests exhaustively check for selection of libcalls, this file is focused on 219e966dd2SAlex Bradbury; testing a representative selection of libcalls under all relevant ABI and 229e966dd2SAlex Bradbury; ISA combinations. 239e966dd2SAlex Bradbury 249e966dd2SAlex Bradbury; Integer arithmetic libcalls: 259e966dd2SAlex Bradbury 269e966dd2SAlex Bradburydefine zeroext i8 @udiv8(i8 zeroext %a, i8 zeroext %b) nounwind { 279e966dd2SAlex Bradbury; RV32-ALL-LABEL: udiv8: 289e966dd2SAlex Bradbury; RV32-ALL: # %bb.0: 299e966dd2SAlex Bradbury; RV32-ALL-NEXT: addi sp, sp, -16 309e966dd2SAlex Bradbury; RV32-ALL-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 31*eabaee0cSFangrui Song; RV32-ALL-NEXT: call __udivsi3 329e966dd2SAlex Bradbury; RV32-ALL-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 339e966dd2SAlex Bradbury; RV32-ALL-NEXT: addi sp, sp, 16 349e966dd2SAlex Bradbury; RV32-ALL-NEXT: ret 359e966dd2SAlex Bradbury; 369e966dd2SAlex Bradbury; RV64-ALL-LABEL: udiv8: 379e966dd2SAlex Bradbury; RV64-ALL: # %bb.0: 389e966dd2SAlex Bradbury; RV64-ALL-NEXT: addi sp, sp, -16 399e966dd2SAlex Bradbury; RV64-ALL-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 40*eabaee0cSFangrui Song; RV64-ALL-NEXT: call __udivdi3 419e966dd2SAlex Bradbury; RV64-ALL-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 429e966dd2SAlex Bradbury; RV64-ALL-NEXT: addi sp, sp, 16 439e966dd2SAlex Bradbury; RV64-ALL-NEXT: ret 449e966dd2SAlex Bradbury %1 = udiv i8 %a, %b 459e966dd2SAlex Bradbury ret i8 %1 469e966dd2SAlex Bradbury} 479e966dd2SAlex Bradbury 489e966dd2SAlex Bradburydefine signext i16 @sdiv16(i16 signext %a, i16 signext %b) nounwind { 499e966dd2SAlex Bradbury; RV32-ALL-LABEL: sdiv16: 509e966dd2SAlex Bradbury; RV32-ALL: # %bb.0: 519e966dd2SAlex Bradbury; RV32-ALL-NEXT: addi sp, sp, -16 529e966dd2SAlex Bradbury; RV32-ALL-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 53*eabaee0cSFangrui Song; RV32-ALL-NEXT: call __divsi3 549e966dd2SAlex Bradbury; RV32-ALL-NEXT: slli a0, a0, 16 559e966dd2SAlex Bradbury; RV32-ALL-NEXT: srai a0, a0, 16 569e966dd2SAlex Bradbury; RV32-ALL-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 579e966dd2SAlex Bradbury; RV32-ALL-NEXT: addi sp, sp, 16 589e966dd2SAlex Bradbury; RV32-ALL-NEXT: ret 599e966dd2SAlex Bradbury; 609e966dd2SAlex Bradbury; RV64-ALL-LABEL: sdiv16: 619e966dd2SAlex Bradbury; RV64-ALL: # %bb.0: 629e966dd2SAlex Bradbury; RV64-ALL-NEXT: addi sp, sp, -16 639e966dd2SAlex Bradbury; RV64-ALL-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 64*eabaee0cSFangrui Song; RV64-ALL-NEXT: call __divdi3 659e966dd2SAlex Bradbury; RV64-ALL-NEXT: slli a0, a0, 48 669e966dd2SAlex Bradbury; RV64-ALL-NEXT: srai a0, a0, 48 679e966dd2SAlex Bradbury; RV64-ALL-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 689e966dd2SAlex Bradbury; RV64-ALL-NEXT: addi sp, sp, 16 699e966dd2SAlex Bradbury; RV64-ALL-NEXT: ret 709e966dd2SAlex Bradbury %1 = sdiv i16 %a, %b 719e966dd2SAlex Bradbury ret i16 %1 729e966dd2SAlex Bradbury} 739e966dd2SAlex Bradbury 749e966dd2SAlex Bradburydefine signext i32 @mul32(i32 %a, i32 %b) nounwind { 759e966dd2SAlex Bradbury; RV32-ALL-LABEL: mul32: 769e966dd2SAlex Bradbury; RV32-ALL: # %bb.0: 779e966dd2SAlex Bradbury; RV32-ALL-NEXT: addi sp, sp, -16 789e966dd2SAlex Bradbury; RV32-ALL-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 79*eabaee0cSFangrui Song; RV32-ALL-NEXT: call __mulsi3 809e966dd2SAlex Bradbury; RV32-ALL-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 819e966dd2SAlex Bradbury; RV32-ALL-NEXT: addi sp, sp, 16 829e966dd2SAlex Bradbury; RV32-ALL-NEXT: ret 839e966dd2SAlex Bradbury; 849e966dd2SAlex Bradbury; RV64-ALL-LABEL: mul32: 859e966dd2SAlex Bradbury; RV64-ALL: # %bb.0: 869e966dd2SAlex Bradbury; RV64-ALL-NEXT: addi sp, sp, -16 879e966dd2SAlex Bradbury; RV64-ALL-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 88*eabaee0cSFangrui Song; RV64-ALL-NEXT: call __muldi3 899e966dd2SAlex Bradbury; RV64-ALL-NEXT: sext.w a0, a0 909e966dd2SAlex Bradbury; RV64-ALL-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 919e966dd2SAlex Bradbury; RV64-ALL-NEXT: addi sp, sp, 16 929e966dd2SAlex Bradbury; RV64-ALL-NEXT: ret 939e966dd2SAlex Bradbury %1 = mul i32 %a, %b 949e966dd2SAlex Bradbury ret i32 %1 959e966dd2SAlex Bradbury} 969e966dd2SAlex Bradbury 979e966dd2SAlex Bradburydefine i64 @mul64(i64 %a, i64 %b) nounwind { 989e966dd2SAlex Bradbury; RV32-ALL-LABEL: mul64: 999e966dd2SAlex Bradbury; RV32-ALL: # %bb.0: 1009e966dd2SAlex Bradbury; RV32-ALL-NEXT: addi sp, sp, -16 1019e966dd2SAlex Bradbury; RV32-ALL-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 102*eabaee0cSFangrui Song; RV32-ALL-NEXT: call __muldi3 1039e966dd2SAlex Bradbury; RV32-ALL-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1049e966dd2SAlex Bradbury; RV32-ALL-NEXT: addi sp, sp, 16 1059e966dd2SAlex Bradbury; RV32-ALL-NEXT: ret 1069e966dd2SAlex Bradbury; 1079e966dd2SAlex Bradbury; RV64-ALL-LABEL: mul64: 1089e966dd2SAlex Bradbury; RV64-ALL: # %bb.0: 109*eabaee0cSFangrui Song; RV64-ALL-NEXT: tail __muldi3 1109e966dd2SAlex Bradbury %1 = mul i64 %a, %b 1119e966dd2SAlex Bradbury ret i64 %1 1129e966dd2SAlex Bradbury} 1139e966dd2SAlex Bradbury 1149e966dd2SAlex Bradbury; Half libcalls: 1159e966dd2SAlex Bradbury 1169e966dd2SAlex Bradburydeclare half @llvm.sin.f16(half) 1179e966dd2SAlex Bradbury 1189e966dd2SAlex Bradburydefine half @sin_f16(half %a) nounwind { 1199e966dd2SAlex Bradbury; RV32IFD-ILP32D-LABEL: sin_f16: 1209e966dd2SAlex Bradbury; RV32IFD-ILP32D: # %bb.0: 1219e966dd2SAlex Bradbury; RV32IFD-ILP32D-NEXT: addi sp, sp, -16 1229e966dd2SAlex Bradbury; RV32IFD-ILP32D-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 123*eabaee0cSFangrui Song; RV32IFD-ILP32D-NEXT: call __extendhfsf2 124*eabaee0cSFangrui Song; RV32IFD-ILP32D-NEXT: call sinf 125*eabaee0cSFangrui Song; RV32IFD-ILP32D-NEXT: call __truncsfhf2 1265ba40c7bSAlex Bradbury; RV32IFD-ILP32D-NEXT: fmv.x.w a0, fa0 1279e966dd2SAlex Bradbury; RV32IFD-ILP32D-NEXT: lui a1, 1048560 1289e966dd2SAlex Bradbury; RV32IFD-ILP32D-NEXT: or a0, a0, a1 1299e966dd2SAlex Bradbury; RV32IFD-ILP32D-NEXT: fmv.w.x fa0, a0 1309e966dd2SAlex Bradbury; RV32IFD-ILP32D-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1319e966dd2SAlex Bradbury; RV32IFD-ILP32D-NEXT: addi sp, sp, 16 1329e966dd2SAlex Bradbury; RV32IFD-ILP32D-NEXT: ret 1339e966dd2SAlex Bradbury; 1349e966dd2SAlex Bradbury; RV32IF-ILP32F-LABEL: sin_f16: 1359e966dd2SAlex Bradbury; RV32IF-ILP32F: # %bb.0: 1369e966dd2SAlex Bradbury; RV32IF-ILP32F-NEXT: addi sp, sp, -16 1379e966dd2SAlex Bradbury; RV32IF-ILP32F-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 138*eabaee0cSFangrui Song; RV32IF-ILP32F-NEXT: call __extendhfsf2 139*eabaee0cSFangrui Song; RV32IF-ILP32F-NEXT: call sinf 140*eabaee0cSFangrui Song; RV32IF-ILP32F-NEXT: call __truncsfhf2 1415ba40c7bSAlex Bradbury; RV32IF-ILP32F-NEXT: fmv.x.w a0, fa0 1429e966dd2SAlex Bradbury; RV32IF-ILP32F-NEXT: lui a1, 1048560 1439e966dd2SAlex Bradbury; RV32IF-ILP32F-NEXT: or a0, a0, a1 1449e966dd2SAlex Bradbury; RV32IF-ILP32F-NEXT: fmv.w.x fa0, a0 1459e966dd2SAlex Bradbury; RV32IF-ILP32F-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1469e966dd2SAlex Bradbury; RV32IF-ILP32F-NEXT: addi sp, sp, 16 1479e966dd2SAlex Bradbury; RV32IF-ILP32F-NEXT: ret 1489e966dd2SAlex Bradbury; 1499e966dd2SAlex Bradbury; RV32IFD-ILP32-LABEL: sin_f16: 1509e966dd2SAlex Bradbury; RV32IFD-ILP32: # %bb.0: 1519e966dd2SAlex Bradbury; RV32IFD-ILP32-NEXT: addi sp, sp, -16 1529e966dd2SAlex Bradbury; RV32IFD-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 153*eabaee0cSFangrui Song; RV32IFD-ILP32-NEXT: call __extendhfsf2 154*eabaee0cSFangrui Song; RV32IFD-ILP32-NEXT: call sinf 155*eabaee0cSFangrui Song; RV32IFD-ILP32-NEXT: call __truncsfhf2 1569e966dd2SAlex Bradbury; RV32IFD-ILP32-NEXT: lui a1, 1048560 1579e966dd2SAlex Bradbury; RV32IFD-ILP32-NEXT: or a0, a0, a1 1589e966dd2SAlex Bradbury; RV32IFD-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1599e966dd2SAlex Bradbury; RV32IFD-ILP32-NEXT: addi sp, sp, 16 1609e966dd2SAlex Bradbury; RV32IFD-ILP32-NEXT: ret 1619e966dd2SAlex Bradbury; 1629e966dd2SAlex Bradbury; RV32I-ILP32-LABEL: sin_f16: 1639e966dd2SAlex Bradbury; RV32I-ILP32: # %bb.0: 1649e966dd2SAlex Bradbury; RV32I-ILP32-NEXT: addi sp, sp, -16 1659e966dd2SAlex Bradbury; RV32I-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1669e966dd2SAlex Bradbury; RV32I-ILP32-NEXT: slli a0, a0, 16 1679e966dd2SAlex Bradbury; RV32I-ILP32-NEXT: srli a0, a0, 16 168*eabaee0cSFangrui Song; RV32I-ILP32-NEXT: call __extendhfsf2 169*eabaee0cSFangrui Song; RV32I-ILP32-NEXT: call sinf 170*eabaee0cSFangrui Song; RV32I-ILP32-NEXT: call __truncsfhf2 1719e966dd2SAlex Bradbury; RV32I-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1729e966dd2SAlex Bradbury; RV32I-ILP32-NEXT: addi sp, sp, 16 1739e966dd2SAlex Bradbury; RV32I-ILP32-NEXT: ret 1749e966dd2SAlex Bradbury; 1759e966dd2SAlex Bradbury; RV64IFD-LP64D-LABEL: sin_f16: 1769e966dd2SAlex Bradbury; RV64IFD-LP64D: # %bb.0: 1779e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: addi sp, sp, -16 1789e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 179*eabaee0cSFangrui Song; RV64IFD-LP64D-NEXT: call __extendhfsf2 180*eabaee0cSFangrui Song; RV64IFD-LP64D-NEXT: call sinf 181*eabaee0cSFangrui Song; RV64IFD-LP64D-NEXT: call __truncsfhf2 1825ba40c7bSAlex Bradbury; RV64IFD-LP64D-NEXT: fmv.x.w a0, fa0 1839e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: lui a1, 1048560 1849e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: or a0, a0, a1 1859e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: fmv.w.x fa0, a0 1869e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1879e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: addi sp, sp, 16 1889e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: ret 1899e966dd2SAlex Bradbury; 1909e966dd2SAlex Bradbury; RV64IF-LP64F-LABEL: sin_f16: 1919e966dd2SAlex Bradbury; RV64IF-LP64F: # %bb.0: 1929e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: addi sp, sp, -16 1939e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 194*eabaee0cSFangrui Song; RV64IF-LP64F-NEXT: call __extendhfsf2 195*eabaee0cSFangrui Song; RV64IF-LP64F-NEXT: call sinf 196*eabaee0cSFangrui Song; RV64IF-LP64F-NEXT: call __truncsfhf2 1975ba40c7bSAlex Bradbury; RV64IF-LP64F-NEXT: fmv.x.w a0, fa0 1989e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: lui a1, 1048560 1999e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: or a0, a0, a1 2009e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: fmv.w.x fa0, a0 2019e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2029e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: addi sp, sp, 16 2039e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: ret 2049e966dd2SAlex Bradbury; 2059e966dd2SAlex Bradbury; RV64IFD-LP64-LABEL: sin_f16: 2069e966dd2SAlex Bradbury; RV64IFD-LP64: # %bb.0: 2079e966dd2SAlex Bradbury; RV64IFD-LP64-NEXT: addi sp, sp, -16 2089e966dd2SAlex Bradbury; RV64IFD-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 209*eabaee0cSFangrui Song; RV64IFD-LP64-NEXT: call __extendhfsf2 210*eabaee0cSFangrui Song; RV64IFD-LP64-NEXT: call sinf 211*eabaee0cSFangrui Song; RV64IFD-LP64-NEXT: call __truncsfhf2 2129e966dd2SAlex Bradbury; RV64IFD-LP64-NEXT: lui a1, 1048560 2139e966dd2SAlex Bradbury; RV64IFD-LP64-NEXT: or a0, a0, a1 2149e966dd2SAlex Bradbury; RV64IFD-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2159e966dd2SAlex Bradbury; RV64IFD-LP64-NEXT: addi sp, sp, 16 2169e966dd2SAlex Bradbury; RV64IFD-LP64-NEXT: ret 2179e966dd2SAlex Bradbury; 2189e966dd2SAlex Bradbury; RV64I-LP64-LABEL: sin_f16: 2199e966dd2SAlex Bradbury; RV64I-LP64: # %bb.0: 2209e966dd2SAlex Bradbury; RV64I-LP64-NEXT: addi sp, sp, -16 2219e966dd2SAlex Bradbury; RV64I-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2229e966dd2SAlex Bradbury; RV64I-LP64-NEXT: slli a0, a0, 48 2239e966dd2SAlex Bradbury; RV64I-LP64-NEXT: srli a0, a0, 48 224*eabaee0cSFangrui Song; RV64I-LP64-NEXT: call __extendhfsf2 225*eabaee0cSFangrui Song; RV64I-LP64-NEXT: call sinf 226*eabaee0cSFangrui Song; RV64I-LP64-NEXT: call __truncsfhf2 2279e966dd2SAlex Bradbury; RV64I-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2289e966dd2SAlex Bradbury; RV64I-LP64-NEXT: addi sp, sp, 16 2299e966dd2SAlex Bradbury; RV64I-LP64-NEXT: ret 2309e966dd2SAlex Bradbury %1 = call half @llvm.sin.f16(half %a) 2319e966dd2SAlex Bradbury ret half %1 2329e966dd2SAlex Bradbury} 2339e966dd2SAlex Bradbury 2349e966dd2SAlex Bradbury; Float libcalls: 2359e966dd2SAlex Bradbury 2369e966dd2SAlex Bradburydeclare float @llvm.sin.f32(float) 2379e966dd2SAlex Bradbury 2389e966dd2SAlex Bradburydefine float @sin_f32(float %a) nounwind { 23947b1f836SAlex Bradbury; F-ABI-ALL-LABEL: sin_f32: 24047b1f836SAlex Bradbury; F-ABI-ALL: # %bb.0: 241*eabaee0cSFangrui Song; F-ABI-ALL-NEXT: tail sinf 2429e966dd2SAlex Bradbury; 243d255e0f9SLuke Lau; RV32IFD-ILP32-LABEL: sin_f32: 244d255e0f9SLuke Lau; RV32IFD-ILP32: # %bb.0: 245*eabaee0cSFangrui Song; RV32IFD-ILP32-NEXT: tail sinf 246d255e0f9SLuke Lau; 247d255e0f9SLuke Lau; RV32I-ILP32-LABEL: sin_f32: 248d255e0f9SLuke Lau; RV32I-ILP32: # %bb.0: 249d255e0f9SLuke Lau; RV32I-ILP32-NEXT: addi sp, sp, -16 250d255e0f9SLuke Lau; RV32I-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 251*eabaee0cSFangrui Song; RV32I-ILP32-NEXT: call sinf 252d255e0f9SLuke Lau; RV32I-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 253d255e0f9SLuke Lau; RV32I-ILP32-NEXT: addi sp, sp, 16 254d255e0f9SLuke Lau; RV32I-ILP32-NEXT: ret 25547b1f836SAlex Bradbury; 25647b1f836SAlex Bradbury; RV64-LP64-ALL-LABEL: sin_f32: 25747b1f836SAlex Bradbury; RV64-LP64-ALL: # %bb.0: 25847b1f836SAlex Bradbury; RV64-LP64-ALL-NEXT: addi sp, sp, -16 25947b1f836SAlex Bradbury; RV64-LP64-ALL-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 260*eabaee0cSFangrui Song; RV64-LP64-ALL-NEXT: call sinf 26147b1f836SAlex Bradbury; RV64-LP64-ALL-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 26247b1f836SAlex Bradbury; RV64-LP64-ALL-NEXT: addi sp, sp, 16 26347b1f836SAlex Bradbury; RV64-LP64-ALL-NEXT: ret 2649e966dd2SAlex Bradbury %1 = call float @llvm.sin.f32(float %a) 2659e966dd2SAlex Bradbury ret float %1 2669e966dd2SAlex Bradbury} 2679e966dd2SAlex Bradbury 2689e966dd2SAlex Bradburydeclare float @llvm.powi.f32.i32(float, i32) 2699e966dd2SAlex Bradbury 2709e966dd2SAlex Bradburydefine float @powi_f32(float %a, i32 %b) nounwind { 27147b1f836SAlex Bradbury; RV32IFD-ILP32D-LABEL: powi_f32: 27247b1f836SAlex Bradbury; RV32IFD-ILP32D: # %bb.0: 273*eabaee0cSFangrui Song; RV32IFD-ILP32D-NEXT: tail __powisf2 27447b1f836SAlex Bradbury; 27547b1f836SAlex Bradbury; RV32IF-ILP32F-LABEL: powi_f32: 27647b1f836SAlex Bradbury; RV32IF-ILP32F: # %bb.0: 277*eabaee0cSFangrui Song; RV32IF-ILP32F-NEXT: tail __powisf2 27847b1f836SAlex Bradbury; 279d255e0f9SLuke Lau; RV32IFD-ILP32-LABEL: powi_f32: 280d255e0f9SLuke Lau; RV32IFD-ILP32: # %bb.0: 281*eabaee0cSFangrui Song; RV32IFD-ILP32-NEXT: tail __powisf2 282d255e0f9SLuke Lau; 283d255e0f9SLuke Lau; RV32I-ILP32-LABEL: powi_f32: 284d255e0f9SLuke Lau; RV32I-ILP32: # %bb.0: 285d255e0f9SLuke Lau; RV32I-ILP32-NEXT: addi sp, sp, -16 286d255e0f9SLuke Lau; RV32I-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 287*eabaee0cSFangrui Song; RV32I-ILP32-NEXT: call __powisf2 288d255e0f9SLuke Lau; RV32I-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 289d255e0f9SLuke Lau; RV32I-ILP32-NEXT: addi sp, sp, 16 290d255e0f9SLuke Lau; RV32I-ILP32-NEXT: ret 2919e966dd2SAlex Bradbury; 2929e966dd2SAlex Bradbury; RV64IFD-LP64D-LABEL: powi_f32: 2939e966dd2SAlex Bradbury; RV64IFD-LP64D: # %bb.0: 2949e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: addi sp, sp, -16 2959e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2969e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: sext.w a0, a0 297*eabaee0cSFangrui Song; RV64IFD-LP64D-NEXT: call __powisf2 2989e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2999e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: addi sp, sp, 16 3009e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: ret 3019e966dd2SAlex Bradbury; 3029e966dd2SAlex Bradbury; RV64IF-LP64F-LABEL: powi_f32: 3039e966dd2SAlex Bradbury; RV64IF-LP64F: # %bb.0: 3049e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: addi sp, sp, -16 3059e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3069e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: sext.w a0, a0 307*eabaee0cSFangrui Song; RV64IF-LP64F-NEXT: call __powisf2 3089e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3099e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: addi sp, sp, 16 3109e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: ret 3119e966dd2SAlex Bradbury; 3129e966dd2SAlex Bradbury; RV64-LP64-ALL-LABEL: powi_f32: 3139e966dd2SAlex Bradbury; RV64-LP64-ALL: # %bb.0: 3149e966dd2SAlex Bradbury; RV64-LP64-ALL-NEXT: addi sp, sp, -16 3159e966dd2SAlex Bradbury; RV64-LP64-ALL-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3169e966dd2SAlex Bradbury; RV64-LP64-ALL-NEXT: sext.w a1, a1 317*eabaee0cSFangrui Song; RV64-LP64-ALL-NEXT: call __powisf2 3189e966dd2SAlex Bradbury; RV64-LP64-ALL-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3199e966dd2SAlex Bradbury; RV64-LP64-ALL-NEXT: addi sp, sp, 16 3209e966dd2SAlex Bradbury; RV64-LP64-ALL-NEXT: ret 3219e966dd2SAlex Bradbury %1 = call float @llvm.powi.f32.i32(float %a, i32 %b) 3229e966dd2SAlex Bradbury ret float %1 3239e966dd2SAlex Bradbury} 3249e966dd2SAlex Bradbury 3259e966dd2SAlex Bradburydeclare i64 @llvm.llround.i64.f32(float) 3269e966dd2SAlex Bradbury 3279e966dd2SAlex Bradburydefine i64 @llround_f32(float %a) nounwind { 3289e966dd2SAlex Bradbury; RV32-ALL-LABEL: llround_f32: 3299e966dd2SAlex Bradbury; RV32-ALL: # %bb.0: 3309e966dd2SAlex Bradbury; RV32-ALL-NEXT: addi sp, sp, -16 3319e966dd2SAlex Bradbury; RV32-ALL-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 332*eabaee0cSFangrui Song; RV32-ALL-NEXT: call llroundf 3339e966dd2SAlex Bradbury; RV32-ALL-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3349e966dd2SAlex Bradbury; RV32-ALL-NEXT: addi sp, sp, 16 3359e966dd2SAlex Bradbury; RV32-ALL-NEXT: ret 3369e966dd2SAlex Bradbury; 3379e966dd2SAlex Bradbury; RV64IFD-LP64D-LABEL: llround_f32: 3389e966dd2SAlex Bradbury; RV64IFD-LP64D: # %bb.0: 3399e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: fcvt.l.s a0, fa0, rmm 3409e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: ret 3419e966dd2SAlex Bradbury; 3429e966dd2SAlex Bradbury; RV64IF-LP64F-LABEL: llround_f32: 3439e966dd2SAlex Bradbury; RV64IF-LP64F: # %bb.0: 3449e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: fcvt.l.s a0, fa0, rmm 3459e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: ret 3469e966dd2SAlex Bradbury; 3479e966dd2SAlex Bradbury; RV64IFD-LP64-LABEL: llround_f32: 3489e966dd2SAlex Bradbury; RV64IFD-LP64: # %bb.0: 3497b0c4184SCraig Topper; RV64IFD-LP64-NEXT: fmv.w.x fa5, a0 3507b0c4184SCraig Topper; RV64IFD-LP64-NEXT: fcvt.l.s a0, fa5, rmm 3519e966dd2SAlex Bradbury; RV64IFD-LP64-NEXT: ret 3529e966dd2SAlex Bradbury; 3539e966dd2SAlex Bradbury; RV64I-LP64-LABEL: llround_f32: 3549e966dd2SAlex Bradbury; RV64I-LP64: # %bb.0: 3559e966dd2SAlex Bradbury; RV64I-LP64-NEXT: addi sp, sp, -16 3569e966dd2SAlex Bradbury; RV64I-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 357*eabaee0cSFangrui Song; RV64I-LP64-NEXT: call llroundf 3589e966dd2SAlex Bradbury; RV64I-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3599e966dd2SAlex Bradbury; RV64I-LP64-NEXT: addi sp, sp, 16 3609e966dd2SAlex Bradbury; RV64I-LP64-NEXT: ret 3619e966dd2SAlex Bradbury %1 = call i64 @llvm.llround.i64.f32(float %a) 3629e966dd2SAlex Bradbury ret i64 %1 3639e966dd2SAlex Bradbury} 3649e966dd2SAlex Bradbury 3659e966dd2SAlex Bradbury; Double libcalls: 3669e966dd2SAlex Bradbury 3679e966dd2SAlex Bradburydeclare double @llvm.sin.f64(double) 3689e966dd2SAlex Bradbury 3699e966dd2SAlex Bradburydefine double @sin_f64(double %a) nounwind { 37047b1f836SAlex Bradbury; D-ABI-ALL-LABEL: sin_f64: 37147b1f836SAlex Bradbury; D-ABI-ALL: # %bb.0: 372*eabaee0cSFangrui Song; D-ABI-ALL-NEXT: tail sin 3739e966dd2SAlex Bradbury; 37447b1f836SAlex Bradbury; RV32IF-ILP32F-LABEL: sin_f64: 37547b1f836SAlex Bradbury; RV32IF-ILP32F: # %bb.0: 37647b1f836SAlex Bradbury; RV32IF-ILP32F-NEXT: addi sp, sp, -16 37747b1f836SAlex Bradbury; RV32IF-ILP32F-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 378*eabaee0cSFangrui Song; RV32IF-ILP32F-NEXT: call sin 37947b1f836SAlex Bradbury; RV32IF-ILP32F-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 38047b1f836SAlex Bradbury; RV32IF-ILP32F-NEXT: addi sp, sp, 16 38147b1f836SAlex Bradbury; RV32IF-ILP32F-NEXT: ret 38247b1f836SAlex Bradbury; 38347b1f836SAlex Bradbury; RV32-ILP32-ALL-LABEL: sin_f64: 38447b1f836SAlex Bradbury; RV32-ILP32-ALL: # %bb.0: 38547b1f836SAlex Bradbury; RV32-ILP32-ALL-NEXT: addi sp, sp, -16 38647b1f836SAlex Bradbury; RV32-ILP32-ALL-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 387*eabaee0cSFangrui Song; RV32-ILP32-ALL-NEXT: call sin 38847b1f836SAlex Bradbury; RV32-ILP32-ALL-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 38947b1f836SAlex Bradbury; RV32-ILP32-ALL-NEXT: addi sp, sp, 16 39047b1f836SAlex Bradbury; RV32-ILP32-ALL-NEXT: ret 39147b1f836SAlex Bradbury; 39247b1f836SAlex Bradbury; RV64IF-LP64F-LABEL: sin_f64: 39347b1f836SAlex Bradbury; RV64IF-LP64F: # %bb.0: 39447b1f836SAlex Bradbury; RV64IF-LP64F-NEXT: addi sp, sp, -16 39547b1f836SAlex Bradbury; RV64IF-LP64F-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 396*eabaee0cSFangrui Song; RV64IF-LP64F-NEXT: call sin 39747b1f836SAlex Bradbury; RV64IF-LP64F-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 39847b1f836SAlex Bradbury; RV64IF-LP64F-NEXT: addi sp, sp, 16 39947b1f836SAlex Bradbury; RV64IF-LP64F-NEXT: ret 40047b1f836SAlex Bradbury; 401d255e0f9SLuke Lau; RV64IFD-LP64-LABEL: sin_f64: 402d255e0f9SLuke Lau; RV64IFD-LP64: # %bb.0: 403*eabaee0cSFangrui Song; RV64IFD-LP64-NEXT: tail sin 404d255e0f9SLuke Lau; 405d255e0f9SLuke Lau; RV64I-LP64-LABEL: sin_f64: 406d255e0f9SLuke Lau; RV64I-LP64: # %bb.0: 407d255e0f9SLuke Lau; RV64I-LP64-NEXT: addi sp, sp, -16 408d255e0f9SLuke Lau; RV64I-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 409*eabaee0cSFangrui Song; RV64I-LP64-NEXT: call sin 410d255e0f9SLuke Lau; RV64I-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 411d255e0f9SLuke Lau; RV64I-LP64-NEXT: addi sp, sp, 16 412d255e0f9SLuke Lau; RV64I-LP64-NEXT: ret 4139e966dd2SAlex Bradbury %1 = call double @llvm.sin.f64(double %a) 4149e966dd2SAlex Bradbury ret double %1 4159e966dd2SAlex Bradbury} 4169e966dd2SAlex Bradbury 4179e966dd2SAlex Bradburydeclare double @llvm.powi.f64.i32(double, i32) 4189e966dd2SAlex Bradbury 4199e966dd2SAlex Bradburydefine double @powi_f64(double %a, i32 %b) nounwind { 42047b1f836SAlex Bradbury; RV32IFD-ILP32D-LABEL: powi_f64: 42147b1f836SAlex Bradbury; RV32IFD-ILP32D: # %bb.0: 422*eabaee0cSFangrui Song; RV32IFD-ILP32D-NEXT: tail __powidf2 42347b1f836SAlex Bradbury; 42447b1f836SAlex Bradbury; RV32IF-ILP32F-LABEL: powi_f64: 42547b1f836SAlex Bradbury; RV32IF-ILP32F: # %bb.0: 42647b1f836SAlex Bradbury; RV32IF-ILP32F-NEXT: addi sp, sp, -16 42747b1f836SAlex Bradbury; RV32IF-ILP32F-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 428*eabaee0cSFangrui Song; RV32IF-ILP32F-NEXT: call __powidf2 42947b1f836SAlex Bradbury; RV32IF-ILP32F-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 43047b1f836SAlex Bradbury; RV32IF-ILP32F-NEXT: addi sp, sp, 16 43147b1f836SAlex Bradbury; RV32IF-ILP32F-NEXT: ret 43247b1f836SAlex Bradbury; 43347b1f836SAlex Bradbury; RV32-ILP32-ALL-LABEL: powi_f64: 43447b1f836SAlex Bradbury; RV32-ILP32-ALL: # %bb.0: 43547b1f836SAlex Bradbury; RV32-ILP32-ALL-NEXT: addi sp, sp, -16 43647b1f836SAlex Bradbury; RV32-ILP32-ALL-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 437*eabaee0cSFangrui Song; RV32-ILP32-ALL-NEXT: call __powidf2 43847b1f836SAlex Bradbury; RV32-ILP32-ALL-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 43947b1f836SAlex Bradbury; RV32-ILP32-ALL-NEXT: addi sp, sp, 16 44047b1f836SAlex Bradbury; RV32-ILP32-ALL-NEXT: ret 4419e966dd2SAlex Bradbury; 4429e966dd2SAlex Bradbury; RV64IFD-LP64D-LABEL: powi_f64: 4439e966dd2SAlex Bradbury; RV64IFD-LP64D: # %bb.0: 4449e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: addi sp, sp, -16 4459e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4469e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: sext.w a0, a0 447*eabaee0cSFangrui Song; RV64IFD-LP64D-NEXT: call __powidf2 4489e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4499e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: addi sp, sp, 16 4509e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: ret 4519e966dd2SAlex Bradbury; 4529e966dd2SAlex Bradbury; RV64IF-LP64F-LABEL: powi_f64: 4539e966dd2SAlex Bradbury; RV64IF-LP64F: # %bb.0: 4549e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: addi sp, sp, -16 4559e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4569e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: sext.w a1, a1 457*eabaee0cSFangrui Song; RV64IF-LP64F-NEXT: call __powidf2 4589e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4599e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: addi sp, sp, 16 4609e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: ret 4619e966dd2SAlex Bradbury; 4629e966dd2SAlex Bradbury; RV64-LP64-ALL-LABEL: powi_f64: 4639e966dd2SAlex Bradbury; RV64-LP64-ALL: # %bb.0: 4649e966dd2SAlex Bradbury; RV64-LP64-ALL-NEXT: addi sp, sp, -16 4659e966dd2SAlex Bradbury; RV64-LP64-ALL-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4669e966dd2SAlex Bradbury; RV64-LP64-ALL-NEXT: sext.w a1, a1 467*eabaee0cSFangrui Song; RV64-LP64-ALL-NEXT: call __powidf2 4689e966dd2SAlex Bradbury; RV64-LP64-ALL-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4699e966dd2SAlex Bradbury; RV64-LP64-ALL-NEXT: addi sp, sp, 16 4709e966dd2SAlex Bradbury; RV64-LP64-ALL-NEXT: ret 4719e966dd2SAlex Bradbury %1 = call double @llvm.powi.f64.i32(double %a, i32 %b) 4729e966dd2SAlex Bradbury ret double %1 4739e966dd2SAlex Bradbury} 4749e966dd2SAlex Bradbury 4759e966dd2SAlex Bradburydeclare i64 @llvm.llround.i64.f64(double) 4769e966dd2SAlex Bradbury 4779e966dd2SAlex Bradburydefine i64 @llround_f64(double %a) nounwind { 4789e966dd2SAlex Bradbury; RV32-ALL-LABEL: llround_f64: 4799e966dd2SAlex Bradbury; RV32-ALL: # %bb.0: 4809e966dd2SAlex Bradbury; RV32-ALL-NEXT: addi sp, sp, -16 4819e966dd2SAlex Bradbury; RV32-ALL-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 482*eabaee0cSFangrui Song; RV32-ALL-NEXT: call llround 4839e966dd2SAlex Bradbury; RV32-ALL-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4849e966dd2SAlex Bradbury; RV32-ALL-NEXT: addi sp, sp, 16 4859e966dd2SAlex Bradbury; RV32-ALL-NEXT: ret 4869e966dd2SAlex Bradbury; 4879e966dd2SAlex Bradbury; RV64IFD-LP64D-LABEL: llround_f64: 4889e966dd2SAlex Bradbury; RV64IFD-LP64D: # %bb.0: 4899e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: fcvt.l.d a0, fa0, rmm 4909e966dd2SAlex Bradbury; RV64IFD-LP64D-NEXT: ret 4919e966dd2SAlex Bradbury; 4929e966dd2SAlex Bradbury; RV64IF-LP64F-LABEL: llround_f64: 4939e966dd2SAlex Bradbury; RV64IF-LP64F: # %bb.0: 4949e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: addi sp, sp, -16 4959e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 496*eabaee0cSFangrui Song; RV64IF-LP64F-NEXT: call llround 4979e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4989e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: addi sp, sp, 16 4999e966dd2SAlex Bradbury; RV64IF-LP64F-NEXT: ret 5009e966dd2SAlex Bradbury; 5019e966dd2SAlex Bradbury; RV64IFD-LP64-LABEL: llround_f64: 5029e966dd2SAlex Bradbury; RV64IFD-LP64: # %bb.0: 5037b0c4184SCraig Topper; RV64IFD-LP64-NEXT: fmv.d.x fa5, a0 5047b0c4184SCraig Topper; RV64IFD-LP64-NEXT: fcvt.l.d a0, fa5, rmm 5059e966dd2SAlex Bradbury; RV64IFD-LP64-NEXT: ret 5069e966dd2SAlex Bradbury; 5079e966dd2SAlex Bradbury; RV64I-LP64-LABEL: llround_f64: 5089e966dd2SAlex Bradbury; RV64I-LP64: # %bb.0: 5099e966dd2SAlex Bradbury; RV64I-LP64-NEXT: addi sp, sp, -16 5109e966dd2SAlex Bradbury; RV64I-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 511*eabaee0cSFangrui Song; RV64I-LP64-NEXT: call llround 5129e966dd2SAlex Bradbury; RV64I-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5139e966dd2SAlex Bradbury; RV64I-LP64-NEXT: addi sp, sp, 16 5149e966dd2SAlex Bradbury; RV64I-LP64-NEXT: ret 5159e966dd2SAlex Bradbury %1 = call i64 @llvm.llround.i64.f64(double %a) 5169e966dd2SAlex Bradbury ret i64 %1 5179e966dd2SAlex Bradbury} 5189e966dd2SAlex Bradbury 5199e966dd2SAlex Bradbury; Atomics libcalls: 5209e966dd2SAlex Bradbury 5211456b686SNikita Popovdefine i8 @atomic_load_i8_unordered(ptr %a) nounwind { 5229e966dd2SAlex Bradbury; RV32-ALL-LABEL: atomic_load_i8_unordered: 5239e966dd2SAlex Bradbury; RV32-ALL: # %bb.0: 5249e966dd2SAlex Bradbury; RV32-ALL-NEXT: addi sp, sp, -16 5259e966dd2SAlex Bradbury; RV32-ALL-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 5269e966dd2SAlex Bradbury; RV32-ALL-NEXT: li a1, 0 527*eabaee0cSFangrui Song; RV32-ALL-NEXT: call __atomic_load_1 5289e966dd2SAlex Bradbury; RV32-ALL-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 5299e966dd2SAlex Bradbury; RV32-ALL-NEXT: addi sp, sp, 16 5309e966dd2SAlex Bradbury; RV32-ALL-NEXT: ret 5319e966dd2SAlex Bradbury; 5329e966dd2SAlex Bradbury; RV64-ALL-LABEL: atomic_load_i8_unordered: 5339e966dd2SAlex Bradbury; RV64-ALL: # %bb.0: 5349e966dd2SAlex Bradbury; RV64-ALL-NEXT: addi sp, sp, -16 5359e966dd2SAlex Bradbury; RV64-ALL-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5369e966dd2SAlex Bradbury; RV64-ALL-NEXT: li a1, 0 537*eabaee0cSFangrui Song; RV64-ALL-NEXT: call __atomic_load_1 5389e966dd2SAlex Bradbury; RV64-ALL-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5399e966dd2SAlex Bradbury; RV64-ALL-NEXT: addi sp, sp, 16 5409e966dd2SAlex Bradbury; RV64-ALL-NEXT: ret 5411456b686SNikita Popov %1 = load atomic i8, ptr %a unordered, align 1 5429e966dd2SAlex Bradbury ret i8 %1 5439e966dd2SAlex Bradbury} 5449e966dd2SAlex Bradbury 5451456b686SNikita Popovdefine i16 @atomicrmw_add_i16_release(ptr %a, i16 %b) nounwind { 5469e966dd2SAlex Bradbury; RV32-ALL-LABEL: atomicrmw_add_i16_release: 5479e966dd2SAlex Bradbury; RV32-ALL: # %bb.0: 5489e966dd2SAlex Bradbury; RV32-ALL-NEXT: addi sp, sp, -16 5499e966dd2SAlex Bradbury; RV32-ALL-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 5509e966dd2SAlex Bradbury; RV32-ALL-NEXT: li a2, 3 551*eabaee0cSFangrui Song; RV32-ALL-NEXT: call __atomic_fetch_add_2 5529e966dd2SAlex Bradbury; RV32-ALL-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 5539e966dd2SAlex Bradbury; RV32-ALL-NEXT: addi sp, sp, 16 5549e966dd2SAlex Bradbury; RV32-ALL-NEXT: ret 5559e966dd2SAlex Bradbury; 5569e966dd2SAlex Bradbury; RV64-ALL-LABEL: atomicrmw_add_i16_release: 5579e966dd2SAlex Bradbury; RV64-ALL: # %bb.0: 5589e966dd2SAlex Bradbury; RV64-ALL-NEXT: addi sp, sp, -16 5599e966dd2SAlex Bradbury; RV64-ALL-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5609e966dd2SAlex Bradbury; RV64-ALL-NEXT: li a2, 3 561*eabaee0cSFangrui Song; RV64-ALL-NEXT: call __atomic_fetch_add_2 5629e966dd2SAlex Bradbury; RV64-ALL-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5639e966dd2SAlex Bradbury; RV64-ALL-NEXT: addi sp, sp, 16 5649e966dd2SAlex Bradbury; RV64-ALL-NEXT: ret 5651456b686SNikita Popov %1 = atomicrmw add ptr %a, i16 %b release 5669e966dd2SAlex Bradbury ret i16 %1 5679e966dd2SAlex Bradbury} 5689e966dd2SAlex Bradbury 5691456b686SNikita Popovdefine i32 @atomicrmw_xor_i32_acq_rel(ptr %a, i32 %b) nounwind { 5709e966dd2SAlex Bradbury; RV32-ALL-LABEL: atomicrmw_xor_i32_acq_rel: 5719e966dd2SAlex Bradbury; RV32-ALL: # %bb.0: 5729e966dd2SAlex Bradbury; RV32-ALL-NEXT: addi sp, sp, -16 5739e966dd2SAlex Bradbury; RV32-ALL-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 5749e966dd2SAlex Bradbury; RV32-ALL-NEXT: li a2, 4 575*eabaee0cSFangrui Song; RV32-ALL-NEXT: call __atomic_fetch_xor_4 5769e966dd2SAlex Bradbury; RV32-ALL-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 5779e966dd2SAlex Bradbury; RV32-ALL-NEXT: addi sp, sp, 16 5789e966dd2SAlex Bradbury; RV32-ALL-NEXT: ret 5799e966dd2SAlex Bradbury; 5809e966dd2SAlex Bradbury; RV64-ALL-LABEL: atomicrmw_xor_i32_acq_rel: 5819e966dd2SAlex Bradbury; RV64-ALL: # %bb.0: 5829e966dd2SAlex Bradbury; RV64-ALL-NEXT: addi sp, sp, -16 5839e966dd2SAlex Bradbury; RV64-ALL-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5849e966dd2SAlex Bradbury; RV64-ALL-NEXT: li a2, 4 585*eabaee0cSFangrui Song; RV64-ALL-NEXT: call __atomic_fetch_xor_4 5869e966dd2SAlex Bradbury; RV64-ALL-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5879e966dd2SAlex Bradbury; RV64-ALL-NEXT: addi sp, sp, 16 5889e966dd2SAlex Bradbury; RV64-ALL-NEXT: ret 5891456b686SNikita Popov %1 = atomicrmw xor ptr %a, i32 %b acq_rel 5909e966dd2SAlex Bradbury ret i32 %1 5919e966dd2SAlex Bradbury} 5929e966dd2SAlex Bradbury 5931456b686SNikita Popovdefine i64 @atomicrmw_nand_i64_seq_cst(ptr %a, i64 %b) nounwind { 5949e966dd2SAlex Bradbury; RV32-ALL-LABEL: atomicrmw_nand_i64_seq_cst: 5959e966dd2SAlex Bradbury; RV32-ALL: # %bb.0: 5969e966dd2SAlex Bradbury; RV32-ALL-NEXT: addi sp, sp, -16 5979e966dd2SAlex Bradbury; RV32-ALL-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 5989e966dd2SAlex Bradbury; RV32-ALL-NEXT: li a3, 5 599*eabaee0cSFangrui Song; RV32-ALL-NEXT: call __atomic_fetch_nand_8 6009e966dd2SAlex Bradbury; RV32-ALL-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6019e966dd2SAlex Bradbury; RV32-ALL-NEXT: addi sp, sp, 16 6029e966dd2SAlex Bradbury; RV32-ALL-NEXT: ret 6039e966dd2SAlex Bradbury; 6049e966dd2SAlex Bradbury; RV64-ALL-LABEL: atomicrmw_nand_i64_seq_cst: 6059e966dd2SAlex Bradbury; RV64-ALL: # %bb.0: 6069e966dd2SAlex Bradbury; RV64-ALL-NEXT: addi sp, sp, -16 6079e966dd2SAlex Bradbury; RV64-ALL-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6089e966dd2SAlex Bradbury; RV64-ALL-NEXT: li a2, 5 609*eabaee0cSFangrui Song; RV64-ALL-NEXT: call __atomic_fetch_nand_8 6109e966dd2SAlex Bradbury; RV64-ALL-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6119e966dd2SAlex Bradbury; RV64-ALL-NEXT: addi sp, sp, 16 6129e966dd2SAlex Bradbury; RV64-ALL-NEXT: ret 6131456b686SNikita Popov %1 = atomicrmw nand ptr %a, i64 %b seq_cst 6149e966dd2SAlex Bradbury ret i64 %1 6159e966dd2SAlex Bradbury} 616