160450f91SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 260450f91SCraig Topper; RUN: llc < %s -mtriple=riscv32 \ 3eb3f2fe4SPhilip Reames; RUN: | FileCheck %s --check-prefixes=RV32-BOTH,RV32 460450f91SCraig Topper; RUN: llc < %s -mtriple=riscv64 \ 5eb3f2fe4SPhilip Reames; RUN: | FileCheck %s --check-prefixes=RV64-BOTH,RV64 6*9067070dSCraig Topper; RUN: llc < %s -mtriple=riscv32 -mattr=+unaligned-scalar-mem \ 7eb3f2fe4SPhilip Reames; RUN: | FileCheck %s --check-prefixes=RV32-BOTH,RV32-FAST 8*9067070dSCraig Topper; RUN: llc < %s -mtriple=riscv64 -mattr=+unaligned-scalar-mem \ 9eb3f2fe4SPhilip Reames; RUN: | FileCheck %s --check-prefixes=RV64-BOTH,RV64-FAST 1060450f91SCraig Topper 114f4f4913SPhilip Reames; ---------------------------------------------------------------------- 124f4f4913SPhilip Reames; Fully unaligned cases 1360450f91SCraig Topper 144f4f4913SPhilip Reamesdefine void @unaligned_memcpy0(ptr nocapture %dest, ptr %src) nounwind { 154f4f4913SPhilip Reames; RV32-BOTH-LABEL: unaligned_memcpy0: 16eb3f2fe4SPhilip Reames; RV32-BOTH: # %bb.0: # %entry 174f4f4913SPhilip Reames; RV32-BOTH-NEXT: ret 1860450f91SCraig Topper; 194f4f4913SPhilip Reames; RV64-BOTH-LABEL: unaligned_memcpy0: 204f4f4913SPhilip Reames; RV64-BOTH: # %bb.0: # %entry 214f4f4913SPhilip Reames; RV64-BOTH-NEXT: ret 2260450f91SCraig Topperentry: 234f4f4913SPhilip Reames tail call void @llvm.memcpy.inline.p0.p0.i64(ptr %dest, ptr %src, i64 0, i1 false) 2460450f91SCraig Topper ret void 2560450f91SCraig Topper} 2660450f91SCraig Topper 274f4f4913SPhilip Reamesdefine void @unaligned_memcpy1(ptr nocapture %dest, ptr %src) nounwind { 284f4f4913SPhilip Reames; RV32-BOTH-LABEL: unaligned_memcpy1: 294f4f4913SPhilip Reames; RV32-BOTH: # %bb.0: # %entry 304f4f4913SPhilip Reames; RV32-BOTH-NEXT: lbu a1, 0(a1) 314f4f4913SPhilip Reames; RV32-BOTH-NEXT: sb a1, 0(a0) 324f4f4913SPhilip Reames; RV32-BOTH-NEXT: ret 3360450f91SCraig Topper; 344f4f4913SPhilip Reames; RV64-BOTH-LABEL: unaligned_memcpy1: 354f4f4913SPhilip Reames; RV64-BOTH: # %bb.0: # %entry 364f4f4913SPhilip Reames; RV64-BOTH-NEXT: lbu a1, 0(a1) 374f4f4913SPhilip Reames; RV64-BOTH-NEXT: sb a1, 0(a0) 384f4f4913SPhilip Reames; RV64-BOTH-NEXT: ret 3960450f91SCraig Topperentry: 404f4f4913SPhilip Reames tail call void @llvm.memcpy.inline.p0.p0.i64(ptr %dest, ptr %src, i64 1, i1 false) 4160450f91SCraig Topper ret void 4260450f91SCraig Topper} 4360450f91SCraig Topper 444f4f4913SPhilip Reamesdefine void @unaligned_memcpy2(ptr nocapture %dest, ptr %src) nounwind { 454f4f4913SPhilip Reames; RV32-LABEL: unaligned_memcpy2: 46eb3f2fe4SPhilip Reames; RV32: # %bb.0: # %entry 474f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 1(a1) 484f4f4913SPhilip Reames; RV32-NEXT: sb a2, 1(a0) 494f4f4913SPhilip Reames; RV32-NEXT: lbu a1, 0(a1) 50eb3f2fe4SPhilip Reames; RV32-NEXT: sb a1, 0(a0) 51eb3f2fe4SPhilip Reames; RV32-NEXT: ret 5260450f91SCraig Topper; 534f4f4913SPhilip Reames; RV64-LABEL: unaligned_memcpy2: 54eb3f2fe4SPhilip Reames; RV64: # %bb.0: # %entry 554f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 1(a1) 564f4f4913SPhilip Reames; RV64-NEXT: sb a2, 1(a0) 574f4f4913SPhilip Reames; RV64-NEXT: lbu a1, 0(a1) 58eb3f2fe4SPhilip Reames; RV64-NEXT: sb a1, 0(a0) 59eb3f2fe4SPhilip Reames; RV64-NEXT: ret 6060450f91SCraig Topper; 614f4f4913SPhilip Reames; RV32-FAST-LABEL: unaligned_memcpy2: 62eb3f2fe4SPhilip Reames; RV32-FAST: # %bb.0: # %entry 634f4f4913SPhilip Reames; RV32-FAST-NEXT: lh a1, 0(a1) 644f4f4913SPhilip Reames; RV32-FAST-NEXT: sh a1, 0(a0) 654f4f4913SPhilip Reames; RV32-FAST-NEXT: ret 664f4f4913SPhilip Reames; 674f4f4913SPhilip Reames; RV64-FAST-LABEL: unaligned_memcpy2: 684f4f4913SPhilip Reames; RV64-FAST: # %bb.0: # %entry 694f4f4913SPhilip Reames; RV64-FAST-NEXT: lh a1, 0(a1) 704f4f4913SPhilip Reames; RV64-FAST-NEXT: sh a1, 0(a0) 714f4f4913SPhilip Reames; RV64-FAST-NEXT: ret 724f4f4913SPhilip Reamesentry: 734f4f4913SPhilip Reames tail call void @llvm.memcpy.inline.p0.p0.i64(ptr %dest, ptr %src, i64 2, i1 false) 744f4f4913SPhilip Reames ret void 754f4f4913SPhilip Reames} 764f4f4913SPhilip Reames 774f4f4913SPhilip Reamesdefine void @unaligned_memcpy3(ptr nocapture %dest, ptr %src) nounwind { 784f4f4913SPhilip Reames; RV32-LABEL: unaligned_memcpy3: 794f4f4913SPhilip Reames; RV32: # %bb.0: # %entry 804f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 2(a1) 814f4f4913SPhilip Reames; RV32-NEXT: sb a2, 2(a0) 824f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 1(a1) 834f4f4913SPhilip Reames; RV32-NEXT: sb a2, 1(a0) 844f4f4913SPhilip Reames; RV32-NEXT: lbu a1, 0(a1) 854f4f4913SPhilip Reames; RV32-NEXT: sb a1, 0(a0) 864f4f4913SPhilip Reames; RV32-NEXT: ret 874f4f4913SPhilip Reames; 884f4f4913SPhilip Reames; RV64-LABEL: unaligned_memcpy3: 894f4f4913SPhilip Reames; RV64: # %bb.0: # %entry 904f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 2(a1) 914f4f4913SPhilip Reames; RV64-NEXT: sb a2, 2(a0) 924f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 1(a1) 934f4f4913SPhilip Reames; RV64-NEXT: sb a2, 1(a0) 944f4f4913SPhilip Reames; RV64-NEXT: lbu a1, 0(a1) 954f4f4913SPhilip Reames; RV64-NEXT: sb a1, 0(a0) 964f4f4913SPhilip Reames; RV64-NEXT: ret 974f4f4913SPhilip Reames; 984f4f4913SPhilip Reames; RV32-FAST-LABEL: unaligned_memcpy3: 994f4f4913SPhilip Reames; RV32-FAST: # %bb.0: # %entry 1004f4f4913SPhilip Reames; RV32-FAST-NEXT: lbu a2, 2(a1) 1014f4f4913SPhilip Reames; RV32-FAST-NEXT: sb a2, 2(a0) 1024f4f4913SPhilip Reames; RV32-FAST-NEXT: lh a1, 0(a1) 1034f4f4913SPhilip Reames; RV32-FAST-NEXT: sh a1, 0(a0) 1044f4f4913SPhilip Reames; RV32-FAST-NEXT: ret 1054f4f4913SPhilip Reames; 1064f4f4913SPhilip Reames; RV64-FAST-LABEL: unaligned_memcpy3: 1074f4f4913SPhilip Reames; RV64-FAST: # %bb.0: # %entry 1084f4f4913SPhilip Reames; RV64-FAST-NEXT: lbu a2, 2(a1) 1094f4f4913SPhilip Reames; RV64-FAST-NEXT: sb a2, 2(a0) 1104f4f4913SPhilip Reames; RV64-FAST-NEXT: lh a1, 0(a1) 1114f4f4913SPhilip Reames; RV64-FAST-NEXT: sh a1, 0(a0) 1124f4f4913SPhilip Reames; RV64-FAST-NEXT: ret 1134f4f4913SPhilip Reamesentry: 1144f4f4913SPhilip Reames tail call void @llvm.memcpy.inline.p0.p0.i64(ptr %dest, ptr %src, i64 3, i1 false) 1154f4f4913SPhilip Reames ret void 1164f4f4913SPhilip Reames} 1174f4f4913SPhilip Reames 1184f4f4913SPhilip Reamesdefine void @unaligned_memcpy4(ptr nocapture %dest, ptr %src) nounwind { 1194f4f4913SPhilip Reames; RV32-LABEL: unaligned_memcpy4: 1204f4f4913SPhilip Reames; RV32: # %bb.0: # %entry 1214f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 3(a1) 1224f4f4913SPhilip Reames; RV32-NEXT: sb a2, 3(a0) 1234f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 2(a1) 1244f4f4913SPhilip Reames; RV32-NEXT: sb a2, 2(a0) 1254f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 1(a1) 1264f4f4913SPhilip Reames; RV32-NEXT: sb a2, 1(a0) 1274f4f4913SPhilip Reames; RV32-NEXT: lbu a1, 0(a1) 1284f4f4913SPhilip Reames; RV32-NEXT: sb a1, 0(a0) 1294f4f4913SPhilip Reames; RV32-NEXT: ret 1304f4f4913SPhilip Reames; 1314f4f4913SPhilip Reames; RV64-LABEL: unaligned_memcpy4: 1324f4f4913SPhilip Reames; RV64: # %bb.0: # %entry 1334f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 3(a1) 1344f4f4913SPhilip Reames; RV64-NEXT: sb a2, 3(a0) 1354f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 2(a1) 1364f4f4913SPhilip Reames; RV64-NEXT: sb a2, 2(a0) 1374f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 1(a1) 1384f4f4913SPhilip Reames; RV64-NEXT: sb a2, 1(a0) 1394f4f4913SPhilip Reames; RV64-NEXT: lbu a1, 0(a1) 1404f4f4913SPhilip Reames; RV64-NEXT: sb a1, 0(a0) 1414f4f4913SPhilip Reames; RV64-NEXT: ret 1424f4f4913SPhilip Reames; 1434f4f4913SPhilip Reames; RV32-FAST-LABEL: unaligned_memcpy4: 1444f4f4913SPhilip Reames; RV32-FAST: # %bb.0: # %entry 1454f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a1, 0(a1) 146eb3f2fe4SPhilip Reames; RV32-FAST-NEXT: sw a1, 0(a0) 147eb3f2fe4SPhilip Reames; RV32-FAST-NEXT: ret 14860450f91SCraig Topper; 1494f4f4913SPhilip Reames; RV64-FAST-LABEL: unaligned_memcpy4: 150eb3f2fe4SPhilip Reames; RV64-FAST: # %bb.0: # %entry 1514f4f4913SPhilip Reames; RV64-FAST-NEXT: lw a1, 0(a1) 152eb3f2fe4SPhilip Reames; RV64-FAST-NEXT: sw a1, 0(a0) 153eb3f2fe4SPhilip Reames; RV64-FAST-NEXT: ret 15460450f91SCraig Topperentry: 1554f4f4913SPhilip Reames tail call void @llvm.memcpy.inline.p0.p0.i64(ptr %dest, ptr %src, i64 4, i1 false) 15660450f91SCraig Topper ret void 15760450f91SCraig Topper} 15860450f91SCraig Topper 1594f4f4913SPhilip Reamesdefine void @unaligned_memcpy7(ptr nocapture %dest, ptr %src) nounwind { 1604f4f4913SPhilip Reames; RV32-LABEL: unaligned_memcpy7: 161eb3f2fe4SPhilip Reames; RV32: # %bb.0: # %entry 1624f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 6(a1) 1634f4f4913SPhilip Reames; RV32-NEXT: sb a2, 6(a0) 1644f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 5(a1) 1654f4f4913SPhilip Reames; RV32-NEXT: sb a2, 5(a0) 1664f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 4(a1) 1674f4f4913SPhilip Reames; RV32-NEXT: sb a2, 4(a0) 1684f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 3(a1) 1694f4f4913SPhilip Reames; RV32-NEXT: sb a2, 3(a0) 1704f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 2(a1) 1714f4f4913SPhilip Reames; RV32-NEXT: sb a2, 2(a0) 1724f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 1(a1) 1734f4f4913SPhilip Reames; RV32-NEXT: sb a2, 1(a0) 1744f4f4913SPhilip Reames; RV32-NEXT: lbu a1, 0(a1) 1754f4f4913SPhilip Reames; RV32-NEXT: sb a1, 0(a0) 176eb3f2fe4SPhilip Reames; RV32-NEXT: ret 17760450f91SCraig Topper; 1784f4f4913SPhilip Reames; RV64-LABEL: unaligned_memcpy7: 179eb3f2fe4SPhilip Reames; RV64: # %bb.0: # %entry 1804f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 6(a1) 1814f4f4913SPhilip Reames; RV64-NEXT: sb a2, 6(a0) 1824f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 5(a1) 1834f4f4913SPhilip Reames; RV64-NEXT: sb a2, 5(a0) 1844f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 4(a1) 1854f4f4913SPhilip Reames; RV64-NEXT: sb a2, 4(a0) 1864f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 3(a1) 1874f4f4913SPhilip Reames; RV64-NEXT: sb a2, 3(a0) 1884f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 2(a1) 1894f4f4913SPhilip Reames; RV64-NEXT: sb a2, 2(a0) 1904f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 1(a1) 1914f4f4913SPhilip Reames; RV64-NEXT: sb a2, 1(a0) 1924f4f4913SPhilip Reames; RV64-NEXT: lbu a1, 0(a1) 1934f4f4913SPhilip Reames; RV64-NEXT: sb a1, 0(a0) 194eb3f2fe4SPhilip Reames; RV64-NEXT: ret 19560450f91SCraig Topper; 1964f4f4913SPhilip Reames; RV32-FAST-LABEL: unaligned_memcpy7: 197eb3f2fe4SPhilip Reames; RV32-FAST: # %bb.0: # %entry 1984f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 3(a1) 1994f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 3(a0) 2004f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a1, 0(a1) 2014f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a1, 0(a0) 202eb3f2fe4SPhilip Reames; RV32-FAST-NEXT: ret 20308533f8bSJake Egan; 2044f4f4913SPhilip Reames; RV64-FAST-LABEL: unaligned_memcpy7: 205eb3f2fe4SPhilip Reames; RV64-FAST: # %bb.0: # %entry 2064f4f4913SPhilip Reames; RV64-FAST-NEXT: lw a2, 3(a1) 2074f4f4913SPhilip Reames; RV64-FAST-NEXT: sw a2, 3(a0) 2084f4f4913SPhilip Reames; RV64-FAST-NEXT: lw a1, 0(a1) 2094f4f4913SPhilip Reames; RV64-FAST-NEXT: sw a1, 0(a0) 210eb3f2fe4SPhilip Reames; RV64-FAST-NEXT: ret 21160450f91SCraig Topperentry: 2124f4f4913SPhilip Reames tail call void @llvm.memcpy.inline.p0.p0.i64(ptr %dest, ptr %src, i64 7, i1 false) 21360450f91SCraig Topper ret void 21460450f91SCraig Topper} 21560450f91SCraig Topper 2164f4f4913SPhilip Reamesdefine void @unaligned_memcpy8(ptr nocapture %dest, ptr %src) nounwind { 2174f4f4913SPhilip Reames; RV32-LABEL: unaligned_memcpy8: 2184f4f4913SPhilip Reames; RV32: # %bb.0: # %entry 2194f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 7(a1) 2204f4f4913SPhilip Reames; RV32-NEXT: sb a2, 7(a0) 2214f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 6(a1) 2224f4f4913SPhilip Reames; RV32-NEXT: sb a2, 6(a0) 2234f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 5(a1) 2244f4f4913SPhilip Reames; RV32-NEXT: sb a2, 5(a0) 2254f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 4(a1) 2264f4f4913SPhilip Reames; RV32-NEXT: sb a2, 4(a0) 2274f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 3(a1) 2284f4f4913SPhilip Reames; RV32-NEXT: sb a2, 3(a0) 2294f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 2(a1) 2304f4f4913SPhilip Reames; RV32-NEXT: sb a2, 2(a0) 2314f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 1(a1) 2324f4f4913SPhilip Reames; RV32-NEXT: sb a2, 1(a0) 2334f4f4913SPhilip Reames; RV32-NEXT: lbu a1, 0(a1) 2344f4f4913SPhilip Reames; RV32-NEXT: sb a1, 0(a0) 2354f4f4913SPhilip Reames; RV32-NEXT: ret 2364f4f4913SPhilip Reames; 2374f4f4913SPhilip Reames; RV64-LABEL: unaligned_memcpy8: 2384f4f4913SPhilip Reames; RV64: # %bb.0: # %entry 2394f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 7(a1) 2404f4f4913SPhilip Reames; RV64-NEXT: sb a2, 7(a0) 2414f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 6(a1) 2424f4f4913SPhilip Reames; RV64-NEXT: sb a2, 6(a0) 2434f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 5(a1) 2444f4f4913SPhilip Reames; RV64-NEXT: sb a2, 5(a0) 2454f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 4(a1) 2464f4f4913SPhilip Reames; RV64-NEXT: sb a2, 4(a0) 2474f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 3(a1) 2484f4f4913SPhilip Reames; RV64-NEXT: sb a2, 3(a0) 2494f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 2(a1) 2504f4f4913SPhilip Reames; RV64-NEXT: sb a2, 2(a0) 2514f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 1(a1) 2524f4f4913SPhilip Reames; RV64-NEXT: sb a2, 1(a0) 2534f4f4913SPhilip Reames; RV64-NEXT: lbu a1, 0(a1) 2544f4f4913SPhilip Reames; RV64-NEXT: sb a1, 0(a0) 2554f4f4913SPhilip Reames; RV64-NEXT: ret 2564f4f4913SPhilip Reames; 2574f4f4913SPhilip Reames; RV32-FAST-LABEL: unaligned_memcpy8: 2584f4f4913SPhilip Reames; RV32-FAST: # %bb.0: # %entry 2594f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 4(a1) 2604f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 4(a0) 2614f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a1, 0(a1) 2624f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a1, 0(a0) 2634f4f4913SPhilip Reames; RV32-FAST-NEXT: ret 2644f4f4913SPhilip Reames; 2654f4f4913SPhilip Reames; RV64-FAST-LABEL: unaligned_memcpy8: 2664f4f4913SPhilip Reames; RV64-FAST: # %bb.0: # %entry 2674f4f4913SPhilip Reames; RV64-FAST-NEXT: ld a1, 0(a1) 2684f4f4913SPhilip Reames; RV64-FAST-NEXT: sd a1, 0(a0) 2694f4f4913SPhilip Reames; RV64-FAST-NEXT: ret 2704f4f4913SPhilip Reamesentry: 2714f4f4913SPhilip Reames tail call void @llvm.memcpy.inline.p0.p0.i64(ptr %dest, ptr %src, i64 8, i1 false) 2724f4f4913SPhilip Reames ret void 2734f4f4913SPhilip Reames} 27460450f91SCraig Topper 2754f4f4913SPhilip Reamesdefine void @unaligned_memcpy15(ptr nocapture %dest, ptr %src) nounwind { 2764f4f4913SPhilip Reames; RV32-LABEL: unaligned_memcpy15: 2774f4f4913SPhilip Reames; RV32: # %bb.0: # %entry 2784f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 14(a1) 2794f4f4913SPhilip Reames; RV32-NEXT: sb a2, 14(a0) 2804f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 13(a1) 2814f4f4913SPhilip Reames; RV32-NEXT: sb a2, 13(a0) 2824f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 12(a1) 2834f4f4913SPhilip Reames; RV32-NEXT: sb a2, 12(a0) 2844f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 11(a1) 2854f4f4913SPhilip Reames; RV32-NEXT: sb a2, 11(a0) 2864f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 10(a1) 2874f4f4913SPhilip Reames; RV32-NEXT: sb a2, 10(a0) 2884f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 9(a1) 2894f4f4913SPhilip Reames; RV32-NEXT: sb a2, 9(a0) 2904f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 8(a1) 2914f4f4913SPhilip Reames; RV32-NEXT: sb a2, 8(a0) 2924f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 7(a1) 2934f4f4913SPhilip Reames; RV32-NEXT: sb a2, 7(a0) 2944f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 6(a1) 2954f4f4913SPhilip Reames; RV32-NEXT: sb a2, 6(a0) 2964f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 5(a1) 2974f4f4913SPhilip Reames; RV32-NEXT: sb a2, 5(a0) 2984f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 4(a1) 2994f4f4913SPhilip Reames; RV32-NEXT: sb a2, 4(a0) 3004f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 3(a1) 3014f4f4913SPhilip Reames; RV32-NEXT: sb a2, 3(a0) 3024f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 2(a1) 3034f4f4913SPhilip Reames; RV32-NEXT: sb a2, 2(a0) 3044f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 1(a1) 3054f4f4913SPhilip Reames; RV32-NEXT: sb a2, 1(a0) 3064f4f4913SPhilip Reames; RV32-NEXT: lbu a1, 0(a1) 3074f4f4913SPhilip Reames; RV32-NEXT: sb a1, 0(a0) 3084f4f4913SPhilip Reames; RV32-NEXT: ret 3094f4f4913SPhilip Reames; 3104f4f4913SPhilip Reames; RV64-LABEL: unaligned_memcpy15: 3114f4f4913SPhilip Reames; RV64: # %bb.0: # %entry 3124f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 14(a1) 3134f4f4913SPhilip Reames; RV64-NEXT: sb a2, 14(a0) 3144f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 13(a1) 3154f4f4913SPhilip Reames; RV64-NEXT: sb a2, 13(a0) 3164f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 12(a1) 3174f4f4913SPhilip Reames; RV64-NEXT: sb a2, 12(a0) 3184f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 11(a1) 3194f4f4913SPhilip Reames; RV64-NEXT: sb a2, 11(a0) 3204f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 10(a1) 3214f4f4913SPhilip Reames; RV64-NEXT: sb a2, 10(a0) 3224f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 9(a1) 3234f4f4913SPhilip Reames; RV64-NEXT: sb a2, 9(a0) 3244f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 8(a1) 3254f4f4913SPhilip Reames; RV64-NEXT: sb a2, 8(a0) 3264f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 7(a1) 3274f4f4913SPhilip Reames; RV64-NEXT: sb a2, 7(a0) 3284f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 6(a1) 3294f4f4913SPhilip Reames; RV64-NEXT: sb a2, 6(a0) 3304f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 5(a1) 3314f4f4913SPhilip Reames; RV64-NEXT: sb a2, 5(a0) 3324f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 4(a1) 3334f4f4913SPhilip Reames; RV64-NEXT: sb a2, 4(a0) 3344f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 3(a1) 3354f4f4913SPhilip Reames; RV64-NEXT: sb a2, 3(a0) 3364f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 2(a1) 3374f4f4913SPhilip Reames; RV64-NEXT: sb a2, 2(a0) 3384f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 1(a1) 3394f4f4913SPhilip Reames; RV64-NEXT: sb a2, 1(a0) 3404f4f4913SPhilip Reames; RV64-NEXT: lbu a1, 0(a1) 3414f4f4913SPhilip Reames; RV64-NEXT: sb a1, 0(a0) 3424f4f4913SPhilip Reames; RV64-NEXT: ret 3434f4f4913SPhilip Reames; 3444f4f4913SPhilip Reames; RV32-FAST-LABEL: unaligned_memcpy15: 3454f4f4913SPhilip Reames; RV32-FAST: # %bb.0: # %entry 3464f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 11(a1) 3474f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 11(a0) 3484f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 8(a1) 3494f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 8(a0) 3504f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 4(a1) 3514f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 4(a0) 3524f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a1, 0(a1) 3534f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a1, 0(a0) 3544f4f4913SPhilip Reames; RV32-FAST-NEXT: ret 3554f4f4913SPhilip Reames; 3564f4f4913SPhilip Reames; RV64-FAST-LABEL: unaligned_memcpy15: 3574f4f4913SPhilip Reames; RV64-FAST: # %bb.0: # %entry 3584f4f4913SPhilip Reames; RV64-FAST-NEXT: ld a2, 7(a1) 3594f4f4913SPhilip Reames; RV64-FAST-NEXT: sd a2, 7(a0) 3604f4f4913SPhilip Reames; RV64-FAST-NEXT: ld a1, 0(a1) 3614f4f4913SPhilip Reames; RV64-FAST-NEXT: sd a1, 0(a0) 3624f4f4913SPhilip Reames; RV64-FAST-NEXT: ret 3634f4f4913SPhilip Reamesentry: 3644f4f4913SPhilip Reames tail call void @llvm.memcpy.inline.p0.p0.i64(ptr %dest, ptr %src, i64 15, i1 false) 3654f4f4913SPhilip Reames ret void 3664f4f4913SPhilip Reames} 3674f4f4913SPhilip Reames 3684f4f4913SPhilip Reamesdefine void @unaligned_memcpy16(ptr nocapture %dest, ptr %src) nounwind { 3694f4f4913SPhilip Reames; RV32-LABEL: unaligned_memcpy16: 3704f4f4913SPhilip Reames; RV32: # %bb.0: # %entry 3714f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 15(a1) 3724f4f4913SPhilip Reames; RV32-NEXT: sb a2, 15(a0) 3734f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 14(a1) 3744f4f4913SPhilip Reames; RV32-NEXT: sb a2, 14(a0) 3754f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 13(a1) 3764f4f4913SPhilip Reames; RV32-NEXT: sb a2, 13(a0) 3774f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 12(a1) 3784f4f4913SPhilip Reames; RV32-NEXT: sb a2, 12(a0) 3794f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 11(a1) 3804f4f4913SPhilip Reames; RV32-NEXT: sb a2, 11(a0) 3814f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 10(a1) 3824f4f4913SPhilip Reames; RV32-NEXT: sb a2, 10(a0) 3834f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 9(a1) 3844f4f4913SPhilip Reames; RV32-NEXT: sb a2, 9(a0) 3854f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 8(a1) 3864f4f4913SPhilip Reames; RV32-NEXT: sb a2, 8(a0) 3874f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 7(a1) 3884f4f4913SPhilip Reames; RV32-NEXT: sb a2, 7(a0) 3894f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 6(a1) 3904f4f4913SPhilip Reames; RV32-NEXT: sb a2, 6(a0) 3914f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 5(a1) 3924f4f4913SPhilip Reames; RV32-NEXT: sb a2, 5(a0) 3934f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 4(a1) 3944f4f4913SPhilip Reames; RV32-NEXT: sb a2, 4(a0) 3954f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 3(a1) 3964f4f4913SPhilip Reames; RV32-NEXT: sb a2, 3(a0) 3974f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 2(a1) 3984f4f4913SPhilip Reames; RV32-NEXT: sb a2, 2(a0) 3994f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 1(a1) 4004f4f4913SPhilip Reames; RV32-NEXT: sb a2, 1(a0) 4014f4f4913SPhilip Reames; RV32-NEXT: lbu a1, 0(a1) 4024f4f4913SPhilip Reames; RV32-NEXT: sb a1, 0(a0) 4034f4f4913SPhilip Reames; RV32-NEXT: ret 4044f4f4913SPhilip Reames; 4054f4f4913SPhilip Reames; RV64-LABEL: unaligned_memcpy16: 4064f4f4913SPhilip Reames; RV64: # %bb.0: # %entry 4074f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 15(a1) 4084f4f4913SPhilip Reames; RV64-NEXT: sb a2, 15(a0) 4094f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 14(a1) 4104f4f4913SPhilip Reames; RV64-NEXT: sb a2, 14(a0) 4114f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 13(a1) 4124f4f4913SPhilip Reames; RV64-NEXT: sb a2, 13(a0) 4134f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 12(a1) 4144f4f4913SPhilip Reames; RV64-NEXT: sb a2, 12(a0) 4154f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 11(a1) 4164f4f4913SPhilip Reames; RV64-NEXT: sb a2, 11(a0) 4174f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 10(a1) 4184f4f4913SPhilip Reames; RV64-NEXT: sb a2, 10(a0) 4194f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 9(a1) 4204f4f4913SPhilip Reames; RV64-NEXT: sb a2, 9(a0) 4214f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 8(a1) 4224f4f4913SPhilip Reames; RV64-NEXT: sb a2, 8(a0) 4234f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 7(a1) 4244f4f4913SPhilip Reames; RV64-NEXT: sb a2, 7(a0) 4254f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 6(a1) 4264f4f4913SPhilip Reames; RV64-NEXT: sb a2, 6(a0) 4274f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 5(a1) 4284f4f4913SPhilip Reames; RV64-NEXT: sb a2, 5(a0) 4294f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 4(a1) 4304f4f4913SPhilip Reames; RV64-NEXT: sb a2, 4(a0) 4314f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 3(a1) 4324f4f4913SPhilip Reames; RV64-NEXT: sb a2, 3(a0) 4334f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 2(a1) 4344f4f4913SPhilip Reames; RV64-NEXT: sb a2, 2(a0) 4354f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 1(a1) 4364f4f4913SPhilip Reames; RV64-NEXT: sb a2, 1(a0) 4374f4f4913SPhilip Reames; RV64-NEXT: lbu a1, 0(a1) 4384f4f4913SPhilip Reames; RV64-NEXT: sb a1, 0(a0) 4394f4f4913SPhilip Reames; RV64-NEXT: ret 4404f4f4913SPhilip Reames; 4414f4f4913SPhilip Reames; RV32-FAST-LABEL: unaligned_memcpy16: 4424f4f4913SPhilip Reames; RV32-FAST: # %bb.0: # %entry 4434f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 12(a1) 4444f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 12(a0) 4454f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 8(a1) 4464f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 8(a0) 4474f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 4(a1) 4484f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 4(a0) 4494f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a1, 0(a1) 4504f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a1, 0(a0) 4514f4f4913SPhilip Reames; RV32-FAST-NEXT: ret 4524f4f4913SPhilip Reames; 4534f4f4913SPhilip Reames; RV64-FAST-LABEL: unaligned_memcpy16: 4544f4f4913SPhilip Reames; RV64-FAST: # %bb.0: # %entry 4554f4f4913SPhilip Reames; RV64-FAST-NEXT: ld a2, 8(a1) 4564f4f4913SPhilip Reames; RV64-FAST-NEXT: sd a2, 8(a0) 4574f4f4913SPhilip Reames; RV64-FAST-NEXT: ld a1, 0(a1) 4584f4f4913SPhilip Reames; RV64-FAST-NEXT: sd a1, 0(a0) 4594f4f4913SPhilip Reames; RV64-FAST-NEXT: ret 4604f4f4913SPhilip Reamesentry: 4614f4f4913SPhilip Reames tail call void @llvm.memcpy.inline.p0.p0.i64(ptr %dest, ptr %src, i64 16, i1 false) 4624f4f4913SPhilip Reames ret void 4634f4f4913SPhilip Reames} 4644f4f4913SPhilip Reames 4654f4f4913SPhilip Reamesdefine void @unaligned_memcpy31(ptr nocapture %dest, ptr %src) nounwind { 4664f4f4913SPhilip Reames; RV32-LABEL: unaligned_memcpy31: 4674f4f4913SPhilip Reames; RV32: # %bb.0: # %entry 4684f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 30(a1) 4694f4f4913SPhilip Reames; RV32-NEXT: sb a2, 30(a0) 4704f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 29(a1) 4714f4f4913SPhilip Reames; RV32-NEXT: sb a2, 29(a0) 4724f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 28(a1) 4734f4f4913SPhilip Reames; RV32-NEXT: sb a2, 28(a0) 4744f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 27(a1) 4754f4f4913SPhilip Reames; RV32-NEXT: sb a2, 27(a0) 4764f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 26(a1) 4774f4f4913SPhilip Reames; RV32-NEXT: sb a2, 26(a0) 4784f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 25(a1) 4794f4f4913SPhilip Reames; RV32-NEXT: sb a2, 25(a0) 4804f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 24(a1) 4814f4f4913SPhilip Reames; RV32-NEXT: sb a2, 24(a0) 4824f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 23(a1) 4834f4f4913SPhilip Reames; RV32-NEXT: sb a2, 23(a0) 4844f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 22(a1) 4854f4f4913SPhilip Reames; RV32-NEXT: sb a2, 22(a0) 4864f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 21(a1) 4874f4f4913SPhilip Reames; RV32-NEXT: sb a2, 21(a0) 4884f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 20(a1) 4894f4f4913SPhilip Reames; RV32-NEXT: sb a2, 20(a0) 4904f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 19(a1) 4914f4f4913SPhilip Reames; RV32-NEXT: sb a2, 19(a0) 4924f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 18(a1) 4934f4f4913SPhilip Reames; RV32-NEXT: sb a2, 18(a0) 4944f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 17(a1) 4954f4f4913SPhilip Reames; RV32-NEXT: sb a2, 17(a0) 4964f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 16(a1) 4974f4f4913SPhilip Reames; RV32-NEXT: sb a2, 16(a0) 4984f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 15(a1) 4994f4f4913SPhilip Reames; RV32-NEXT: sb a2, 15(a0) 5004f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 14(a1) 5014f4f4913SPhilip Reames; RV32-NEXT: sb a2, 14(a0) 5024f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 13(a1) 5034f4f4913SPhilip Reames; RV32-NEXT: sb a2, 13(a0) 5044f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 12(a1) 5054f4f4913SPhilip Reames; RV32-NEXT: sb a2, 12(a0) 5064f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 11(a1) 5074f4f4913SPhilip Reames; RV32-NEXT: sb a2, 11(a0) 5084f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 10(a1) 5094f4f4913SPhilip Reames; RV32-NEXT: sb a2, 10(a0) 5104f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 9(a1) 5114f4f4913SPhilip Reames; RV32-NEXT: sb a2, 9(a0) 5124f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 8(a1) 5134f4f4913SPhilip Reames; RV32-NEXT: sb a2, 8(a0) 5144f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 7(a1) 5154f4f4913SPhilip Reames; RV32-NEXT: sb a2, 7(a0) 5164f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 6(a1) 5174f4f4913SPhilip Reames; RV32-NEXT: sb a2, 6(a0) 5184f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 5(a1) 5194f4f4913SPhilip Reames; RV32-NEXT: sb a2, 5(a0) 5204f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 4(a1) 5214f4f4913SPhilip Reames; RV32-NEXT: sb a2, 4(a0) 5224f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 3(a1) 5234f4f4913SPhilip Reames; RV32-NEXT: sb a2, 3(a0) 5244f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 2(a1) 5254f4f4913SPhilip Reames; RV32-NEXT: sb a2, 2(a0) 5264f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 1(a1) 5274f4f4913SPhilip Reames; RV32-NEXT: sb a2, 1(a0) 5284f4f4913SPhilip Reames; RV32-NEXT: lbu a1, 0(a1) 5294f4f4913SPhilip Reames; RV32-NEXT: sb a1, 0(a0) 5304f4f4913SPhilip Reames; RV32-NEXT: ret 5314f4f4913SPhilip Reames; 5324f4f4913SPhilip Reames; RV64-LABEL: unaligned_memcpy31: 5334f4f4913SPhilip Reames; RV64: # %bb.0: # %entry 5344f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 30(a1) 5354f4f4913SPhilip Reames; RV64-NEXT: sb a2, 30(a0) 5364f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 29(a1) 5374f4f4913SPhilip Reames; RV64-NEXT: sb a2, 29(a0) 5384f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 28(a1) 5394f4f4913SPhilip Reames; RV64-NEXT: sb a2, 28(a0) 5404f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 27(a1) 5414f4f4913SPhilip Reames; RV64-NEXT: sb a2, 27(a0) 5424f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 26(a1) 5434f4f4913SPhilip Reames; RV64-NEXT: sb a2, 26(a0) 5444f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 25(a1) 5454f4f4913SPhilip Reames; RV64-NEXT: sb a2, 25(a0) 5464f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 24(a1) 5474f4f4913SPhilip Reames; RV64-NEXT: sb a2, 24(a0) 5484f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 23(a1) 5494f4f4913SPhilip Reames; RV64-NEXT: sb a2, 23(a0) 5504f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 22(a1) 5514f4f4913SPhilip Reames; RV64-NEXT: sb a2, 22(a0) 5524f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 21(a1) 5534f4f4913SPhilip Reames; RV64-NEXT: sb a2, 21(a0) 5544f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 20(a1) 5554f4f4913SPhilip Reames; RV64-NEXT: sb a2, 20(a0) 5564f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 19(a1) 5574f4f4913SPhilip Reames; RV64-NEXT: sb a2, 19(a0) 5584f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 18(a1) 5594f4f4913SPhilip Reames; RV64-NEXT: sb a2, 18(a0) 5604f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 17(a1) 5614f4f4913SPhilip Reames; RV64-NEXT: sb a2, 17(a0) 5624f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 16(a1) 5634f4f4913SPhilip Reames; RV64-NEXT: sb a2, 16(a0) 5644f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 15(a1) 5654f4f4913SPhilip Reames; RV64-NEXT: sb a2, 15(a0) 5664f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 14(a1) 5674f4f4913SPhilip Reames; RV64-NEXT: sb a2, 14(a0) 5684f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 13(a1) 5694f4f4913SPhilip Reames; RV64-NEXT: sb a2, 13(a0) 5704f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 12(a1) 5714f4f4913SPhilip Reames; RV64-NEXT: sb a2, 12(a0) 5724f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 11(a1) 5734f4f4913SPhilip Reames; RV64-NEXT: sb a2, 11(a0) 5744f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 10(a1) 5754f4f4913SPhilip Reames; RV64-NEXT: sb a2, 10(a0) 5764f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 9(a1) 5774f4f4913SPhilip Reames; RV64-NEXT: sb a2, 9(a0) 5784f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 8(a1) 5794f4f4913SPhilip Reames; RV64-NEXT: sb a2, 8(a0) 5804f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 7(a1) 5814f4f4913SPhilip Reames; RV64-NEXT: sb a2, 7(a0) 5824f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 6(a1) 5834f4f4913SPhilip Reames; RV64-NEXT: sb a2, 6(a0) 5844f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 5(a1) 5854f4f4913SPhilip Reames; RV64-NEXT: sb a2, 5(a0) 5864f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 4(a1) 5874f4f4913SPhilip Reames; RV64-NEXT: sb a2, 4(a0) 5884f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 3(a1) 5894f4f4913SPhilip Reames; RV64-NEXT: sb a2, 3(a0) 5904f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 2(a1) 5914f4f4913SPhilip Reames; RV64-NEXT: sb a2, 2(a0) 5924f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 1(a1) 5934f4f4913SPhilip Reames; RV64-NEXT: sb a2, 1(a0) 5944f4f4913SPhilip Reames; RV64-NEXT: lbu a1, 0(a1) 5954f4f4913SPhilip Reames; RV64-NEXT: sb a1, 0(a0) 5964f4f4913SPhilip Reames; RV64-NEXT: ret 5974f4f4913SPhilip Reames; 5984f4f4913SPhilip Reames; RV32-FAST-LABEL: unaligned_memcpy31: 5994f4f4913SPhilip Reames; RV32-FAST: # %bb.0: # %entry 6004f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 27(a1) 6014f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 27(a0) 6024f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 24(a1) 6034f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 24(a0) 6044f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 20(a1) 6054f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 20(a0) 6064f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 16(a1) 6074f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 16(a0) 6084f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 12(a1) 6094f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 12(a0) 6104f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 8(a1) 6114f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 8(a0) 6124f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 4(a1) 6134f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 4(a0) 6144f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a1, 0(a1) 6154f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a1, 0(a0) 6164f4f4913SPhilip Reames; RV32-FAST-NEXT: ret 6174f4f4913SPhilip Reames; 6184f4f4913SPhilip Reames; RV64-FAST-LABEL: unaligned_memcpy31: 6194f4f4913SPhilip Reames; RV64-FAST: # %bb.0: # %entry 6204f4f4913SPhilip Reames; RV64-FAST-NEXT: ld a2, 23(a1) 6214f4f4913SPhilip Reames; RV64-FAST-NEXT: sd a2, 23(a0) 6224f4f4913SPhilip Reames; RV64-FAST-NEXT: ld a2, 16(a1) 6234f4f4913SPhilip Reames; RV64-FAST-NEXT: sd a2, 16(a0) 6244f4f4913SPhilip Reames; RV64-FAST-NEXT: ld a2, 8(a1) 6254f4f4913SPhilip Reames; RV64-FAST-NEXT: sd a2, 8(a0) 6264f4f4913SPhilip Reames; RV64-FAST-NEXT: ld a1, 0(a1) 6274f4f4913SPhilip Reames; RV64-FAST-NEXT: sd a1, 0(a0) 6284f4f4913SPhilip Reames; RV64-FAST-NEXT: ret 6294f4f4913SPhilip Reamesentry: 6304f4f4913SPhilip Reames tail call void @llvm.memcpy.inline.p0.p0.i64(ptr %dest, ptr %src, i64 31, i1 false) 6314f4f4913SPhilip Reames ret void 6324f4f4913SPhilip Reames} 6334f4f4913SPhilip Reames 6344f4f4913SPhilip Reames; ---------------------------------------------------------------------- 6354f4f4913SPhilip Reames; Fully aligned cases 6364f4f4913SPhilip Reames 6374f4f4913SPhilip Reamesdefine void @aligned_memcpy0(ptr nocapture %dest, ptr %src) nounwind { 6384f4f4913SPhilip Reames; RV32-BOTH-LABEL: aligned_memcpy0: 6394f4f4913SPhilip Reames; RV32-BOTH: # %bb.0: # %entry 6404f4f4913SPhilip Reames; RV32-BOTH-NEXT: ret 6414f4f4913SPhilip Reames; 6424f4f4913SPhilip Reames; RV64-BOTH-LABEL: aligned_memcpy0: 6434f4f4913SPhilip Reames; RV64-BOTH: # %bb.0: # %entry 6444f4f4913SPhilip Reames; RV64-BOTH-NEXT: ret 6454f4f4913SPhilip Reamesentry: 6464f4f4913SPhilip Reames tail call void @llvm.memcpy.inline.p0.p0.i64(ptr align 8 %dest, ptr align 8 %src, i64 0, i1 false) 6474f4f4913SPhilip Reames ret void 6484f4f4913SPhilip Reames} 6494f4f4913SPhilip Reames 6504f4f4913SPhilip Reamesdefine void @aligned_memcpy1(ptr nocapture %dest, ptr %src) nounwind { 6514f4f4913SPhilip Reames; RV32-BOTH-LABEL: aligned_memcpy1: 6524f4f4913SPhilip Reames; RV32-BOTH: # %bb.0: # %entry 6534f4f4913SPhilip Reames; RV32-BOTH-NEXT: lbu a1, 0(a1) 6544f4f4913SPhilip Reames; RV32-BOTH-NEXT: sb a1, 0(a0) 6554f4f4913SPhilip Reames; RV32-BOTH-NEXT: ret 6564f4f4913SPhilip Reames; 6574f4f4913SPhilip Reames; RV64-BOTH-LABEL: aligned_memcpy1: 6584f4f4913SPhilip Reames; RV64-BOTH: # %bb.0: # %entry 6594f4f4913SPhilip Reames; RV64-BOTH-NEXT: lbu a1, 0(a1) 6604f4f4913SPhilip Reames; RV64-BOTH-NEXT: sb a1, 0(a0) 6614f4f4913SPhilip Reames; RV64-BOTH-NEXT: ret 6624f4f4913SPhilip Reamesentry: 6634f4f4913SPhilip Reames tail call void @llvm.memcpy.inline.p0.p0.i64(ptr align 8 %dest, ptr align 8 %src, i64 1, i1 false) 6644f4f4913SPhilip Reames ret void 6654f4f4913SPhilip Reames} 6664f4f4913SPhilip Reames 6674f4f4913SPhilip Reamesdefine void @aligned_memcpy2(ptr nocapture %dest, ptr %src) nounwind { 6684f4f4913SPhilip Reames; RV32-BOTH-LABEL: aligned_memcpy2: 6694f4f4913SPhilip Reames; RV32-BOTH: # %bb.0: # %entry 6704f4f4913SPhilip Reames; RV32-BOTH-NEXT: lh a1, 0(a1) 6714f4f4913SPhilip Reames; RV32-BOTH-NEXT: sh a1, 0(a0) 6724f4f4913SPhilip Reames; RV32-BOTH-NEXT: ret 6734f4f4913SPhilip Reames; 6744f4f4913SPhilip Reames; RV64-BOTH-LABEL: aligned_memcpy2: 6754f4f4913SPhilip Reames; RV64-BOTH: # %bb.0: # %entry 6764f4f4913SPhilip Reames; RV64-BOTH-NEXT: lh a1, 0(a1) 6774f4f4913SPhilip Reames; RV64-BOTH-NEXT: sh a1, 0(a0) 6784f4f4913SPhilip Reames; RV64-BOTH-NEXT: ret 6794f4f4913SPhilip Reamesentry: 6804f4f4913SPhilip Reames tail call void @llvm.memcpy.inline.p0.p0.i64(ptr align 8 %dest, ptr align 8 %src, i64 2, i1 false) 6814f4f4913SPhilip Reames ret void 6824f4f4913SPhilip Reames} 6834f4f4913SPhilip Reames 6844f4f4913SPhilip Reamesdefine void @aligned_memcpy3(ptr nocapture %dest, ptr %src) nounwind { 6854f4f4913SPhilip Reames; RV32-BOTH-LABEL: aligned_memcpy3: 6864f4f4913SPhilip Reames; RV32-BOTH: # %bb.0: # %entry 6874f4f4913SPhilip Reames; RV32-BOTH-NEXT: lbu a2, 2(a1) 6884f4f4913SPhilip Reames; RV32-BOTH-NEXT: sb a2, 2(a0) 6894f4f4913SPhilip Reames; RV32-BOTH-NEXT: lh a1, 0(a1) 6904f4f4913SPhilip Reames; RV32-BOTH-NEXT: sh a1, 0(a0) 6914f4f4913SPhilip Reames; RV32-BOTH-NEXT: ret 6924f4f4913SPhilip Reames; 6934f4f4913SPhilip Reames; RV64-BOTH-LABEL: aligned_memcpy3: 6944f4f4913SPhilip Reames; RV64-BOTH: # %bb.0: # %entry 6954f4f4913SPhilip Reames; RV64-BOTH-NEXT: lbu a2, 2(a1) 6964f4f4913SPhilip Reames; RV64-BOTH-NEXT: sb a2, 2(a0) 6974f4f4913SPhilip Reames; RV64-BOTH-NEXT: lh a1, 0(a1) 6984f4f4913SPhilip Reames; RV64-BOTH-NEXT: sh a1, 0(a0) 6994f4f4913SPhilip Reames; RV64-BOTH-NEXT: ret 7004f4f4913SPhilip Reamesentry: 7014f4f4913SPhilip Reames tail call void @llvm.memcpy.inline.p0.p0.i64(ptr align 8 %dest, ptr align 8 %src, i64 3, i1 false) 7024f4f4913SPhilip Reames ret void 7034f4f4913SPhilip Reames} 7044f4f4913SPhilip Reames 7054f4f4913SPhilip Reamesdefine void @aligned_memcpy4(ptr nocapture %dest, ptr %src) nounwind { 7064f4f4913SPhilip Reames; RV32-BOTH-LABEL: aligned_memcpy4: 7074f4f4913SPhilip Reames; RV32-BOTH: # %bb.0: # %entry 7084f4f4913SPhilip Reames; RV32-BOTH-NEXT: lw a1, 0(a1) 7094f4f4913SPhilip Reames; RV32-BOTH-NEXT: sw a1, 0(a0) 7104f4f4913SPhilip Reames; RV32-BOTH-NEXT: ret 7114f4f4913SPhilip Reames; 7124f4f4913SPhilip Reames; RV64-BOTH-LABEL: aligned_memcpy4: 7134f4f4913SPhilip Reames; RV64-BOTH: # %bb.0: # %entry 7144f4f4913SPhilip Reames; RV64-BOTH-NEXT: lw a1, 0(a1) 7154f4f4913SPhilip Reames; RV64-BOTH-NEXT: sw a1, 0(a0) 7164f4f4913SPhilip Reames; RV64-BOTH-NEXT: ret 7174f4f4913SPhilip Reamesentry: 7184f4f4913SPhilip Reames tail call void @llvm.memcpy.inline.p0.p0.i64(ptr align 8 %dest, ptr align 8 %src, i64 4, i1 false) 7194f4f4913SPhilip Reames ret void 7204f4f4913SPhilip Reames} 7214f4f4913SPhilip Reames 7224f4f4913SPhilip Reamesdefine void @aligned_memcpy7(ptr nocapture %dest, ptr %src) nounwind { 7234f4f4913SPhilip Reames; RV32-LABEL: aligned_memcpy7: 7244f4f4913SPhilip Reames; RV32: # %bb.0: # %entry 7254f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 6(a1) 7264f4f4913SPhilip Reames; RV32-NEXT: sb a2, 6(a0) 7274f4f4913SPhilip Reames; RV32-NEXT: lh a2, 4(a1) 7284f4f4913SPhilip Reames; RV32-NEXT: sh a2, 4(a0) 7294f4f4913SPhilip Reames; RV32-NEXT: lw a1, 0(a1) 7304f4f4913SPhilip Reames; RV32-NEXT: sw a1, 0(a0) 7314f4f4913SPhilip Reames; RV32-NEXT: ret 7324f4f4913SPhilip Reames; 7334f4f4913SPhilip Reames; RV64-LABEL: aligned_memcpy7: 7344f4f4913SPhilip Reames; RV64: # %bb.0: # %entry 7354f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 6(a1) 7364f4f4913SPhilip Reames; RV64-NEXT: sb a2, 6(a0) 7374f4f4913SPhilip Reames; RV64-NEXT: lh a2, 4(a1) 7384f4f4913SPhilip Reames; RV64-NEXT: sh a2, 4(a0) 7394f4f4913SPhilip Reames; RV64-NEXT: lw a1, 0(a1) 7404f4f4913SPhilip Reames; RV64-NEXT: sw a1, 0(a0) 7414f4f4913SPhilip Reames; RV64-NEXT: ret 7424f4f4913SPhilip Reames; 7434f4f4913SPhilip Reames; RV32-FAST-LABEL: aligned_memcpy7: 7444f4f4913SPhilip Reames; RV32-FAST: # %bb.0: # %entry 7454f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 3(a1) 7464f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 3(a0) 7474f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a1, 0(a1) 7484f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a1, 0(a0) 7494f4f4913SPhilip Reames; RV32-FAST-NEXT: ret 7504f4f4913SPhilip Reames; 7514f4f4913SPhilip Reames; RV64-FAST-LABEL: aligned_memcpy7: 7524f4f4913SPhilip Reames; RV64-FAST: # %bb.0: # %entry 7534f4f4913SPhilip Reames; RV64-FAST-NEXT: lw a2, 3(a1) 7544f4f4913SPhilip Reames; RV64-FAST-NEXT: sw a2, 3(a0) 7554f4f4913SPhilip Reames; RV64-FAST-NEXT: lw a1, 0(a1) 7564f4f4913SPhilip Reames; RV64-FAST-NEXT: sw a1, 0(a0) 7574f4f4913SPhilip Reames; RV64-FAST-NEXT: ret 7584f4f4913SPhilip Reamesentry: 7594f4f4913SPhilip Reames tail call void @llvm.memcpy.inline.p0.p0.i64(ptr align 8 %dest, ptr align 8 %src, i64 7, i1 false) 7604f4f4913SPhilip Reames ret void 7614f4f4913SPhilip Reames} 7624f4f4913SPhilip Reames 7634f4f4913SPhilip Reamesdefine void @aligned_memcpy8(ptr nocapture %dest, ptr %src) nounwind { 7644f4f4913SPhilip Reames; RV32-BOTH-LABEL: aligned_memcpy8: 7654f4f4913SPhilip Reames; RV32-BOTH: # %bb.0: # %entry 7664f4f4913SPhilip Reames; RV32-BOTH-NEXT: lw a2, 4(a1) 7674f4f4913SPhilip Reames; RV32-BOTH-NEXT: sw a2, 4(a0) 7684f4f4913SPhilip Reames; RV32-BOTH-NEXT: lw a1, 0(a1) 7694f4f4913SPhilip Reames; RV32-BOTH-NEXT: sw a1, 0(a0) 7704f4f4913SPhilip Reames; RV32-BOTH-NEXT: ret 7714f4f4913SPhilip Reames; 7724f4f4913SPhilip Reames; RV64-BOTH-LABEL: aligned_memcpy8: 7734f4f4913SPhilip Reames; RV64-BOTH: # %bb.0: # %entry 7744f4f4913SPhilip Reames; RV64-BOTH-NEXT: ld a1, 0(a1) 7754f4f4913SPhilip Reames; RV64-BOTH-NEXT: sd a1, 0(a0) 7764f4f4913SPhilip Reames; RV64-BOTH-NEXT: ret 7774f4f4913SPhilip Reamesentry: 7784f4f4913SPhilip Reames tail call void @llvm.memcpy.inline.p0.p0.i64(ptr align 8 %dest, ptr align 8 %src, i64 8, i1 false) 7794f4f4913SPhilip Reames ret void 7804f4f4913SPhilip Reames} 7814f4f4913SPhilip Reames 7824f4f4913SPhilip Reamesdefine void @aligned_memcpy15(ptr nocapture %dest, ptr %src) nounwind { 7834f4f4913SPhilip Reames; RV32-LABEL: aligned_memcpy15: 7844f4f4913SPhilip Reames; RV32: # %bb.0: # %entry 7854f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 14(a1) 7864f4f4913SPhilip Reames; RV32-NEXT: sb a2, 14(a0) 7874f4f4913SPhilip Reames; RV32-NEXT: lh a2, 12(a1) 7884f4f4913SPhilip Reames; RV32-NEXT: sh a2, 12(a0) 7894f4f4913SPhilip Reames; RV32-NEXT: lw a2, 8(a1) 7904f4f4913SPhilip Reames; RV32-NEXT: sw a2, 8(a0) 7914f4f4913SPhilip Reames; RV32-NEXT: lw a2, 4(a1) 7924f4f4913SPhilip Reames; RV32-NEXT: sw a2, 4(a0) 7934f4f4913SPhilip Reames; RV32-NEXT: lw a1, 0(a1) 7944f4f4913SPhilip Reames; RV32-NEXT: sw a1, 0(a0) 7954f4f4913SPhilip Reames; RV32-NEXT: ret 7964f4f4913SPhilip Reames; 7974f4f4913SPhilip Reames; RV64-LABEL: aligned_memcpy15: 7984f4f4913SPhilip Reames; RV64: # %bb.0: # %entry 7994f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 14(a1) 8004f4f4913SPhilip Reames; RV64-NEXT: sb a2, 14(a0) 8014f4f4913SPhilip Reames; RV64-NEXT: lh a2, 12(a1) 8024f4f4913SPhilip Reames; RV64-NEXT: sh a2, 12(a0) 8034f4f4913SPhilip Reames; RV64-NEXT: lw a2, 8(a1) 8044f4f4913SPhilip Reames; RV64-NEXT: sw a2, 8(a0) 8054f4f4913SPhilip Reames; RV64-NEXT: ld a1, 0(a1) 8064f4f4913SPhilip Reames; RV64-NEXT: sd a1, 0(a0) 8074f4f4913SPhilip Reames; RV64-NEXT: ret 8084f4f4913SPhilip Reames; 8094f4f4913SPhilip Reames; RV32-FAST-LABEL: aligned_memcpy15: 8104f4f4913SPhilip Reames; RV32-FAST: # %bb.0: # %entry 8114f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 11(a1) 8124f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 11(a0) 8134f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 8(a1) 8144f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 8(a0) 8154f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 4(a1) 8164f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 4(a0) 8174f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a1, 0(a1) 8184f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a1, 0(a0) 8194f4f4913SPhilip Reames; RV32-FAST-NEXT: ret 8204f4f4913SPhilip Reames; 8214f4f4913SPhilip Reames; RV64-FAST-LABEL: aligned_memcpy15: 8224f4f4913SPhilip Reames; RV64-FAST: # %bb.0: # %entry 8234f4f4913SPhilip Reames; RV64-FAST-NEXT: ld a2, 7(a1) 8244f4f4913SPhilip Reames; RV64-FAST-NEXT: sd a2, 7(a0) 8254f4f4913SPhilip Reames; RV64-FAST-NEXT: ld a1, 0(a1) 8264f4f4913SPhilip Reames; RV64-FAST-NEXT: sd a1, 0(a0) 8274f4f4913SPhilip Reames; RV64-FAST-NEXT: ret 8284f4f4913SPhilip Reamesentry: 8294f4f4913SPhilip Reames tail call void @llvm.memcpy.inline.p0.p0.i64(ptr align 8 %dest, ptr align 8 %src, i64 15, i1 false) 8304f4f4913SPhilip Reames ret void 8314f4f4913SPhilip Reames} 8324f4f4913SPhilip Reames 8334f4f4913SPhilip Reamesdefine void @aligned_memcpy16(ptr nocapture %dest, ptr %src) nounwind { 8344f4f4913SPhilip Reames; RV32-BOTH-LABEL: aligned_memcpy16: 835eb3f2fe4SPhilip Reames; RV32-BOTH: # %bb.0: # %entry 836eb3f2fe4SPhilip Reames; RV32-BOTH-NEXT: lw a2, 12(a1) 837eb3f2fe4SPhilip Reames; RV32-BOTH-NEXT: sw a2, 12(a0) 838eb3f2fe4SPhilip Reames; RV32-BOTH-NEXT: lw a2, 8(a1) 839eb3f2fe4SPhilip Reames; RV32-BOTH-NEXT: sw a2, 8(a0) 840eb3f2fe4SPhilip Reames; RV32-BOTH-NEXT: lw a2, 4(a1) 841eb3f2fe4SPhilip Reames; RV32-BOTH-NEXT: sw a2, 4(a0) 842eb3f2fe4SPhilip Reames; RV32-BOTH-NEXT: lw a1, 0(a1) 843eb3f2fe4SPhilip Reames; RV32-BOTH-NEXT: sw a1, 0(a0) 844eb3f2fe4SPhilip Reames; RV32-BOTH-NEXT: ret 84560450f91SCraig Topper; 8464f4f4913SPhilip Reames; RV64-BOTH-LABEL: aligned_memcpy16: 8474f4f4913SPhilip Reames; RV64-BOTH: # %bb.0: # %entry 8484f4f4913SPhilip Reames; RV64-BOTH-NEXT: ld a2, 8(a1) 8494f4f4913SPhilip Reames; RV64-BOTH-NEXT: sd a2, 8(a0) 8504f4f4913SPhilip Reames; RV64-BOTH-NEXT: ld a1, 0(a1) 8514f4f4913SPhilip Reames; RV64-BOTH-NEXT: sd a1, 0(a0) 8524f4f4913SPhilip Reames; RV64-BOTH-NEXT: ret 8534f4f4913SPhilip Reamesentry: 8544f4f4913SPhilip Reames tail call void @llvm.memcpy.inline.p0.p0.i64(ptr align 8 %dest, ptr align 8 %src, i64 16, i1 false) 8554f4f4913SPhilip Reames ret void 8564f4f4913SPhilip Reames} 8574f4f4913SPhilip Reames 8584f4f4913SPhilip Reamesdefine void @aligned_memcpy31(ptr nocapture %dest, ptr %src) nounwind { 8594f4f4913SPhilip Reames; RV32-LABEL: aligned_memcpy31: 8604f4f4913SPhilip Reames; RV32: # %bb.0: # %entry 8614f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 30(a1) 8624f4f4913SPhilip Reames; RV32-NEXT: sb a2, 30(a0) 8634f4f4913SPhilip Reames; RV32-NEXT: lh a2, 28(a1) 8644f4f4913SPhilip Reames; RV32-NEXT: sh a2, 28(a0) 8654f4f4913SPhilip Reames; RV32-NEXT: lw a2, 24(a1) 8664f4f4913SPhilip Reames; RV32-NEXT: sw a2, 24(a0) 8674f4f4913SPhilip Reames; RV32-NEXT: lw a2, 20(a1) 8684f4f4913SPhilip Reames; RV32-NEXT: sw a2, 20(a0) 8694f4f4913SPhilip Reames; RV32-NEXT: lw a2, 16(a1) 8704f4f4913SPhilip Reames; RV32-NEXT: sw a2, 16(a0) 8714f4f4913SPhilip Reames; RV32-NEXT: lw a2, 12(a1) 8724f4f4913SPhilip Reames; RV32-NEXT: sw a2, 12(a0) 8734f4f4913SPhilip Reames; RV32-NEXT: lw a2, 8(a1) 8744f4f4913SPhilip Reames; RV32-NEXT: sw a2, 8(a0) 8754f4f4913SPhilip Reames; RV32-NEXT: lw a2, 4(a1) 8764f4f4913SPhilip Reames; RV32-NEXT: sw a2, 4(a0) 8774f4f4913SPhilip Reames; RV32-NEXT: lw a1, 0(a1) 8784f4f4913SPhilip Reames; RV32-NEXT: sw a1, 0(a0) 8794f4f4913SPhilip Reames; RV32-NEXT: ret 8804f4f4913SPhilip Reames; 8814f4f4913SPhilip Reames; RV64-LABEL: aligned_memcpy31: 8824f4f4913SPhilip Reames; RV64: # %bb.0: # %entry 8834f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 30(a1) 8844f4f4913SPhilip Reames; RV64-NEXT: sb a2, 30(a0) 8854f4f4913SPhilip Reames; RV64-NEXT: lh a2, 28(a1) 8864f4f4913SPhilip Reames; RV64-NEXT: sh a2, 28(a0) 8874f4f4913SPhilip Reames; RV64-NEXT: lw a2, 24(a1) 8884f4f4913SPhilip Reames; RV64-NEXT: sw a2, 24(a0) 8894f4f4913SPhilip Reames; RV64-NEXT: ld a2, 16(a1) 8904f4f4913SPhilip Reames; RV64-NEXT: sd a2, 16(a0) 8914f4f4913SPhilip Reames; RV64-NEXT: ld a2, 8(a1) 8924f4f4913SPhilip Reames; RV64-NEXT: sd a2, 8(a0) 8934f4f4913SPhilip Reames; RV64-NEXT: ld a1, 0(a1) 8944f4f4913SPhilip Reames; RV64-NEXT: sd a1, 0(a0) 8954f4f4913SPhilip Reames; RV64-NEXT: ret 8964f4f4913SPhilip Reames; 8974f4f4913SPhilip Reames; RV32-FAST-LABEL: aligned_memcpy31: 8984f4f4913SPhilip Reames; RV32-FAST: # %bb.0: # %entry 8994f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 27(a1) 9004f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 27(a0) 9014f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 24(a1) 9024f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 24(a0) 9034f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 20(a1) 9044f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 20(a0) 9054f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 16(a1) 9064f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 16(a0) 9074f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 12(a1) 9084f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 12(a0) 9094f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 8(a1) 9104f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 8(a0) 9114f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 4(a1) 9124f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 4(a0) 9134f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a1, 0(a1) 9144f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a1, 0(a0) 9154f4f4913SPhilip Reames; RV32-FAST-NEXT: ret 9164f4f4913SPhilip Reames; 9174f4f4913SPhilip Reames; RV64-FAST-LABEL: aligned_memcpy31: 9184f4f4913SPhilip Reames; RV64-FAST: # %bb.0: # %entry 9194f4f4913SPhilip Reames; RV64-FAST-NEXT: ld a2, 23(a1) 9204f4f4913SPhilip Reames; RV64-FAST-NEXT: sd a2, 23(a0) 9214f4f4913SPhilip Reames; RV64-FAST-NEXT: ld a2, 16(a1) 9224f4f4913SPhilip Reames; RV64-FAST-NEXT: sd a2, 16(a0) 9234f4f4913SPhilip Reames; RV64-FAST-NEXT: ld a2, 8(a1) 9244f4f4913SPhilip Reames; RV64-FAST-NEXT: sd a2, 8(a0) 9254f4f4913SPhilip Reames; RV64-FAST-NEXT: ld a1, 0(a1) 9264f4f4913SPhilip Reames; RV64-FAST-NEXT: sd a1, 0(a0) 9274f4f4913SPhilip Reames; RV64-FAST-NEXT: ret 9284f4f4913SPhilip Reamesentry: 9294f4f4913SPhilip Reames tail call void @llvm.memcpy.inline.p0.p0.i64(ptr align 8 %dest, ptr align 8 %src, i64 31, i1 false) 9304f4f4913SPhilip Reames ret void 9314f4f4913SPhilip Reames} 9324f4f4913SPhilip Reames 9334f4f4913SPhilip Reames; ------------------------------------------------------------------------ 9344f4f4913SPhilip Reames; A few partially aligned cases 9354f4f4913SPhilip Reames 9364f4f4913SPhilip Reames 9374f4f4913SPhilip Reamesdefine void @memcpy16_align4(ptr nocapture %dest, ptr nocapture %src) nounwind { 9384f4f4913SPhilip Reames; RV32-BOTH-LABEL: memcpy16_align4: 9394f4f4913SPhilip Reames; RV32-BOTH: # %bb.0: # %entry 9404f4f4913SPhilip Reames; RV32-BOTH-NEXT: lw a2, 12(a1) 9414f4f4913SPhilip Reames; RV32-BOTH-NEXT: sw a2, 12(a0) 9424f4f4913SPhilip Reames; RV32-BOTH-NEXT: lw a2, 8(a1) 9434f4f4913SPhilip Reames; RV32-BOTH-NEXT: sw a2, 8(a0) 9444f4f4913SPhilip Reames; RV32-BOTH-NEXT: lw a2, 4(a1) 9454f4f4913SPhilip Reames; RV32-BOTH-NEXT: sw a2, 4(a0) 9464f4f4913SPhilip Reames; RV32-BOTH-NEXT: lw a1, 0(a1) 9474f4f4913SPhilip Reames; RV32-BOTH-NEXT: sw a1, 0(a0) 9484f4f4913SPhilip Reames; RV32-BOTH-NEXT: ret 9494f4f4913SPhilip Reames; 9504f4f4913SPhilip Reames; RV64-LABEL: memcpy16_align4: 951eb3f2fe4SPhilip Reames; RV64: # %bb.0: # %entry 952eb3f2fe4SPhilip Reames; RV64-NEXT: lw a2, 12(a1) 953eb3f2fe4SPhilip Reames; RV64-NEXT: sw a2, 12(a0) 954eb3f2fe4SPhilip Reames; RV64-NEXT: lw a2, 8(a1) 955eb3f2fe4SPhilip Reames; RV64-NEXT: sw a2, 8(a0) 956eb3f2fe4SPhilip Reames; RV64-NEXT: lw a2, 4(a1) 957eb3f2fe4SPhilip Reames; RV64-NEXT: sw a2, 4(a0) 958eb3f2fe4SPhilip Reames; RV64-NEXT: lw a1, 0(a1) 959eb3f2fe4SPhilip Reames; RV64-NEXT: sw a1, 0(a0) 960eb3f2fe4SPhilip Reames; RV64-NEXT: ret 96160450f91SCraig Topper; 9624f4f4913SPhilip Reames; RV64-FAST-LABEL: memcpy16_align4: 963eb3f2fe4SPhilip Reames; RV64-FAST: # %bb.0: # %entry 964eb3f2fe4SPhilip Reames; RV64-FAST-NEXT: ld a2, 8(a1) 965eb3f2fe4SPhilip Reames; RV64-FAST-NEXT: sd a2, 8(a0) 966eb3f2fe4SPhilip Reames; RV64-FAST-NEXT: ld a1, 0(a1) 967eb3f2fe4SPhilip Reames; RV64-FAST-NEXT: sd a1, 0(a0) 968eb3f2fe4SPhilip Reames; RV64-FAST-NEXT: ret 96960450f91SCraig Topperentry: 9704f4f4913SPhilip Reames tail call void @llvm.memcpy.inline.p0.p0.i32(ptr align 4 %dest, ptr align 4 %src, i32 16, i1 false) 97160450f91SCraig Topper ret void 97260450f91SCraig Topper} 97360450f91SCraig Topper 9744f4f4913SPhilip Reamesdefine i32 @memcpy11_align8(ptr nocapture %dest, ptr %src) { 9754f4f4913SPhilip Reames; RV32-LABEL: memcpy11_align8: 9764f4f4913SPhilip Reames; RV32: # %bb.0: # %entry 9774f4f4913SPhilip Reames; RV32-NEXT: lbu a2, 10(a1) 9784f4f4913SPhilip Reames; RV32-NEXT: sb a2, 10(a0) 9794f4f4913SPhilip Reames; RV32-NEXT: lh a2, 8(a1) 9804f4f4913SPhilip Reames; RV32-NEXT: sh a2, 8(a0) 9814f4f4913SPhilip Reames; RV32-NEXT: lw a2, 4(a1) 9824f4f4913SPhilip Reames; RV32-NEXT: sw a2, 4(a0) 9834f4f4913SPhilip Reames; RV32-NEXT: lw a1, 0(a1) 9844f4f4913SPhilip Reames; RV32-NEXT: sw a1, 0(a0) 9854f4f4913SPhilip Reames; RV32-NEXT: li a0, 0 9864f4f4913SPhilip Reames; RV32-NEXT: ret 9874f4f4913SPhilip Reames; 9884f4f4913SPhilip Reames; RV64-LABEL: memcpy11_align8: 9894f4f4913SPhilip Reames; RV64: # %bb.0: # %entry 9904f4f4913SPhilip Reames; RV64-NEXT: lbu a2, 10(a1) 9914f4f4913SPhilip Reames; RV64-NEXT: sb a2, 10(a0) 9924f4f4913SPhilip Reames; RV64-NEXT: lh a2, 8(a1) 9934f4f4913SPhilip Reames; RV64-NEXT: sh a2, 8(a0) 9944f4f4913SPhilip Reames; RV64-NEXT: ld a1, 0(a1) 9954f4f4913SPhilip Reames; RV64-NEXT: sd a1, 0(a0) 9964f4f4913SPhilip Reames; RV64-NEXT: li a0, 0 9974f4f4913SPhilip Reames; RV64-NEXT: ret 9984f4f4913SPhilip Reames; 9994f4f4913SPhilip Reames; RV32-FAST-LABEL: memcpy11_align8: 10004f4f4913SPhilip Reames; RV32-FAST: # %bb.0: # %entry 10014f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 7(a1) 10024f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 7(a0) 10034f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a2, 4(a1) 10044f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a2, 4(a0) 10054f4f4913SPhilip Reames; RV32-FAST-NEXT: lw a1, 0(a1) 10064f4f4913SPhilip Reames; RV32-FAST-NEXT: sw a1, 0(a0) 10074f4f4913SPhilip Reames; RV32-FAST-NEXT: li a0, 0 10084f4f4913SPhilip Reames; RV32-FAST-NEXT: ret 10094f4f4913SPhilip Reames; 10104f4f4913SPhilip Reames; RV64-FAST-LABEL: memcpy11_align8: 10114f4f4913SPhilip Reames; RV64-FAST: # %bb.0: # %entry 10124f4f4913SPhilip Reames; RV64-FAST-NEXT: lw a2, 7(a1) 10134f4f4913SPhilip Reames; RV64-FAST-NEXT: sw a2, 7(a0) 10144f4f4913SPhilip Reames; RV64-FAST-NEXT: ld a1, 0(a1) 10154f4f4913SPhilip Reames; RV64-FAST-NEXT: sd a1, 0(a0) 10164f4f4913SPhilip Reames; RV64-FAST-NEXT: li a0, 0 10174f4f4913SPhilip Reames; RV64-FAST-NEXT: ret 10184f4f4913SPhilip Reamesentry: 10194f4f4913SPhilip Reames call void @llvm.memcpy.inline.p0.p0.i32(ptr align 8 %dest, ptr align 8 %src, i32 11, i1 false) 10204f4f4913SPhilip Reames ret i32 0 10214f4f4913SPhilip Reames} 10224f4f4913SPhilip Reames 10234f4f4913SPhilip Reames 10244f4f4913SPhilip Reamesdeclare void @llvm.memcpy.inline.p0.p0.i32(ptr nocapture, ptr nocapture, i32, i1) nounwind 10254f4f4913SPhilip Reamesdeclare void @llvm.memcpy.inline.p0.p0.i64(ptr nocapture, ptr nocapture, i64, i1) nounwind 1026