xref: /llvm-project/llvm/test/CodeGen/RISCV/memcmp-optsize.ll (revision 13cf5c9c227a502f86f8c0e3c7d5fe147bc91b8b)
15adb5c05SPengcheng Wang; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
25adb5c05SPengcheng Wang; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -O2  \
35adb5c05SPengcheng Wang; RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-RV32,CHECK-ALIGNED,CHECK-ALIGNED-RV32
45adb5c05SPengcheng Wang; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -O2  \
55adb5c05SPengcheng Wang; RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-RV64,CHECK-ALIGNED,CHECK-ALIGNED-RV64
65adb5c05SPengcheng Wang; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zbb -O2  \
75adb5c05SPengcheng Wang; RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-RV32,CHECK-ALIGNED,CHECK-ALIGNED-RV32-ZBB
85adb5c05SPengcheng Wang; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zbb -O2  \
95adb5c05SPengcheng Wang; RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-RV64,CHECK-ALIGNED,CHECK-ALIGNED-RV64-ZBB
105adb5c05SPengcheng Wang; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zbkb -O2  \
115adb5c05SPengcheng Wang; RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-RV32,CHECK-ALIGNED,CHECK-ALIGNED-RV32-ZBKB
125adb5c05SPengcheng Wang; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zbkb -O2  \
135adb5c05SPengcheng Wang; RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-RV64,CHECK-ALIGNED,CHECK-ALIGNED-RV64-ZBKB
145adb5c05SPengcheng Wang; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+v -O2  \
155adb5c05SPengcheng Wang; RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-RV32,CHECK-ALIGNED,CHECK-ALIGNED-RV32-V
165adb5c05SPengcheng Wang; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v -O2  \
175adb5c05SPengcheng Wang; RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-RV64,CHECK-ALIGNED,CHECK-ALIGNED-RV64-V
185adb5c05SPengcheng Wang; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+unaligned-scalar-mem -O2 \
195adb5c05SPengcheng Wang; RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-RV32,CHECK-UNALIGNED,CHECK-UNALIGNED-RV32
205adb5c05SPengcheng Wang; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+unaligned-scalar-mem -O2 \
215adb5c05SPengcheng Wang; RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-RV64,CHECK-UNALIGNED,CHECK-UNALIGNED-RV64
225adb5c05SPengcheng Wang; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zbb,+unaligned-scalar-mem -O2 \
235adb5c05SPengcheng Wang; RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-RV32,CHECK-UNALIGNED,CHECK-UNALIGNED-RV32-ZBB
245adb5c05SPengcheng Wang; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zbb,+unaligned-scalar-mem -O2 \
255adb5c05SPengcheng Wang; RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-RV64,CHECK-UNALIGNED,CHECK-UNALIGNED-RV64-ZBB
265adb5c05SPengcheng Wang; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zbkb,+unaligned-scalar-mem -O2 \
275adb5c05SPengcheng Wang; RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-RV32,CHECK-UNALIGNED,CHECK-UNALIGNED-RV32-ZBKB
285adb5c05SPengcheng Wang; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zbkb,+unaligned-scalar-mem -O2 \
295adb5c05SPengcheng Wang; RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-RV64,CHECK-UNALIGNED,CHECK-UNALIGNED-RV64-ZBKB
305adb5c05SPengcheng Wang; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+v,+unaligned-scalar-mem,+unaligned-vector-mem -O2 \
315adb5c05SPengcheng Wang; RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-RV32,CHECK-UNALIGNED,CHECK-UNALIGNED-RV32-V
325adb5c05SPengcheng Wang; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v,+unaligned-scalar-mem,+unaligned-vector-mem -O2 \
335adb5c05SPengcheng Wang; RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-RV64,CHECK-UNALIGNED,CHECK-UNALIGNED-RV64-V
345adb5c05SPengcheng Wang
355adb5c05SPengcheng Wangdeclare i32 @bcmp(ptr, ptr, iXLen) nounwind readonly
365adb5c05SPengcheng Wangdeclare i32 @memcmp(ptr, ptr, iXLen) nounwind readonly
375adb5c05SPengcheng Wang
385adb5c05SPengcheng Wangdefine i32 @bcmp_size_0(ptr %s1, ptr %s2) nounwind optsize {
395adb5c05SPengcheng Wang; CHECK-RV32-LABEL: bcmp_size_0:
405adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
415adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
425adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
435adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    li a2, 0
445adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call bcmp
455adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
465adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
475adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
485adb5c05SPengcheng Wang;
495adb5c05SPengcheng Wang; CHECK-RV64-LABEL: bcmp_size_0:
505adb5c05SPengcheng Wang; CHECK-RV64:       # %bb.0: # %entry
515adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, -16
525adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
535adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    li a2, 0
545adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    call bcmp
555adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
565adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, 16
575adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ret
585adb5c05SPengcheng Wangentry:
595adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 0)
605adb5c05SPengcheng Wang  ret i32 %bcmp
615adb5c05SPengcheng Wang}
625adb5c05SPengcheng Wang
635adb5c05SPengcheng Wangdefine i32 @bcmp_size_1(ptr %s1, ptr %s2) nounwind optsize {
647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: bcmp_size_1:
657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 1
697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call bcmp
707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
735adb5c05SPengcheng Wang;
747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: bcmp_size_1:
757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 1
797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call bcmp
807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
837a5b040eSPengcheng Wang;
847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_1:
857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 1
897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call bcmp
907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
937a5b040eSPengcheng Wang;
947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_1:
957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 1
997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
1007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
1027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
1037a5b040eSPengcheng Wang;
1047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_1:
1057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
1067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
1077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 1
1097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call bcmp
1107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
1127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
1137a5b040eSPengcheng Wang;
1147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_1:
1157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
1167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
1177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 1
1197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
1207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
1227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
1237a5b040eSPengcheng Wang;
1247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_1:
1257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
1267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
1277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 1
1297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call bcmp
1307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
1327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
1337a5b040eSPengcheng Wang;
1347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_1:
1357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
1367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
1377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 1
1397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
1407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
1427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
1437a5b040eSPengcheng Wang;
1447a5b040eSPengcheng Wang; CHECK-UNALIGNED-LABEL: bcmp_size_1:
1457a5b040eSPengcheng Wang; CHECK-UNALIGNED:       # %bb.0: # %entry
1467a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lbu a0, 0(a0)
1477a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lbu a1, 0(a1)
1487a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    xor a0, a0, a1
1497a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    snez a0, a0
1507a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    ret
1515adb5c05SPengcheng Wangentry:
1525adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 1)
1535adb5c05SPengcheng Wang  ret i32 %bcmp
1545adb5c05SPengcheng Wang}
1555adb5c05SPengcheng Wang
1565adb5c05SPengcheng Wangdefine i32 @bcmp_size_2(ptr %s1, ptr %s2) nounwind optsize {
1577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: bcmp_size_2:
1587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
1597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
1607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 2
1627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call bcmp
1637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
1657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
1665adb5c05SPengcheng Wang;
1677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: bcmp_size_2:
1687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
1697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
1707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 2
1727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call bcmp
1737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
1757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
1767a5b040eSPengcheng Wang;
1777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_2:
1787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
1797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
1807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 2
1827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call bcmp
1837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
1857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
1867a5b040eSPengcheng Wang;
1877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_2:
1887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
1897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
1907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 2
1927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
1937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
1957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
1967a5b040eSPengcheng Wang;
1977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_2:
1987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
1997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
2007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
2017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 2
2027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call bcmp
2037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
2047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
2057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
2067a5b040eSPengcheng Wang;
2077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_2:
2087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
2097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
2107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
2117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 2
2127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
2137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
2147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
2157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
2167a5b040eSPengcheng Wang;
2177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_2:
2187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
2197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
2207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
2217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 2
2227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call bcmp
2237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
2247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
2257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
2267a5b040eSPengcheng Wang;
2277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_2:
2287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
2297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
2307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
2317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 2
2327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
2337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
2347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
2357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
2367a5b040eSPengcheng Wang;
2377a5b040eSPengcheng Wang; CHECK-UNALIGNED-LABEL: bcmp_size_2:
2387a5b040eSPengcheng Wang; CHECK-UNALIGNED:       # %bb.0: # %entry
2397a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lhu a0, 0(a0)
2407a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lhu a1, 0(a1)
2417a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    xor a0, a0, a1
2427a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    snez a0, a0
2437a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    ret
2445adb5c05SPengcheng Wangentry:
2455adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 2)
2465adb5c05SPengcheng Wang  ret i32 %bcmp
2475adb5c05SPengcheng Wang}
2485adb5c05SPengcheng Wang
2495adb5c05SPengcheng Wangdefine i32 @bcmp_size_3(ptr %s1, ptr %s2) nounwind optsize {
2507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: bcmp_size_3:
2517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
2527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
2537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
2547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 3
2557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call bcmp
2567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
2577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
2587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
2595adb5c05SPengcheng Wang;
2607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: bcmp_size_3:
2617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
2627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
2637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
2647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 3
2657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call bcmp
2667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
2677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
2687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
2697a5b040eSPengcheng Wang;
2707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_3:
2717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
2727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
2737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
2747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 3
2757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call bcmp
2767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
2777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
2787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
2797a5b040eSPengcheng Wang;
2807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_3:
2817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
2827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
2837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
2847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 3
2857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
2867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
2877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
2887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
2897a5b040eSPengcheng Wang;
2907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_3:
2917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
2927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
2937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
2947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 3
2957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call bcmp
2967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
2977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
2987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
2997a5b040eSPengcheng Wang;
3007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_3:
3017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
3027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
3037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
3047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 3
3057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
3067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
3077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
3087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
3097a5b040eSPengcheng Wang;
3107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_3:
3117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
3127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
3137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
3147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 3
3157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call bcmp
3167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
3177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
3187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
3197a5b040eSPengcheng Wang;
3207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_3:
3217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
3227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
3237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
3247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 3
3257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
3267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
3277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
3287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
3297a5b040eSPengcheng Wang;
3307a5b040eSPengcheng Wang; CHECK-UNALIGNED-LABEL: bcmp_size_3:
3317a5b040eSPengcheng Wang; CHECK-UNALIGNED:       # %bb.0: # %entry
3327a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lhu a2, 0(a0)
3337a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lbu a0, 2(a0)
3347a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lhu a3, 0(a1)
3357a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lbu a1, 2(a1)
3367a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    xor a2, a2, a3
3377a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    xor a0, a0, a1
3387a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    or a0, a2, a0
3397a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    snez a0, a0
3407a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    ret
3415adb5c05SPengcheng Wangentry:
3425adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 3)
3435adb5c05SPengcheng Wang  ret i32 %bcmp
3445adb5c05SPengcheng Wang}
3455adb5c05SPengcheng Wang
3465adb5c05SPengcheng Wangdefine i32 @bcmp_size_4(ptr %s1, ptr %s2) nounwind optsize {
3477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: bcmp_size_4:
3487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
3497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
3507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
3517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 4
3527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call bcmp
3537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
3547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
3557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
3565adb5c05SPengcheng Wang;
3577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: bcmp_size_4:
3587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
3597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
3607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
3617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 4
3627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call bcmp
3637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
3647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
3657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
3667a5b040eSPengcheng Wang;
3677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_4:
3687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
3697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
3707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
3717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 4
3727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call bcmp
3737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
3747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
3757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
3767a5b040eSPengcheng Wang;
3777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_4:
3787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
3797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
3807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
3817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 4
3827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
3837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
3847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
3857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
3867a5b040eSPengcheng Wang;
3877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_4:
3887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
3897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
3907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
3917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 4
3927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call bcmp
3937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
3947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
3957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
3967a5b040eSPengcheng Wang;
3977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_4:
3987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
3997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
4007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
4017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 4
4027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
4037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
4047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
4057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
4067a5b040eSPengcheng Wang;
4077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_4:
4087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
4097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
4107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
4117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 4
4127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call bcmp
4137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
4147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
4157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
4167a5b040eSPengcheng Wang;
4177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_4:
4187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
4197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
4207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
4217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 4
4227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
4237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
4247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
4257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
4267a5b040eSPengcheng Wang;
4277a5b040eSPengcheng Wang; CHECK-UNALIGNED-LABEL: bcmp_size_4:
4287a5b040eSPengcheng Wang; CHECK-UNALIGNED:       # %bb.0: # %entry
4297a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a0, 0(a0)
4307a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a1, 0(a1)
4317a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    xor a0, a0, a1
4327a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    snez a0, a0
4337a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    ret
4345adb5c05SPengcheng Wangentry:
4355adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 4)
4365adb5c05SPengcheng Wang  ret i32 %bcmp
4375adb5c05SPengcheng Wang}
4385adb5c05SPengcheng Wang
4395adb5c05SPengcheng Wangdefine i32 @bcmp_size_5(ptr %s1, ptr %s2) nounwind optsize {
4407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: bcmp_size_5:
4417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
4427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
4437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
4447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 5
4457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call bcmp
4467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
4477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
4487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
4495adb5c05SPengcheng Wang;
4507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: bcmp_size_5:
4517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
4527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
4537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
4547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 5
4557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call bcmp
4567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
4577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
4587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
4597a5b040eSPengcheng Wang;
4607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_5:
4617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
4627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
4637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
4647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 5
4657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call bcmp
4667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
4677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
4687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
4697a5b040eSPengcheng Wang;
4707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_5:
4717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
4727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
4737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
4747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 5
4757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
4767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
4777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
4787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
4797a5b040eSPengcheng Wang;
4807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_5:
4817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
4827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
4837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
4847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 5
4857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call bcmp
4867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
4877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
4887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
4897a5b040eSPengcheng Wang;
4907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_5:
4917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
4927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
4937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
4947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 5
4957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
4967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
4977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
4987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
4997a5b040eSPengcheng Wang;
5007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_5:
5017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
5027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
5037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
5047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 5
5057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call bcmp
5067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
5077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
5087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
5097a5b040eSPengcheng Wang;
5107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_5:
5117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
5127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
5137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
5147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 5
5157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
5167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
5177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
5187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
5197a5b040eSPengcheng Wang;
5207a5b040eSPengcheng Wang; CHECK-UNALIGNED-LABEL: bcmp_size_5:
5217a5b040eSPengcheng Wang; CHECK-UNALIGNED:       # %bb.0: # %entry
5227a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a2, 0(a0)
5237a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lbu a0, 4(a0)
5247a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a3, 0(a1)
5257a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lbu a1, 4(a1)
5267a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    xor a2, a2, a3
5277a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    xor a0, a0, a1
5287a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    or a0, a2, a0
5297a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    snez a0, a0
5307a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    ret
5315adb5c05SPengcheng Wangentry:
5325adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 5)
5335adb5c05SPengcheng Wang  ret i32 %bcmp
5345adb5c05SPengcheng Wang}
5355adb5c05SPengcheng Wang
5365adb5c05SPengcheng Wangdefine i32 @bcmp_size_6(ptr %s1, ptr %s2) nounwind optsize {
5377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: bcmp_size_6:
5387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
5397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
5407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
5417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 6
5427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call bcmp
5437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
5447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
5457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
5465adb5c05SPengcheng Wang;
5477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: bcmp_size_6:
5487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
5497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
5507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
5517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 6
5527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call bcmp
5537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
5547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
5557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
5567a5b040eSPengcheng Wang;
5577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_6:
5587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
5597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
5607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
5617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 6
5627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call bcmp
5637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
5647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
5657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
5667a5b040eSPengcheng Wang;
5677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_6:
5687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
5697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
5707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
5717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 6
5727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
5737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
5747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
5757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
5767a5b040eSPengcheng Wang;
5777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_6:
5787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
5797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
5807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
5817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 6
5827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call bcmp
5837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
5847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
5857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
5867a5b040eSPengcheng Wang;
5877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_6:
5887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
5897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
5907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
5917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 6
5927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
5937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
5947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
5957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
5967a5b040eSPengcheng Wang;
5977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_6:
5987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
5997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
6007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
6017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 6
6027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call bcmp
6037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
6047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
6057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
6067a5b040eSPengcheng Wang;
6077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_6:
6087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
6097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
6107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
6117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 6
6127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
6137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
6147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
6157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
6167a5b040eSPengcheng Wang;
6177a5b040eSPengcheng Wang; CHECK-UNALIGNED-LABEL: bcmp_size_6:
6187a5b040eSPengcheng Wang; CHECK-UNALIGNED:       # %bb.0: # %entry
6197a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a2, 0(a0)
6207a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lhu a0, 4(a0)
6217a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a3, 0(a1)
6227a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lhu a1, 4(a1)
6237a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    xor a2, a2, a3
6247a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    xor a0, a0, a1
6257a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    or a0, a2, a0
6267a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    snez a0, a0
6277a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    ret
6285adb5c05SPengcheng Wangentry:
6295adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 6)
6305adb5c05SPengcheng Wang  ret i32 %bcmp
6315adb5c05SPengcheng Wang}
6325adb5c05SPengcheng Wang
6335adb5c05SPengcheng Wangdefine i32 @bcmp_size_7(ptr %s1, ptr %s2) nounwind optsize {
6347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: bcmp_size_7:
6357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
6367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
6377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
6387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 7
6397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call bcmp
6407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
6417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
6427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
6435adb5c05SPengcheng Wang;
6447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: bcmp_size_7:
6457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
6467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
6477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
6487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 7
6497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call bcmp
6507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
6517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
6527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
6537a5b040eSPengcheng Wang;
6547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_7:
6557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
6567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
6577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
6587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 7
6597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call bcmp
6607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
6617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
6627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
6637a5b040eSPengcheng Wang;
6647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_7:
6657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
6667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
6677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
6687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 7
6697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
6707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
6717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
6727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
6737a5b040eSPengcheng Wang;
6747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_7:
6757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
6767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
6777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
6787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 7
6797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call bcmp
6807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
6817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
6827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
6837a5b040eSPengcheng Wang;
6847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_7:
6857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
6867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
6877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
6887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 7
6897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
6907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
6917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
6927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
6937a5b040eSPengcheng Wang;
6947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_7:
6957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
6967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
6977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
6987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 7
6997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call bcmp
7007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
7017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
7027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
7037a5b040eSPengcheng Wang;
7047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_7:
7057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
7067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
7077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
7087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 7
7097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
7107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
7117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
7127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
7137a5b040eSPengcheng Wang;
7147a5b040eSPengcheng Wang; CHECK-UNALIGNED-LABEL: bcmp_size_7:
7157a5b040eSPengcheng Wang; CHECK-UNALIGNED:       # %bb.0: # %entry
7167a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a2, 0(a0)
7177a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a0, 3(a0)
7187a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a3, 0(a1)
7197a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a1, 3(a1)
7207a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    xor a2, a2, a3
7217a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    xor a0, a0, a1
7227a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    or a0, a2, a0
7237a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    snez a0, a0
7247a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    ret
7255adb5c05SPengcheng Wangentry:
7265adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 7)
7275adb5c05SPengcheng Wang  ret i32 %bcmp
7285adb5c05SPengcheng Wang}
7295adb5c05SPengcheng Wang
7305adb5c05SPengcheng Wangdefine i32 @bcmp_size_8(ptr %s1, ptr %s2) nounwind optsize {
7317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: bcmp_size_8:
7327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
7337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
7347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
7357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 8
7367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call bcmp
7377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
7387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
7397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
7405adb5c05SPengcheng Wang;
7417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: bcmp_size_8:
7427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
7437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
7447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
7457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 8
7467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call bcmp
7477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
7487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
7497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
7507a5b040eSPengcheng Wang;
7517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_8:
7527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
7537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
7547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
7557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 8
7567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call bcmp
7577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
7587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
7597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
7607a5b040eSPengcheng Wang;
7617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_8:
7627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
7637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
7647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
7657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 8
7667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
7677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
7687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
7697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
7707a5b040eSPengcheng Wang;
7717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_8:
7727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
7737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
7747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
7757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 8
7767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call bcmp
7777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
7787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
7797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
7807a5b040eSPengcheng Wang;
7817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_8:
7827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
7837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
7847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
7857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 8
7867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
7877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
7887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
7897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
7907a5b040eSPengcheng Wang;
7917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_8:
7927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
7937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
7947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
7957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 8
7967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call bcmp
7977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
7987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
7997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
8007a5b040eSPengcheng Wang;
8017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_8:
8027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
8037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
8047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
8057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 8
8067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
8077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
8087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
8097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
8107a5b040eSPengcheng Wang;
8117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: bcmp_size_8:
8127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
8137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a2, 0(a0)
8147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a0, 4(a0)
8157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a3, 0(a1)
8167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a1, 4(a1)
8177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a2, a2, a3
8187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a0, a0, a1
8197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    or a0, a2, a0
8207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    snez a0, a0
8217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
8227a5b040eSPengcheng Wang;
8237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: bcmp_size_8:
8247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
8257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a0, 0(a0)
8267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a1, 0(a1)
8277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a0, a0, a1
8287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    snez a0, a0
8297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
8307a5b040eSPengcheng Wang;
8317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: bcmp_size_8:
8327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
8337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 0(a0)
8347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 4(a0)
8357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 0(a1)
8367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 4(a1)
8377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a2, a2, a3
8387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a0, a0, a1
8397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a0, a2, a0
8407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    snez a0, a0
8417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
8427a5b040eSPengcheng Wang;
8437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: bcmp_size_8:
8447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
8457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a0, 0(a0)
8467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a1, 0(a1)
8477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a0, a0, a1
8487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    snez a0, a0
8497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
8507a5b040eSPengcheng Wang;
8517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: bcmp_size_8:
8527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
8537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 0(a0)
8547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 4(a0)
8557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 0(a1)
8567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 4(a1)
8577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a2, a2, a3
8587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a0, a0, a1
8597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    or a0, a2, a0
8607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    snez a0, a0
8617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
8627a5b040eSPengcheng Wang;
8637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: bcmp_size_8:
8647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
8657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a0, 0(a0)
8667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a1, 0(a1)
8677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a0, a0, a1
8687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    snez a0, a0
8697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
8707a5b040eSPengcheng Wang;
8717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: bcmp_size_8:
8727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
8737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a2, 0(a0)
8747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a0, 4(a0)
8757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a3, 0(a1)
8767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a1, 4(a1)
8777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a2, a2, a3
8787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a0, a0, a1
8797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    or a0, a2, a0
8807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    snez a0, a0
8817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
8827a5b040eSPengcheng Wang;
8837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: bcmp_size_8:
8847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
8857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a0, 0(a0)
8867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a1, 0(a1)
8877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a0, a0, a1
8887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    snez a0, a0
8897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
8905adb5c05SPengcheng Wangentry:
8915adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 8)
8925adb5c05SPengcheng Wang  ret i32 %bcmp
8935adb5c05SPengcheng Wang}
8945adb5c05SPengcheng Wang
8955adb5c05SPengcheng Wangdefine i32 @bcmp_size_15(ptr %s1, ptr %s2) nounwind optsize {
8967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: bcmp_size_15:
8977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
8987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
8997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
9007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 15
9017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call bcmp
9027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
9037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
9047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
9055adb5c05SPengcheng Wang;
9067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: bcmp_size_15:
9077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
9087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
9097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
9107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 15
9117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call bcmp
9127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
9137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
9147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
9157a5b040eSPengcheng Wang;
9167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_15:
9177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
9187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
9197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
9207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 15
9217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call bcmp
9227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
9237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
9247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
9257a5b040eSPengcheng Wang;
9267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_15:
9277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
9287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
9297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
9307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 15
9317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
9327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
9337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
9347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
9357a5b040eSPengcheng Wang;
9367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_15:
9377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
9387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
9397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
9407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 15
9417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call bcmp
9427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
9437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
9447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
9457a5b040eSPengcheng Wang;
9467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_15:
9477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
9487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
9497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
9507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 15
9517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
9527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
9537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
9547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
9557a5b040eSPengcheng Wang;
9567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_15:
9577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
9587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
9597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
9607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 15
9617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call bcmp
9627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
9637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
9647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
9657a5b040eSPengcheng Wang;
9667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_15:
9677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
9687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
9697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
9707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 15
9717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
9727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
9737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
9747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
9757a5b040eSPengcheng Wang;
9767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: bcmp_size_15:
9777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
9787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a2, 0(a0)
9797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a3, 4(a0)
9807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a4, 8(a0)
9817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a0, 11(a0)
9827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a5, 0(a1)
9837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a6, 4(a1)
9847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a7, 8(a1)
9857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a1, 11(a1)
9867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a2, a2, a5
9877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a3, a3, a6
9887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a4, a4, a7
9897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a0, a0, a1
9907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    or a2, a2, a3
9917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    or a0, a4, a0
9927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    or a0, a2, a0
9937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    snez a0, a0
9947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
9957a5b040eSPengcheng Wang;
9967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: bcmp_size_15:
9977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
9987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a2, 0(a0)
9997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a0, 7(a0)
10007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a3, 0(a1)
10017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a1, 7(a1)
10027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a2, a2, a3
10037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a0, a0, a1
10047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a0, a2, a0
10057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    snez a0, a0
10067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
10077a5b040eSPengcheng Wang;
10087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: bcmp_size_15:
10097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
10107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 0(a0)
10117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 4(a0)
10127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a4, 8(a0)
10137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 11(a0)
10147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a5, 0(a1)
10157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a6, 4(a1)
10167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a7, 8(a1)
10177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 11(a1)
10187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a2, a2, a5
10197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a3, a3, a6
10207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a4, a4, a7
10217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a0, a0, a1
10227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a2, a2, a3
10237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a0, a4, a0
10247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a0, a2, a0
10257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    snez a0, a0
10267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
10277a5b040eSPengcheng Wang;
10287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: bcmp_size_15:
10297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
10307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 0(a0)
10317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a0, 7(a0)
10327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 0(a1)
10337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a1, 7(a1)
10347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a2, a2, a3
10357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a0, a0, a1
10367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, a2, a0
10377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    snez a0, a0
10387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
10397a5b040eSPengcheng Wang;
10407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: bcmp_size_15:
10417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
10427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 0(a0)
10437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 4(a0)
10447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a4, 8(a0)
10457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 11(a0)
10467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a5, 0(a1)
10477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a6, 4(a1)
10487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a7, 8(a1)
10497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 11(a1)
10507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a2, a2, a5
10517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a3, a3, a6
10527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a4, a4, a7
10537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a0, a0, a1
10547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    or a2, a2, a3
10557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    or a0, a4, a0
10567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    or a0, a2, a0
10577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    snez a0, a0
10587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
10597a5b040eSPengcheng Wang;
10607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: bcmp_size_15:
10617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
10627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 0(a0)
10637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a0, 7(a0)
10647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 0(a1)
10657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a1, 7(a1)
10667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a2, a2, a3
10677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a0, a0, a1
10687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a0, a2, a0
10697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    snez a0, a0
10707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
10717a5b040eSPengcheng Wang;
10727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: bcmp_size_15:
10737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
10747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a2, 0(a0)
10757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a3, 4(a0)
10767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a4, 8(a0)
10777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a0, 11(a0)
10787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a5, 0(a1)
10797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a6, 4(a1)
10807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a7, 8(a1)
10817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a1, 11(a1)
10827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a2, a2, a5
10837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a3, a3, a6
10847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a4, a4, a7
10857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a0, a0, a1
10867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    or a2, a2, a3
10877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    or a0, a4, a0
10887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    or a0, a2, a0
10897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    snez a0, a0
10907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
10917a5b040eSPengcheng Wang;
10927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: bcmp_size_15:
10937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
10947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a2, 0(a0)
10957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a0, 7(a0)
10967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a3, 0(a1)
10977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a1, 7(a1)
10987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a2, a2, a3
10997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a0, a0, a1
11007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a0, a2, a0
11017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    snez a0, a0
11027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
11035adb5c05SPengcheng Wangentry:
11045adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 15)
11055adb5c05SPengcheng Wang  ret i32 %bcmp
11065adb5c05SPengcheng Wang}
11075adb5c05SPengcheng Wang
11085adb5c05SPengcheng Wangdefine i32 @bcmp_size_16(ptr %s1, ptr %s2) nounwind optsize {
11097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: bcmp_size_16:
11107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
11117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
11127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
11137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 16
11147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call bcmp
11157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
11167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
11177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
11185adb5c05SPengcheng Wang;
11197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: bcmp_size_16:
11207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
11217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
11227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
11237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 16
11247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call bcmp
11257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
11267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
11277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
11287a5b040eSPengcheng Wang;
11297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_16:
11307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
11317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
11327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
11337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 16
11347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call bcmp
11357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
11367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
11377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
11387a5b040eSPengcheng Wang;
11397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_16:
11407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
11417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
11427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
11437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 16
11447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
11457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
11467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
11477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
11487a5b040eSPengcheng Wang;
11497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_16:
11507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
11517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
11527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
11537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 16
11547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call bcmp
11557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
11567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
11577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
11587a5b040eSPengcheng Wang;
11597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_16:
11607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
11617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
11627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
11637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 16
11647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
11657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
11667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
11677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
11687a5b040eSPengcheng Wang;
11697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_16:
11707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
11717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
11727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
11737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 16
11747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call bcmp
11757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
11767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
11777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
11787a5b040eSPengcheng Wang;
11797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_16:
11807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
11817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
11827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
11837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 16
11847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
11857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
11867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
11877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
11887a5b040eSPengcheng Wang;
11897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: bcmp_size_16:
11907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
11917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a2, 0(a0)
11927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a3, 4(a0)
11937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a4, 8(a0)
11947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a0, 12(a0)
11957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a5, 0(a1)
11967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a6, 4(a1)
11977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a7, 8(a1)
11987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a1, 12(a1)
11997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a2, a2, a5
12007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a3, a3, a6
12017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a4, a4, a7
12027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a0, a0, a1
12037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    or a2, a2, a3
12047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    or a0, a4, a0
12057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    or a0, a2, a0
12067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    snez a0, a0
12077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
12087a5b040eSPengcheng Wang;
12097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: bcmp_size_16:
12107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
12117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a2, 0(a0)
12127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a0, 8(a0)
12137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a3, 0(a1)
12147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a1, 8(a1)
12157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a2, a2, a3
12167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a0, a0, a1
12177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a0, a2, a0
12187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    snez a0, a0
12197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
12207a5b040eSPengcheng Wang;
12217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: bcmp_size_16:
12227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
12237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 0(a0)
12247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 4(a0)
12257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a4, 8(a0)
12267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 12(a0)
12277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a5, 0(a1)
12287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a6, 4(a1)
12297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a7, 8(a1)
12307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 12(a1)
12317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a2, a2, a5
12327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a3, a3, a6
12337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a4, a4, a7
12347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a0, a0, a1
12357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a2, a2, a3
12367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a0, a4, a0
12377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a0, a2, a0
12387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    snez a0, a0
12397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
12407a5b040eSPengcheng Wang;
12417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: bcmp_size_16:
12427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
12437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 0(a0)
12447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a0, 8(a0)
12457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 0(a1)
12467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a1, 8(a1)
12477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a2, a2, a3
12487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a0, a0, a1
12497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, a2, a0
12507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    snez a0, a0
12517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
12527a5b040eSPengcheng Wang;
12537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: bcmp_size_16:
12547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
12557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 0(a0)
12567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 4(a0)
12577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a4, 8(a0)
12587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 12(a0)
12597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a5, 0(a1)
12607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a6, 4(a1)
12617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a7, 8(a1)
12627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 12(a1)
12637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a2, a2, a5
12647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a3, a3, a6
12657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a4, a4, a7
12667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a0, a0, a1
12677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    or a2, a2, a3
12687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    or a0, a4, a0
12697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    or a0, a2, a0
12707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    snez a0, a0
12717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
12727a5b040eSPengcheng Wang;
12737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: bcmp_size_16:
12747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
12757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 0(a0)
12767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a0, 8(a0)
12777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 0(a1)
12787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a1, 8(a1)
12797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a2, a2, a3
12807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a0, a0, a1
12817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a0, a2, a0
12827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    snez a0, a0
12837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
12847a5b040eSPengcheng Wang;
12857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: bcmp_size_16:
12867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
12877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a2, 0(a0)
12887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a3, 4(a0)
12897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a4, 8(a0)
12907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a0, 12(a0)
12917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a5, 0(a1)
12927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a6, 4(a1)
12937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a7, 8(a1)
12947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a1, 12(a1)
12957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a2, a2, a5
12967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a3, a3, a6
12977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a4, a4, a7
12987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a0, a0, a1
12997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    or a2, a2, a3
13007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    or a0, a4, a0
13017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    or a0, a2, a0
13027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    snez a0, a0
13037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
13047a5b040eSPengcheng Wang;
13057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: bcmp_size_16:
13067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
13077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a2, 0(a0)
13087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a0, 8(a0)
13097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a3, 0(a1)
13107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a1, 8(a1)
13117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a2, a2, a3
13127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a0, a0, a1
13137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a0, a2, a0
13147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    snez a0, a0
13157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
13165adb5c05SPengcheng Wangentry:
13175adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 16)
13185adb5c05SPengcheng Wang  ret i32 %bcmp
13195adb5c05SPengcheng Wang}
13205adb5c05SPengcheng Wang
13215adb5c05SPengcheng Wangdefine i32 @bcmp_size_31(ptr %s1, ptr %s2) nounwind optsize {
13225adb5c05SPengcheng Wang; CHECK-RV32-LABEL: bcmp_size_31:
13235adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
13245adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
13255adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
13265adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    li a2, 31
13275adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call bcmp
13285adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
13295adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
13305adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
13315adb5c05SPengcheng Wang;
13327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: bcmp_size_31:
13337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
13347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
13357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
13367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 31
13377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call bcmp
13387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
13397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
13407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
13417a5b040eSPengcheng Wang;
13427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_31:
13437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
13447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
13457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
13467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 31
13477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
13487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
13497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
13507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
13517a5b040eSPengcheng Wang;
13527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_31:
13537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
13547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
13557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
13567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 31
13577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
13587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
13597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
13607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
13617a5b040eSPengcheng Wang;
13627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_31:
13637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
13647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
13657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
13667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 31
13677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
13687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
13697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
13707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
13717a5b040eSPengcheng Wang;
13727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: bcmp_size_31:
13737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
13747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a2, 0(a0)
13757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a3, 8(a0)
13767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a4, 16(a0)
13777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a0, 23(a0)
13787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a5, 0(a1)
13797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a6, 8(a1)
13807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a7, 16(a1)
13817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a1, 23(a1)
13827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a2, a2, a5
13837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a3, a3, a6
13847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a4, a4, a7
13857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a0, a0, a1
13867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a2, a2, a3
13877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a0, a4, a0
13887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a0, a2, a0
13897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    snez a0, a0
13907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
13917a5b040eSPengcheng Wang;
13927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: bcmp_size_31:
13937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
13947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 0(a0)
13957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 8(a0)
13967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a4, 16(a0)
13977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a0, 23(a0)
13987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a5, 0(a1)
13997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a6, 8(a1)
14007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a7, 16(a1)
14017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a1, 23(a1)
14027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a2, a2, a5
14037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a3, a3, a6
14047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a4, a4, a7
14057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a0, a0, a1
14067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a2, a2, a3
14077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, a4, a0
14087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, a2, a0
14097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    snez a0, a0
14107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
14117a5b040eSPengcheng Wang;
14127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: bcmp_size_31:
14137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
14147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 0(a0)
14157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 8(a0)
14167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a4, 16(a0)
14177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a0, 23(a0)
14187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a5, 0(a1)
14197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a6, 8(a1)
14207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a7, 16(a1)
14217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a1, 23(a1)
14227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a2, a2, a5
14237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a3, a3, a6
14247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a4, a4, a7
14257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a0, a0, a1
14267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a2, a2, a3
14277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a0, a4, a0
14287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a0, a2, a0
14297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    snez a0, a0
14307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
14317a5b040eSPengcheng Wang;
14327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: bcmp_size_31:
14337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
14347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a2, 0(a0)
14357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a3, 8(a0)
14367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a4, 16(a0)
14377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a0, 23(a0)
14387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a5, 0(a1)
14397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a6, 8(a1)
14407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a7, 16(a1)
14417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a1, 23(a1)
14427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a2, a2, a5
14437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a3, a3, a6
14447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a4, a4, a7
14457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a0, a0, a1
14467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a2, a2, a3
14477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a0, a4, a0
14487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a0, a2, a0
14497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    snez a0, a0
14507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
14515adb5c05SPengcheng Wangentry:
14525adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 31)
14535adb5c05SPengcheng Wang  ret i32 %bcmp
14545adb5c05SPengcheng Wang}
14555adb5c05SPengcheng Wang
14565adb5c05SPengcheng Wangdefine i32 @bcmp_size_32(ptr %s1, ptr %s2) nounwind optsize {
14575adb5c05SPengcheng Wang; CHECK-RV32-LABEL: bcmp_size_32:
14585adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
14595adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
14605adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
14615adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    li a2, 32
14625adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call bcmp
14635adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
14645adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
14655adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
14665adb5c05SPengcheng Wang;
14677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: bcmp_size_32:
14687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
14697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
14707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
14717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 32
14727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call bcmp
14737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
14747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
14757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
14767a5b040eSPengcheng Wang;
14777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_32:
14787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
14797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
14807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
14817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 32
14827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
14837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
14847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
14857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
14867a5b040eSPengcheng Wang;
14877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_32:
14887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
14897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
14907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
14917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 32
14927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
14937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
14947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
14957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
14967a5b040eSPengcheng Wang;
14977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_32:
14987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
14997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
15007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
15017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 32
15027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
15037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
15047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
15057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
15067a5b040eSPengcheng Wang;
15077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: bcmp_size_32:
15087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
15097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a2, 0(a0)
15107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a3, 8(a0)
15117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a4, 16(a0)
15127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a0, 24(a0)
15137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a5, 0(a1)
15147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a6, 8(a1)
15157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a7, 16(a1)
15167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a1, 24(a1)
15177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a2, a2, a5
15187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a3, a3, a6
15197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a4, a4, a7
15207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a0, a0, a1
15217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a2, a2, a3
15227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a0, a4, a0
15237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a0, a2, a0
15247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    snez a0, a0
15257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
15267a5b040eSPengcheng Wang;
15277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: bcmp_size_32:
15287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
15297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 0(a0)
15307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 8(a0)
15317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a4, 16(a0)
15327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a0, 24(a0)
15337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a5, 0(a1)
15347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a6, 8(a1)
15357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a7, 16(a1)
15367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a1, 24(a1)
15377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a2, a2, a5
15387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a3, a3, a6
15397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a4, a4, a7
15407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a0, a0, a1
15417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a2, a2, a3
15427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, a4, a0
15437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, a2, a0
15447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    snez a0, a0
15457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
15467a5b040eSPengcheng Wang;
15477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: bcmp_size_32:
15487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
15497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 0(a0)
15507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 8(a0)
15517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a4, 16(a0)
15527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a0, 24(a0)
15537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a5, 0(a1)
15547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a6, 8(a1)
15557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a7, 16(a1)
15567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a1, 24(a1)
15577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a2, a2, a5
15587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a3, a3, a6
15597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a4, a4, a7
15607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a0, a0, a1
15617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a2, a2, a3
15627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a0, a4, a0
15637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a0, a2, a0
15647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    snez a0, a0
15657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
15667a5b040eSPengcheng Wang;
15677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: bcmp_size_32:
15687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
15697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a2, 0(a0)
15707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a3, 8(a0)
15717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a4, 16(a0)
15727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a0, 24(a0)
15737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a5, 0(a1)
15747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a6, 8(a1)
15757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a7, 16(a1)
15767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a1, 24(a1)
15777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a2, a2, a5
15787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a3, a3, a6
15797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a4, a4, a7
15807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a0, a0, a1
15817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a2, a2, a3
15827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a0, a4, a0
15837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a0, a2, a0
15847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    snez a0, a0
15857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
15865adb5c05SPengcheng Wangentry:
15875adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 32)
15885adb5c05SPengcheng Wang  ret i32 %bcmp
15895adb5c05SPengcheng Wang}
15905adb5c05SPengcheng Wang
15915adb5c05SPengcheng Wangdefine i32 @bcmp_size_63(ptr %s1, ptr %s2) nounwind optsize {
15925adb5c05SPengcheng Wang; CHECK-RV32-LABEL: bcmp_size_63:
15935adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
15945adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
15955adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
15965adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    li a2, 63
15975adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call bcmp
15985adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
15995adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
16005adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
16015adb5c05SPengcheng Wang;
16025adb5c05SPengcheng Wang; CHECK-RV64-LABEL: bcmp_size_63:
16035adb5c05SPengcheng Wang; CHECK-RV64:       # %bb.0: # %entry
16045adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, -16
16055adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
16065adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    li a2, 63
16075adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    call bcmp
16085adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
16095adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, 16
16105adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ret
16115adb5c05SPengcheng Wangentry:
16125adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 63)
16135adb5c05SPengcheng Wang  ret i32 %bcmp
16145adb5c05SPengcheng Wang}
16155adb5c05SPengcheng Wang
16165adb5c05SPengcheng Wangdefine i32 @bcmp_size_64(ptr %s1, ptr %s2) nounwind optsize {
16175adb5c05SPengcheng Wang; CHECK-RV32-LABEL: bcmp_size_64:
16185adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
16195adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
16205adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
16215adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    li a2, 64
16225adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call bcmp
16235adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
16245adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
16255adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
16265adb5c05SPengcheng Wang;
16275adb5c05SPengcheng Wang; CHECK-RV64-LABEL: bcmp_size_64:
16285adb5c05SPengcheng Wang; CHECK-RV64:       # %bb.0: # %entry
16295adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, -16
16305adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
16315adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    li a2, 64
16325adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    call bcmp
16335adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
16345adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, 16
16355adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ret
16365adb5c05SPengcheng Wangentry:
16375adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 64)
16385adb5c05SPengcheng Wang  ret i32 %bcmp
16395adb5c05SPengcheng Wang}
16405adb5c05SPengcheng Wang
16415adb5c05SPengcheng Wangdefine i32 @bcmp_size_127(ptr %s1, ptr %s2) nounwind optsize {
16425adb5c05SPengcheng Wang; CHECK-RV32-LABEL: bcmp_size_127:
16435adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
16445adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
16455adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
16465adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    li a2, 127
16475adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call bcmp
16485adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
16495adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
16505adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
16515adb5c05SPengcheng Wang;
16525adb5c05SPengcheng Wang; CHECK-RV64-LABEL: bcmp_size_127:
16535adb5c05SPengcheng Wang; CHECK-RV64:       # %bb.0: # %entry
16545adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, -16
16555adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
16565adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    li a2, 127
16575adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    call bcmp
16585adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
16595adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, 16
16605adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ret
16615adb5c05SPengcheng Wangentry:
16625adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 127)
16635adb5c05SPengcheng Wang  ret i32 %bcmp
16645adb5c05SPengcheng Wang}
16655adb5c05SPengcheng Wang
16665adb5c05SPengcheng Wangdefine i32 @bcmp_size_128(ptr %s1, ptr %s2) nounwind optsize {
16675adb5c05SPengcheng Wang; CHECK-RV32-LABEL: bcmp_size_128:
16685adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
16695adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
16705adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
16715adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    li a2, 128
16725adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call bcmp
16735adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
16745adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
16755adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
16765adb5c05SPengcheng Wang;
16775adb5c05SPengcheng Wang; CHECK-RV64-LABEL: bcmp_size_128:
16785adb5c05SPengcheng Wang; CHECK-RV64:       # %bb.0: # %entry
16795adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, -16
16805adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
16815adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    li a2, 128
16825adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    call bcmp
16835adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
16845adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, 16
16855adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ret
16865adb5c05SPengcheng Wangentry:
16875adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 128)
16885adb5c05SPengcheng Wang  ret i32 %bcmp
16895adb5c05SPengcheng Wang}
16905adb5c05SPengcheng Wang
16915adb5c05SPengcheng Wangdefine i32 @bcmp_size_runtime(ptr %s1, ptr %s2, iXLen %len) nounwind optsize {
16925adb5c05SPengcheng Wang; CHECK-RV32-LABEL: bcmp_size_runtime:
16935adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
16945adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
16955adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
16965adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call bcmp
16975adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
16985adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
16995adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
17005adb5c05SPengcheng Wang;
17015adb5c05SPengcheng Wang; CHECK-RV64-LABEL: bcmp_size_runtime:
17025adb5c05SPengcheng Wang; CHECK-RV64:       # %bb.0: # %entry
17035adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, -16
17045adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
17055adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    call bcmp
17065adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
17075adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, 16
17085adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ret
17095adb5c05SPengcheng Wangentry:
17105adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen %len)
17115adb5c05SPengcheng Wang  ret i32 %bcmp
17125adb5c05SPengcheng Wang}
17135adb5c05SPengcheng Wang
17145adb5c05SPengcheng Wangdefine i1 @bcmp_eq_zero(ptr %s1, ptr %s2) nounwind optsize {
17157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: bcmp_eq_zero:
17167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
17177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
17187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
17197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 4
17207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call bcmp
17217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    seqz a0, a0
17227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
17237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
17247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
17255adb5c05SPengcheng Wang;
17267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: bcmp_eq_zero:
17277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
17287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
17297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
17307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 4
17317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call bcmp
17327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    seqz a0, a0
17337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
17347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
17357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
17367a5b040eSPengcheng Wang;
17377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_eq_zero:
17387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
17397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
17407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
17417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 4
17427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call bcmp
17437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    seqz a0, a0
17447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
17457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
17467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
17477a5b040eSPengcheng Wang;
17487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_eq_zero:
17497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
17507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
17517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
17527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 4
17537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
17547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    seqz a0, a0
17557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
17567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
17577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
17587a5b040eSPengcheng Wang;
17597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_eq_zero:
17607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
17617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
17627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
17637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 4
17647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call bcmp
17657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    seqz a0, a0
17667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
17677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
17687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
17697a5b040eSPengcheng Wang;
17707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_eq_zero:
17717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
17727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
17737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
17747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 4
17757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
17767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    seqz a0, a0
17777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
17787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
17797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
17807a5b040eSPengcheng Wang;
17817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: bcmp_eq_zero:
17827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
17837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
17847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
17857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 4
17867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call bcmp
17877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    seqz a0, a0
17887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
17897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
17907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
17917a5b040eSPengcheng Wang;
17927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_eq_zero:
17937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
17947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
17957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
17967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 4
17977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
17987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    seqz a0, a0
17997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
18007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
18017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
18027a5b040eSPengcheng Wang;
18037a5b040eSPengcheng Wang; CHECK-UNALIGNED-LABEL: bcmp_eq_zero:
18047a5b040eSPengcheng Wang; CHECK-UNALIGNED:       # %bb.0: # %entry
18057a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a0, 0(a0)
18067a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a1, 0(a1)
18077a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    xor a0, a0, a1
18087a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    seqz a0, a0
18097a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    ret
18105adb5c05SPengcheng Wangentry:
18115adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 4)
18125adb5c05SPengcheng Wang  %ret = icmp eq i32 %bcmp, 0
18135adb5c05SPengcheng Wang  ret i1 %ret
18145adb5c05SPengcheng Wang}
18155adb5c05SPengcheng Wang
18165adb5c05SPengcheng Wangdefine i1 @bcmp_lt_zero(ptr %s1, ptr %s2) nounwind optsize {
18177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: bcmp_lt_zero:
18187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
18197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
18207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
18217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 4
18227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call bcmp
18237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    srli a0, a0, 31
18247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
18257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
18267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
18275adb5c05SPengcheng Wang;
18287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: bcmp_lt_zero:
18297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
18307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
18317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
18327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 4
18337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call bcmp
18347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    slti a0, a0, 0
18357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
18367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
18377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
18387a5b040eSPengcheng Wang;
18397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_lt_zero:
18407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
18417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
18427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
18437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 4
18447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call bcmp
18457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    srli a0, a0, 31
18467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
18477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
18487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
18497a5b040eSPengcheng Wang;
18507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_lt_zero:
18517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
18527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
18537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
18547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 4
18557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
18567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    slti a0, a0, 0
18577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
18587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
18597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
18607a5b040eSPengcheng Wang;
18617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_lt_zero:
18627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
18637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
18647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
18657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 4
18667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call bcmp
18677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    srli a0, a0, 31
18687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
18697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
18707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
18717a5b040eSPengcheng Wang;
18727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_lt_zero:
18737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
18747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
18757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
18767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 4
18777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
18787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    slti a0, a0, 0
18797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
18807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
18817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
18827a5b040eSPengcheng Wang;
18837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: bcmp_lt_zero:
18847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
18857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
18867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
18877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 4
18887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call bcmp
18897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    srli a0, a0, 31
18907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
18917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
18927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
18937a5b040eSPengcheng Wang;
18947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_lt_zero:
18957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
18967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
18977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
18987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 4
18997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
19007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    slti a0, a0, 0
19017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
19027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
19037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
19047a5b040eSPengcheng Wang;
19057a5b040eSPengcheng Wang; CHECK-UNALIGNED-LABEL: bcmp_lt_zero:
19067a5b040eSPengcheng Wang; CHECK-UNALIGNED:       # %bb.0: # %entry
19077a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    li a0, 0
19087a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    ret
19095adb5c05SPengcheng Wangentry:
19105adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 4)
19115adb5c05SPengcheng Wang  %ret = icmp slt i32 %bcmp, 0
19125adb5c05SPengcheng Wang  ret i1 %ret
19135adb5c05SPengcheng Wang}
19145adb5c05SPengcheng Wang
19155adb5c05SPengcheng Wangdefine i1 @bcmp_gt_zero(ptr %s1, ptr %s2) nounwind optsize {
19167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: bcmp_gt_zero:
19177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
19187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
19197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
19207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 4
19217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call bcmp
19227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sgtz a0, a0
19237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
19247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
19257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
19265adb5c05SPengcheng Wang;
19277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: bcmp_gt_zero:
19287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
19297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
19307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
19317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 4
19327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call bcmp
19337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sgtz a0, a0
19347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
19357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
19367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
19377a5b040eSPengcheng Wang;
19387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_gt_zero:
19397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
19407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
19417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
19427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 4
19437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call bcmp
19447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sgtz a0, a0
19457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
19467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
19477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
19487a5b040eSPengcheng Wang;
19497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_gt_zero:
19507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
19517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
19527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
19537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 4
19547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
19557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sgtz a0, a0
19567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
19577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
19587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
19597a5b040eSPengcheng Wang;
19607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_gt_zero:
19617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
19627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
19637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
19647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 4
19657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call bcmp
19667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sgtz a0, a0
19677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
19687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
19697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
19707a5b040eSPengcheng Wang;
19717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_gt_zero:
19727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
19737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
19747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
19757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 4
19767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
19777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sgtz a0, a0
19787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
19797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
19807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
19817a5b040eSPengcheng Wang;
19827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: bcmp_gt_zero:
19837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
19847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
19857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
19867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 4
19877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call bcmp
19887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sgtz a0, a0
19897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
19907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
19917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
19927a5b040eSPengcheng Wang;
19937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_gt_zero:
19947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
19957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
19967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
19977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 4
19987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
19997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sgtz a0, a0
20007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
20017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
20027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
20037a5b040eSPengcheng Wang;
20047a5b040eSPengcheng Wang; CHECK-UNALIGNED-LABEL: bcmp_gt_zero:
20057a5b040eSPengcheng Wang; CHECK-UNALIGNED:       # %bb.0: # %entry
20067a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a0, 0(a0)
20077a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a1, 0(a1)
20087a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    xor a0, a0, a1
20097a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    snez a0, a0
20107a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    ret
20115adb5c05SPengcheng Wangentry:
20125adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 4)
20135adb5c05SPengcheng Wang  %ret = icmp sgt i32 %bcmp, 0
20145adb5c05SPengcheng Wang  ret i1 %ret
20155adb5c05SPengcheng Wang}
20165adb5c05SPengcheng Wang
20175adb5c05SPengcheng Wangdefine i32 @memcmp_size_0(ptr %s1, ptr %s2) nounwind optsize {
20185adb5c05SPengcheng Wang; CHECK-LABEL: memcmp_size_0:
20195adb5c05SPengcheng Wang; CHECK:       # %bb.0: # %entry
20205adb5c05SPengcheng Wang; CHECK-NEXT:    li a0, 0
20215adb5c05SPengcheng Wang; CHECK-NEXT:    ret
20225adb5c05SPengcheng Wangentry:
20235adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 0)
20245adb5c05SPengcheng Wang  ret i32 %memcmp
20255adb5c05SPengcheng Wang}
20265adb5c05SPengcheng Wang
20275adb5c05SPengcheng Wangdefine i32 @memcmp_size_1(ptr %s1, ptr %s2) nounwind optsize {
20287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_1:
20297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
20307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
20317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
20327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 1
20337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
20347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
20357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
20367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
20375adb5c05SPengcheng Wang;
20387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_1:
20397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
20407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
20417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
20427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 1
20437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
20447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
20457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
20467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
20477a5b040eSPengcheng Wang;
20487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_1:
20497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
20507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
20517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
20527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 1
20537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
20547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
20557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
20567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
20577a5b040eSPengcheng Wang;
20587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_1:
20597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
20607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
20617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
20627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 1
20637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
20647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
20657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
20667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
20677a5b040eSPengcheng Wang;
20687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_1:
20697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
20707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
20717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
20727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 1
20737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
20747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
20757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
20767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
20777a5b040eSPengcheng Wang;
20787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_1:
20797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
20807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
20817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
20827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 1
20837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
20847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
20857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
20867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
20877a5b040eSPengcheng Wang;
20887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_1:
20897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
20907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
20917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
20927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 1
20937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
20947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
20957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
20967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
20977a5b040eSPengcheng Wang;
20987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_1:
20997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
21007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
21017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
21027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 1
21037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
21047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
21057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
21067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
21077a5b040eSPengcheng Wang;
21087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_1:
21097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
21107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
21117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
21127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 1
21137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
21147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
21157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
21167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
21177a5b040eSPengcheng Wang;
21187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_1:
21197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
21207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
21217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
21227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 1
21237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
21247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
21257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
21267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
21277a5b040eSPengcheng Wang;
21287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_1:
21297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
21307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lbu a0, 0(a0)
21317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lbu a1, 0(a1)
21327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sub a0, a0, a1
21337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
21347a5b040eSPengcheng Wang;
21357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_1:
21367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
21377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lbu a0, 0(a0)
21387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lbu a1, 0(a1)
21397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sub a0, a0, a1
21407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
21417a5b040eSPengcheng Wang;
21427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_1:
21437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
21447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lbu a0, 0(a0)
21457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lbu a1, 0(a1)
21467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sub a0, a0, a1
21477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
21487a5b040eSPengcheng Wang;
21497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_1:
21507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
21517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lbu a0, 0(a0)
21527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lbu a1, 0(a1)
21537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sub a0, a0, a1
21547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
21557a5b040eSPengcheng Wang;
21567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_1:
21577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
21587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
21597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
21607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 1
21617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
21627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
21637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
21647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
21657a5b040eSPengcheng Wang;
21667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_1:
21677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
21687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
21697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
21707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 1
21717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
21727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
21737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
21747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
21755adb5c05SPengcheng Wangentry:
21765adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 1)
21775adb5c05SPengcheng Wang  ret i32 %memcmp
21785adb5c05SPengcheng Wang}
21795adb5c05SPengcheng Wang
21805adb5c05SPengcheng Wangdefine i32 @memcmp_size_2(ptr %s1, ptr %s2) nounwind optsize {
21817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_2:
21827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
21837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
21847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
21857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 2
21867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
21877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
21887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
21897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
21905adb5c05SPengcheng Wang;
21917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_2:
21927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
21937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
21947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
21957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 2
21967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
21977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
21987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
21997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
22007a5b040eSPengcheng Wang;
22017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_2:
22027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
22037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
22047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
22057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 2
22067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
22077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
22087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
22097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
22107a5b040eSPengcheng Wang;
22117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_2:
22127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
22137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
22147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
22157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 2
22167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
22177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
22187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
22197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
22207a5b040eSPengcheng Wang;
22217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_2:
22227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
22237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
22247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
22257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 2
22267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
22277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
22287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
22297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
22307a5b040eSPengcheng Wang;
22317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_2:
22327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
22337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
22347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
22357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 2
22367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
22377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
22387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
22397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
22407a5b040eSPengcheng Wang;
22417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_2:
22427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
22437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
22447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
22457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 2
22467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
22477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
22487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
22497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
22507a5b040eSPengcheng Wang;
22517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_2:
22527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
22537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
22547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
22557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 2
22567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
22577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
22587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
22597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
22607a5b040eSPengcheng Wang;
22617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_2:
22627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
22637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
22647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
22657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 2
22667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
22677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
22687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
22697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
22707a5b040eSPengcheng Wang;
22717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_2:
22727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
22737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
22747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
22757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 2
22767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
22777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
22787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
22797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
22807a5b040eSPengcheng Wang;
22817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_2:
22827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
22837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lh a0, 0(a0)
22847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lh a1, 0(a1)
22857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a0, a0
22867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a1, a1
22879122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    srli a0, a0, 16
22887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    srli a1, a1, 16
22897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sub a0, a0, a1
22907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
22917a5b040eSPengcheng Wang;
22927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_2:
22937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
22947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lh a0, 0(a0)
22957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lh a1, 0(a1)
22967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a0, a0
22977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a1, a1
22989122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a0, a0, 48
22997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a1, a1, 48
23007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sub a0, a0, a1
23017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
23027a5b040eSPengcheng Wang;
23037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_2:
23047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
23057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lh a0, 0(a0)
23067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lh a1, 0(a1)
23077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a0, a0
23087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a1, a1
23099122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    srli a0, a0, 16
23107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    srli a1, a1, 16
23117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sub a0, a0, a1
23127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
23137a5b040eSPengcheng Wang;
23147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_2:
23157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
23167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lh a0, 0(a0)
23177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lh a1, 0(a1)
23187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a0, a0
23197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a1, a1
23209122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a0, a0, 48
23217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a1, a1, 48
23227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sub a0, a0, a1
23237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
23247a5b040eSPengcheng Wang;
23257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_2:
23267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
23277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
23287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
23297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 2
23307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
23317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
23327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
23337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
23347a5b040eSPengcheng Wang;
23357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_2:
23367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
23377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
23387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
23397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 2
23407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
23417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
23427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
23437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
23445adb5c05SPengcheng Wangentry:
23455adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 2)
23465adb5c05SPengcheng Wang  ret i32 %memcmp
23475adb5c05SPengcheng Wang}
23485adb5c05SPengcheng Wang
23495adb5c05SPengcheng Wangdefine i32 @memcmp_size_3(ptr %s1, ptr %s2) nounwind optsize {
23507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_3:
23517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
23527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
23537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
23547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 3
23557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
23567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
23577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
23587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
23595adb5c05SPengcheng Wang;
23607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_3:
23617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
23627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
23637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
23647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 3
23657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
23667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
23677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
23687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
23697a5b040eSPengcheng Wang;
23707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_3:
23717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
23727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
23737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
23747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 3
23757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
23767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
23777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
23787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
23797a5b040eSPengcheng Wang;
23807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_3:
23817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
23827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
23837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
23847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 3
23857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
23867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
23877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
23887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
23897a5b040eSPengcheng Wang;
23907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_3:
23917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
23927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
23937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
23947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 3
23957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
23967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
23977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
23987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
23997a5b040eSPengcheng Wang;
24007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_3:
24017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
24027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
24037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
24047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 3
24057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
24067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
24077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
24087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
24097a5b040eSPengcheng Wang;
24107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_3:
24117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
24127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
24137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
24147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 3
24157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
24167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
24177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
24187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
24197a5b040eSPengcheng Wang;
24207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_3:
24217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
24227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
24237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
24247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 3
24257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
24267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
24277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
24287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
24297a5b040eSPengcheng Wang;
24307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_3:
24317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
24327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
24337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
24347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 3
24357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
24367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
24377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
24387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
24397a5b040eSPengcheng Wang;
24407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_3:
24417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
24427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
24437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
24447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 3
24457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
24467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
24477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
24487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
24497a5b040eSPengcheng Wang;
24507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_3:
24517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
245272db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lbu a2, 2(a0)
245372db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lhu a0, 0(a0)
245472db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lbu a3, 2(a1)
245572db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lhu a1, 0(a1)
245672db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    slli a2, a2, 16
245772db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a0, a0, a2
245872db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    slli a3, a3, 16
245972db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a1, a1, a3
246072db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a0, a0
246172db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a1, a1
2462*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a2, a0, a1
2463*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a1, a0
2464*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sub a0, a0, a2
24657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
24667a5b040eSPengcheng Wang;
24677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_3:
24687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
246972db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lbu a2, 2(a0)
247072db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lhu a0, 0(a0)
247172db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lbu a3, 2(a1)
247272db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lhu a1, 0(a1)
247372db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    slli a2, a2, 16
247472db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, a0, a2
247572db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    slli a3, a3, 16
247672db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a1, a1, a3
247772db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a0, a0
247872db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a1, a1
247972db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a0, a0, 32
248072db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a1, a1, 32
2481*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a2, a0, a1
2482*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a1, a0
2483*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sub a0, a0, a2
24847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
24857a5b040eSPengcheng Wang;
24867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_3:
24877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
248872db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lhu a2, 0(a0)
24897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lbu a0, 2(a0)
249072db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lhu a3, 0(a1)
24917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lbu a1, 2(a1)
249272db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    pack a0, a2, a0
249372db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    pack a1, a3, a1
249472db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a0, a0
249572db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a1, a1
2496*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a2, a0, a1
2497*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a1, a0
2498*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sub a0, a0, a2
24997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
25007a5b040eSPengcheng Wang;
25017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_3:
25027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
250372db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lbu a2, 2(a0)
250472db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lhu a0, 0(a0)
250572db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lbu a3, 2(a1)
250672db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lhu a1, 0(a1)
250772db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    slli a2, a2, 16
250872db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a0, a0, a2
250972db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    slli a3, a3, 16
251072db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a1, a1, a3
251172db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a0, a0
251272db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a1, a1
251372db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a0, a0, 32
251472db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a1, a1, 32
2515*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a2, a0, a1
2516*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a1, a0
2517*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sub a0, a0, a2
25187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
25197a5b040eSPengcheng Wang;
25207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_3:
25217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
25227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
25237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
25247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 3
25257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
25267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
25277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
25287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
25297a5b040eSPengcheng Wang;
25307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_3:
25317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
25327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
25337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
25347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 3
25357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
25367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
25377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
25387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
25395adb5c05SPengcheng Wangentry:
25405adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 3)
25415adb5c05SPengcheng Wang  ret i32 %memcmp
25425adb5c05SPengcheng Wang}
25435adb5c05SPengcheng Wang
25445adb5c05SPengcheng Wangdefine i32 @memcmp_size_4(ptr %s1, ptr %s2) nounwind optsize {
25457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_4:
25467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
25477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
25487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
25497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 4
25507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
25517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
25527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
25537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
25545adb5c05SPengcheng Wang;
25557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_4:
25567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
25577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
25587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
25597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 4
25607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
25617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
25627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
25637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
25647a5b040eSPengcheng Wang;
25657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_4:
25667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
25677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
25687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
25697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 4
25707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
25717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
25727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
25737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
25747a5b040eSPengcheng Wang;
25757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_4:
25767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
25777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
25787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
25797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 4
25807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
25817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
25827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
25837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
25847a5b040eSPengcheng Wang;
25857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_4:
25867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
25877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
25887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
25897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 4
25907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
25917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
25927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
25937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
25947a5b040eSPengcheng Wang;
25957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_4:
25967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
25977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
25987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
25997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 4
26007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
26017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
26027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
26037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
26047a5b040eSPengcheng Wang;
26057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_4:
26067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
26077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
26087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
26097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 4
26107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
26117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
26127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
26137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
26147a5b040eSPengcheng Wang;
26157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_4:
26167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
26177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
26187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
26197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 4
26207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
26217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
26227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
26237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
26247a5b040eSPengcheng Wang;
26257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_4:
26267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
26277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
26287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
26297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 4
26307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
26317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
26327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
26337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
26347a5b040eSPengcheng Wang;
26357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_4:
26367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
26377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
26387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
26397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 4
26407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
26417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
26427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
26437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
26447a5b040eSPengcheng Wang;
26457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_4:
26467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
26477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 0(a0)
26487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 0(a1)
26497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a0, a0
26507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a1, a1
26514dfea22eSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a2, a0, a1
26524dfea22eSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a1, a0
26534dfea22eSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sub a0, a0, a2
26547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
26557a5b040eSPengcheng Wang;
26567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_4:
26577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
26587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a0, 0(a0)
26597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a1, 0(a1)
26607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a0, a0
26617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a1, a1
26629122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a0, a0, 32
26637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a1, a1, 32
26644dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a2, a0, a1
26654dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a1, a0
26664dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sub a0, a0, a2
26677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
26687a5b040eSPengcheng Wang;
26697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_4:
26707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
26717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 0(a0)
26727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 0(a1)
26737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a0, a0
26747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a1, a1
26754dfea22eSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a2, a0, a1
26764dfea22eSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a1, a0
26774dfea22eSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sub a0, a0, a2
26787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
26797a5b040eSPengcheng Wang;
26807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_4:
26817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
26827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a0, 0(a0)
26837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a1, 0(a1)
26847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a0, a0
26857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a1, a1
26869122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a0, a0, 32
26877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a1, a1, 32
26884dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a2, a0, a1
26894dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a1, a0
26904dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sub a0, a0, a2
26917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
26927a5b040eSPengcheng Wang;
26937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_4:
26947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
26957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
26967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
26977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 4
26987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
26997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
27007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
27017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
27027a5b040eSPengcheng Wang;
27037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_4:
27047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
27057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
27067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
27077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 4
27087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
27097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
27107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
27117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
27125adb5c05SPengcheng Wangentry:
27135adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 4)
27145adb5c05SPengcheng Wang  ret i32 %memcmp
27155adb5c05SPengcheng Wang}
27165adb5c05SPengcheng Wang
27175adb5c05SPengcheng Wangdefine i32 @memcmp_size_5(ptr %s1, ptr %s2) nounwind optsize {
27187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_5:
27197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
27207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
27217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
27227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 5
27237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
27247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
27257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
27267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
27275adb5c05SPengcheng Wang;
27287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_5:
27297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
27307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
27317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
27327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 5
27337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
27347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
27357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
27367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
27377a5b040eSPengcheng Wang;
27387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_5:
27397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
27407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
27417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
27427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 5
27437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
27447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
27457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
27467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
27477a5b040eSPengcheng Wang;
27487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_5:
27497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
27507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
27517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
27527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 5
27537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
27547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
27557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
27567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
27577a5b040eSPengcheng Wang;
27587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_5:
27597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
27607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
27617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
27627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 5
27637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
27647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
27657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
27667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
27677a5b040eSPengcheng Wang;
27687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_5:
27697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
27707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
27717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
27727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 5
27737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
27747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
27757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
27767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
27777a5b040eSPengcheng Wang;
27787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_5:
27797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
27807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
27817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
27827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 5
27837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
27847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
27857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
27867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
27877a5b040eSPengcheng Wang;
27887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_5:
27897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
27907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
27917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
27927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 5
27937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
27947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
27957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
27967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
27977a5b040eSPengcheng Wang;
27987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_5:
27997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
28007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
28017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
28027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 5
28037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
28047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
28057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
28067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
28077a5b040eSPengcheng Wang;
28087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_5:
28097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
28107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
28117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
28127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 5
28137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
28147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
28157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
28167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
28177a5b040eSPengcheng Wang;
28187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_5:
28197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
28207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 0(a0)
28217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 0(a1)
28227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
28237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
28247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB26_2
28257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.1: # %loadbb1
28267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lbu a0, 4(a0)
28277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lbu a1, 4(a1)
28287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sub a0, a0, a1
28297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
28307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  .LBB26_2: # %res_block
28317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a2, a3
28327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    neg a0, a0
28337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ori a0, a0, 1
28347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
28357a5b040eSPengcheng Wang;
28367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_5:
28377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
283872db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lbu a2, 4(a0)
283972db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lwu a0, 0(a0)
284072db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lbu a3, 4(a1)
284172db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lwu a1, 0(a1)
284272db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    slli a2, a2, 32
284372db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, a0, a2
284472db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    slli a3, a3, 32
284572db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a1, a1, a3
284672db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a0, a0
284772db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a1, a1
2848*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a2, a0, a1
2849*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a1, a0
2850*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sub a0, a0, a2
28517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
28527a5b040eSPengcheng Wang;
28537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_5:
28547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
28557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 0(a0)
28567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 0(a1)
28577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
28587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
28597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB26_2
28607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.1: # %loadbb1
28617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lbu a0, 4(a0)
28627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lbu a1, 4(a1)
28637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sub a0, a0, a1
28647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
28657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  .LBB26_2: # %res_block
28667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a2, a3
28677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    neg a0, a0
28687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ori a0, a0, 1
28697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
28707a5b040eSPengcheng Wang;
28717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_5:
28727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
287372db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lwu a2, 0(a0)
28747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lbu a0, 4(a0)
287572db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lwu a3, 0(a1)
28767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lbu a1, 4(a1)
287772db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    pack a0, a2, a0
287872db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    pack a1, a3, a1
287972db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a0, a0
288072db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a1, a1
2881*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a2, a0, a1
2882*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a1, a0
2883*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sub a0, a0, a2
28847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
28857a5b040eSPengcheng Wang;
28867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_5:
28877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
28887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
28897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
28907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 5
28917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
28927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
28937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
28947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
28957a5b040eSPengcheng Wang;
28967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_5:
28977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
28987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
28997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
29007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 5
29017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
29027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
29037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
29047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
29055adb5c05SPengcheng Wangentry:
29065adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 5)
29075adb5c05SPengcheng Wang  ret i32 %memcmp
29085adb5c05SPengcheng Wang}
29095adb5c05SPengcheng Wang
29105adb5c05SPengcheng Wangdefine i32 @memcmp_size_6(ptr %s1, ptr %s2) nounwind optsize {
29117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_6:
29127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
29137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
29147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
29157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 6
29167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
29177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
29187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
29197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
29205adb5c05SPengcheng Wang;
29217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_6:
29227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
29237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
29247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
29257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 6
29267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
29277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
29287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
29297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
29307a5b040eSPengcheng Wang;
29317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_6:
29327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
29337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
29347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
29357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 6
29367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
29377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
29387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
29397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
29407a5b040eSPengcheng Wang;
29417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_6:
29427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
29437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
29447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
29457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 6
29467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
29477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
29487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
29497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
29507a5b040eSPengcheng Wang;
29517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_6:
29527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
29537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
29547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
29557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 6
29567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
29577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
29587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
29597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
29607a5b040eSPengcheng Wang;
29617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_6:
29627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
29637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
29647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
29657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 6
29667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
29677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
29687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
29697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
29707a5b040eSPengcheng Wang;
29717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_6:
29727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
29737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
29747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
29757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 6
29767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
29777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
29787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
29797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
29807a5b040eSPengcheng Wang;
29817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_6:
29827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
29837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
29847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
29857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 6
29867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
29877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
29887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
29897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
29907a5b040eSPengcheng Wang;
29917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_6:
29927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
29937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
29947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
29957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 6
29967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
29977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
29987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
29997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
30007a5b040eSPengcheng Wang;
30017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_6:
30027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
30037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
30047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
30057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 6
30067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
30077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
30087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
30097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
30107a5b040eSPengcheng Wang;
30117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_6:
30127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
30137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 0(a0)
30147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 0(a1)
30157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
30167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
30177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB27_3
30187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.1: # %loadbb1
30197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lh a0, 4(a0)
30207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lh a1, 4(a1)
30217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a0
30227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a1
30239122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    srli a2, a2, 16
30247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    srli a3, a3, 16
30257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB27_3
30267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.2:
30277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    li a0, 0
30287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
30297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  .LBB27_3: # %res_block
30307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a2, a3
30317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    neg a0, a0
30327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ori a0, a0, 1
30337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
30347a5b040eSPengcheng Wang;
30357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_6:
30367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
303772db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lhu a2, 4(a0)
303872db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lwu a0, 0(a0)
303972db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lhu a3, 4(a1)
304072db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lwu a1, 0(a1)
304172db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    slli a2, a2, 32
304272db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, a0, a2
304372db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    slli a3, a3, 32
304472db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a1, a1, a3
304572db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a0, a0
304672db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a1, a1
3047*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a2, a0, a1
3048*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a1, a0
3049*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sub a0, a0, a2
30507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
30517a5b040eSPengcheng Wang;
30527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_6:
30537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
30547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 0(a0)
30557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 0(a1)
30567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
30577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
30587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB27_3
30597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.1: # %loadbb1
30607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lh a0, 4(a0)
30617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lh a1, 4(a1)
30627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a0
30637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a1
30649122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    srli a2, a2, 16
30657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    srli a3, a3, 16
30667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB27_3
30677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.2:
30687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    li a0, 0
30697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
30707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  .LBB27_3: # %res_block
30717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a2, a3
30727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    neg a0, a0
30737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ori a0, a0, 1
30747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
30757a5b040eSPengcheng Wang;
30767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_6:
30777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
307872db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lwu a2, 0(a0)
307972db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lhu a0, 4(a0)
308072db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lwu a3, 0(a1)
308172db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lhu a1, 4(a1)
308272db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    pack a0, a2, a0
308372db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    pack a1, a3, a1
308472db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a0, a0
308572db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a1, a1
3086*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a2, a0, a1
3087*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a1, a0
3088*13cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sub a0, a0, a2
30897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
30907a5b040eSPengcheng Wang;
30917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_6:
30927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
30937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
30947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
30957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 6
30967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
30977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
30987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
30997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
31007a5b040eSPengcheng Wang;
31017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_6:
31027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
31037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
31047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
31057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 6
31067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
31077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
31087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
31097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
31105adb5c05SPengcheng Wangentry:
31115adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 6)
31125adb5c05SPengcheng Wang  ret i32 %memcmp
31135adb5c05SPengcheng Wang}
31145adb5c05SPengcheng Wang
31155adb5c05SPengcheng Wangdefine i32 @memcmp_size_7(ptr %s1, ptr %s2) nounwind optsize {
31167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_7:
31177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
31187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
31197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
31207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 7
31217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
31227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
31237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
31247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
31255adb5c05SPengcheng Wang;
31267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_7:
31277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
31287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
31297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
31307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 7
31317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
31327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
31337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
31347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
31357a5b040eSPengcheng Wang;
31367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_7:
31377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
31387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
31397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
31407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 7
31417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
31427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
31437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
31447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
31457a5b040eSPengcheng Wang;
31467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_7:
31477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
31487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
31497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
31507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 7
31517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
31527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
31537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
31547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
31557a5b040eSPengcheng Wang;
31567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_7:
31577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
31587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
31597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
31607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 7
31617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
31627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
31637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
31647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
31657a5b040eSPengcheng Wang;
31667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_7:
31677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
31687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
31697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
31707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 7
31717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
31727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
31737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
31747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
31757a5b040eSPengcheng Wang;
31767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_7:
31777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
31787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
31797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
31807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 7
31817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
31827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
31837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
31847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
31857a5b040eSPengcheng Wang;
31867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_7:
31877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
31887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
31897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
31907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 7
31917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
31927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
31937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
31947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
31957a5b040eSPengcheng Wang;
31967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_7:
31977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
31987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
31997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
32007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 7
32017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
32027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
32037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
32047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
32057a5b040eSPengcheng Wang;
32067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_7:
32077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
32087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
32097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
32107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 7
32117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
32127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
32137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
32147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
32157a5b040eSPengcheng Wang;
32167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_7:
32177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
32187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 0(a0)
32197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 0(a1)
32207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
32217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
32227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB28_3
32237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.1: # %loadbb1
32247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 3(a0)
32257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 3(a1)
32267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a0
32277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a1
32287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB28_3
32297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.2:
32307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    li a0, 0
32317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
32327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  .LBB28_3: # %res_block
32337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a2, a3
32347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    neg a0, a0
32357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ori a0, a0, 1
32367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
32377a5b040eSPengcheng Wang;
32387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_7:
32397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
32407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a2, 0(a0)
32417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a3, 0(a1)
32427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
32437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
32449122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a2, a2, 32
32457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a3, a3, 32
32467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB28_3
32477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.1: # %loadbb1
32487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a0, 3(a0)
32497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a1, 3(a1)
32507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a0
32517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a1
32529122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a2, a2, 32
32537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a3, a3, 32
32547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB28_3
32557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.2:
32567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    li a0, 0
32577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
32587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  .LBB28_3: # %res_block
32597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a2, a3
32607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    neg a0, a0
32617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ori a0, a0, 1
32627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
32637a5b040eSPengcheng Wang;
32647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_7:
32657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
32667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 0(a0)
32677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 0(a1)
32687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
32697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
32707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB28_3
32717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.1: # %loadbb1
32727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 3(a0)
32737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 3(a1)
32747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a0
32757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a1
32767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB28_3
32777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.2:
32787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    li a0, 0
32797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
32807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  .LBB28_3: # %res_block
32817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a2, a3
32827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    neg a0, a0
32837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ori a0, a0, 1
32847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
32857a5b040eSPengcheng Wang;
32867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_7:
32877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
32887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a2, 0(a0)
32897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a3, 0(a1)
32907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
32917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
32929122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a2, a2, 32
32937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a3, a3, 32
32947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB28_3
32957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.1: # %loadbb1
32967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a0, 3(a0)
32977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a1, 3(a1)
32987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a0
32997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a1
33009122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a2, a2, 32
33017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a3, a3, 32
33027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB28_3
33037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.2:
33047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    li a0, 0
33057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
33067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  .LBB28_3: # %res_block
33077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a2, a3
33087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    neg a0, a0
33097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ori a0, a0, 1
33107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
33117a5b040eSPengcheng Wang;
33127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_7:
33137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
33147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
33157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
33167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 7
33177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
33187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
33197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
33207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
33217a5b040eSPengcheng Wang;
33227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_7:
33237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
33247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
33257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
33267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 7
33277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
33287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
33297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
33307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
33315adb5c05SPengcheng Wangentry:
33325adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 7)
33335adb5c05SPengcheng Wang  ret i32 %memcmp
33345adb5c05SPengcheng Wang}
33355adb5c05SPengcheng Wang
33365adb5c05SPengcheng Wangdefine i32 @memcmp_size_8(ptr %s1, ptr %s2) nounwind optsize {
33377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_8:
33387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
33397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
33407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
33417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 8
33427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
33437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
33447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
33457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
33465adb5c05SPengcheng Wang;
33477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_8:
33487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
33497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
33507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
33517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 8
33527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
33537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
33547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
33557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
33567a5b040eSPengcheng Wang;
33577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_8:
33587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
33597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
33607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
33617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 8
33627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
33637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
33647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
33657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
33667a5b040eSPengcheng Wang;
33677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_8:
33687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
33697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
33707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
33717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 8
33727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
33737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
33747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
33757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
33767a5b040eSPengcheng Wang;
33777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_8:
33787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
33797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
33807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
33817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 8
33827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
33837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
33847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
33857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
33867a5b040eSPengcheng Wang;
33877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_8:
33887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
33897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
33907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
33917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 8
33927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
33937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
33947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
33957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
33967a5b040eSPengcheng Wang;
33977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_8:
33987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
33997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
34007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
34017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 8
34027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
34037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
34047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
34057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
34067a5b040eSPengcheng Wang;
34077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_8:
34087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
34097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
34107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
34117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 8
34127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
34137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
34147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
34157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
34167a5b040eSPengcheng Wang;
34177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_8:
34187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
34197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
34207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
34217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 8
34227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
34237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
34247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
34257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
34267a5b040eSPengcheng Wang;
34277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_8:
34287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
34297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
34307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
34317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 8
34327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
34337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
34347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
34357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
34367a5b040eSPengcheng Wang;
34377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_8:
34387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
34397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 0(a0)
34407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 0(a1)
34417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
34427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
34437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB29_3
34447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.1: # %loadbb1
34457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 4(a0)
34467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 4(a1)
34477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a0
34487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a1
34497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB29_3
34507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.2:
34517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    li a0, 0
34527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
34537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  .LBB29_3: # %res_block
34547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a2, a3
34557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    neg a0, a0
34567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ori a0, a0, 1
34577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
34587a5b040eSPengcheng Wang;
34597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_8:
34607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
34617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a0, 0(a0)
34627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a1, 0(a1)
34637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a0, a0
34647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a1, a1
34654dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a2, a0, a1
34664dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a1, a0
34674dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sub a0, a0, a2
34687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
34697a5b040eSPengcheng Wang;
34707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_8:
34717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
34727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 0(a0)
34737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 0(a1)
34747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
34757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
34767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB29_3
34777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.1: # %loadbb1
34787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 4(a0)
34797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 4(a1)
34807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a0
34817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a1
34827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB29_3
34837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.2:
34847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    li a0, 0
34857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
34867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  .LBB29_3: # %res_block
34877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a2, a3
34887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    neg a0, a0
34897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ori a0, a0, 1
34907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
34917a5b040eSPengcheng Wang;
34927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_8:
34937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
34947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a0, 0(a0)
34957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a1, 0(a1)
34967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a0, a0
34977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a1, a1
34984dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a2, a0, a1
34994dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a1, a0
35004dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sub a0, a0, a2
35017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
35027a5b040eSPengcheng Wang;
35037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_8:
35047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
35057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
35067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
35077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 8
35087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
35097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
35107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
35117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
35127a5b040eSPengcheng Wang;
35137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_8:
35147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
35157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
35167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
35177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 8
35187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
35197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
35207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
35217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
35225adb5c05SPengcheng Wangentry:
35235adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 8)
35245adb5c05SPengcheng Wang  ret i32 %memcmp
35255adb5c05SPengcheng Wang}
35265adb5c05SPengcheng Wang
35275adb5c05SPengcheng Wangdefine i32 @memcmp_size_15(ptr %s1, ptr %s2) nounwind optsize {
35287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_15:
35297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
35307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
35317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
35327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 15
35337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
35347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
35357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
35367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
35375adb5c05SPengcheng Wang;
35387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_15:
35397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
35407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
35417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
35427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 15
35437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
35447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
35457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
35467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
35477a5b040eSPengcheng Wang;
35487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_15:
35497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
35507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
35517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
35527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 15
35537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
35547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
35557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
35567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
35577a5b040eSPengcheng Wang;
35587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_15:
35597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
35607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
35617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
35627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 15
35637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
35647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
35657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
35667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
35677a5b040eSPengcheng Wang;
35687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_15:
35697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
35707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
35717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
35727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 15
35737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
35747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
35757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
35767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
35777a5b040eSPengcheng Wang;
35787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_15:
35797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
35807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
35817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
35827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 15
35837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
35847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
35857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
35867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
35877a5b040eSPengcheng Wang;
35887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_15:
35897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
35907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
35917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
35927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 15
35937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
35947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
35957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
35967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
35977a5b040eSPengcheng Wang;
35987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_15:
35997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
36007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
36017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
36027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 15
36037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
36047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
36057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
36067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
36077a5b040eSPengcheng Wang;
36087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_15:
36097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
36107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
36117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
36127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 15
36137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
36147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
36157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
36167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
36177a5b040eSPengcheng Wang;
36187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_15:
36197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
36207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
36217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
36227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 15
36237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
36247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
36257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
36267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
36277a5b040eSPengcheng Wang;
36287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_15:
36297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
36307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 0(a0)
36317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 0(a1)
36327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
36337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
36347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB30_5
36357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.1: # %loadbb1
36367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 4(a0)
36377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 4(a1)
36387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
36397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
36407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB30_5
36417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.2: # %loadbb2
36427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 8(a0)
36437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 8(a1)
36447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
36457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
36467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB30_5
36477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.3: # %loadbb3
36487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 11(a0)
36497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 11(a1)
36507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a0
36517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a1
36527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB30_5
36537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.4:
36547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    li a0, 0
36557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
36567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  .LBB30_5: # %res_block
36577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a2, a3
36587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    neg a0, a0
36597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ori a0, a0, 1
36607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
36617a5b040eSPengcheng Wang;
36627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_15:
36637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
36647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 0(a0)
36657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 0(a1)
36667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
36677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
36687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB30_3
36697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.1: # %loadbb1
36707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a0, 7(a0)
36717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a1, 7(a1)
36727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a0
36737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a1
36747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB30_3
36757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.2:
36767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    li a0, 0
36777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
36787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  .LBB30_3: # %res_block
36797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a2, a3
36807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    neg a0, a0
36817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ori a0, a0, 1
36827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
36837a5b040eSPengcheng Wang;
36847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_15:
36857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
36867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 0(a0)
36877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 0(a1)
36887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
36897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
36907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB30_5
36917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.1: # %loadbb1
36927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 4(a0)
36937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 4(a1)
36947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
36957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
36967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB30_5
36977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.2: # %loadbb2
36987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 8(a0)
36997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 8(a1)
37007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
37017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
37027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB30_5
37037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.3: # %loadbb3
37047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 11(a0)
37057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 11(a1)
37067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a0
37077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a1
37087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB30_5
37097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.4:
37107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    li a0, 0
37117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
37127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  .LBB30_5: # %res_block
37137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a2, a3
37147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    neg a0, a0
37157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ori a0, a0, 1
37167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
37177a5b040eSPengcheng Wang;
37187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_15:
37197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
37207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 0(a0)
37217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 0(a1)
37227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
37237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
37247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB30_3
37257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.1: # %loadbb1
37267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a0, 7(a0)
37277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a1, 7(a1)
37287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a0
37297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a1
37307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB30_3
37317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.2:
37327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    li a0, 0
37337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
37347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  .LBB30_3: # %res_block
37357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a2, a3
37367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    neg a0, a0
37377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ori a0, a0, 1
37387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
37397a5b040eSPengcheng Wang;
37407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_15:
37417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
37427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
37437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
37447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 15
37457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
37467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
37477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
37487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
37497a5b040eSPengcheng Wang;
37507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_15:
37517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
37527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
37537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
37547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 15
37557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
37567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
37577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
37587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
37595adb5c05SPengcheng Wangentry:
37605adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 15)
37615adb5c05SPengcheng Wang  ret i32 %memcmp
37625adb5c05SPengcheng Wang}
37635adb5c05SPengcheng Wang
37645adb5c05SPengcheng Wangdefine i32 @memcmp_size_16(ptr %s1, ptr %s2) nounwind optsize {
37657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_16:
37667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
37677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
37687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
37697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 16
37707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
37717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
37727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
37737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
37745adb5c05SPengcheng Wang;
37757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_16:
37767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
37777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
37787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
37797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 16
37807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
37817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
37827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
37837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
37847a5b040eSPengcheng Wang;
37857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_16:
37867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
37877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
37887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
37897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 16
37907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
37917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
37927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
37937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
37947a5b040eSPengcheng Wang;
37957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_16:
37967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
37977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
37987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
37997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 16
38007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
38017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
38027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
38037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
38047a5b040eSPengcheng Wang;
38057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_16:
38067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
38077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
38087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
38097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 16
38107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
38117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
38127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
38137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
38147a5b040eSPengcheng Wang;
38157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_16:
38167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
38177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
38187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
38197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 16
38207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
38217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
38227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
38237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
38247a5b040eSPengcheng Wang;
38257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_16:
38267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
38277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
38287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
38297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 16
38307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
38317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
38327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
38337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
38347a5b040eSPengcheng Wang;
38357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_16:
38367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
38377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
38387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
38397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 16
38407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
38417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
38427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
38437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
38447a5b040eSPengcheng Wang;
38457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_16:
38467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
38477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
38487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
38497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 16
38507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
38517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
38527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
38537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
38547a5b040eSPengcheng Wang;
38557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_16:
38567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
38577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
38587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
38597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 16
38607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
38617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
38627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
38637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
38647a5b040eSPengcheng Wang;
38657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_16:
38667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
38677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 0(a0)
38687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 0(a1)
38697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
38707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
38717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB31_5
38727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.1: # %loadbb1
38737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 4(a0)
38747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 4(a1)
38757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
38767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
38777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB31_5
38787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.2: # %loadbb2
38797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 8(a0)
38807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 8(a1)
38817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
38827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
38837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB31_5
38847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.3: # %loadbb3
38857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 12(a0)
38867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 12(a1)
38877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a0
38887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a1
38897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB31_5
38907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.4:
38917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    li a0, 0
38927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
38937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  .LBB31_5: # %res_block
38947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a2, a3
38957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    neg a0, a0
38967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ori a0, a0, 1
38977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
38987a5b040eSPengcheng Wang;
38997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_16:
39007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
39017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 0(a0)
39027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 0(a1)
39037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
39047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
39057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB31_3
39067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.1: # %loadbb1
39077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a0, 8(a0)
39087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a1, 8(a1)
39097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a0
39107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a1
39117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB31_3
39127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.2:
39137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    li a0, 0
39147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
39157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  .LBB31_3: # %res_block
39167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a2, a3
39177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    neg a0, a0
39187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ori a0, a0, 1
39197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
39207a5b040eSPengcheng Wang;
39217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_16:
39227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
39237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 0(a0)
39247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 0(a1)
39257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
39267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
39277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB31_5
39287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.1: # %loadbb1
39297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 4(a0)
39307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 4(a1)
39317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
39327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
39337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB31_5
39347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.2: # %loadbb2
39357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 8(a0)
39367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 8(a1)
39377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
39387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
39397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB31_5
39407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.3: # %loadbb3
39417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 12(a0)
39427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 12(a1)
39437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a0
39447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a1
39457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB31_5
39467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.4:
39477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    li a0, 0
39487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
39497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  .LBB31_5: # %res_block
39507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a2, a3
39517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    neg a0, a0
39527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ori a0, a0, 1
39537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
39547a5b040eSPengcheng Wang;
39557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_16:
39567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
39577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 0(a0)
39587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 0(a1)
39597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
39607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
39617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB31_3
39627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.1: # %loadbb1
39637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a0, 8(a0)
39647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a1, 8(a1)
39657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a0
39667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a1
39677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB31_3
39687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.2:
39697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    li a0, 0
39707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
39717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  .LBB31_3: # %res_block
39727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a2, a3
39737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    neg a0, a0
39747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ori a0, a0, 1
39757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
39767a5b040eSPengcheng Wang;
39777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_16:
39787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
39797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
39807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
39817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 16
39827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
39837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
39847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
39857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
39867a5b040eSPengcheng Wang;
39877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_16:
39887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
39897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
39907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
39917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 16
39927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
39937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
39947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
39957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
39965adb5c05SPengcheng Wangentry:
39975adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 16)
39985adb5c05SPengcheng Wang  ret i32 %memcmp
39995adb5c05SPengcheng Wang}
40005adb5c05SPengcheng Wang
40015adb5c05SPengcheng Wangdefine i32 @memcmp_size_31(ptr %s1, ptr %s2) nounwind optsize {
40025adb5c05SPengcheng Wang; CHECK-RV32-LABEL: memcmp_size_31:
40035adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
40045adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
40055adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
40065adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    li a2, 31
40075adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call memcmp
40085adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
40095adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
40105adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
40115adb5c05SPengcheng Wang;
40127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_31:
40137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
40147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
40157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
40167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 31
40177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
40187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
40197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
40207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
40217a5b040eSPengcheng Wang;
40227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_31:
40237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
40247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
40257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
40267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 31
40277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
40287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
40297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
40307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
40317a5b040eSPengcheng Wang;
40327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_31:
40337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
40347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
40357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
40367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 31
40377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
40387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
40397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
40407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
40417a5b040eSPengcheng Wang;
40427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_31:
40437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
40447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
40457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
40467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 31
40477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
40487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
40497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
40507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
40517a5b040eSPengcheng Wang;
40527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_31:
40537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
40547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
40557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
40567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 31
40577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
40587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
40597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
40607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
40617a5b040eSPengcheng Wang;
40627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_31:
40637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
40647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 0(a0)
40657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 0(a1)
40667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
40677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
40687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB32_5
40697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.1: # %loadbb1
40707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 8(a0)
40717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 8(a1)
40727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
40737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
40747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB32_5
40757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.2: # %loadbb2
40767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 16(a0)
40777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 16(a1)
40787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
40797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
40807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB32_5
40817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.3: # %loadbb3
40827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a0, 23(a0)
40837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a1, 23(a1)
40847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a0
40857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a1
40867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB32_5
40877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.4:
40887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    li a0, 0
40897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
40907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  .LBB32_5: # %res_block
40917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a2, a3
40927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    neg a0, a0
40937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ori a0, a0, 1
40947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
40957a5b040eSPengcheng Wang;
40967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_31:
40977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
40987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 0(a0)
40997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 0(a1)
41007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
41017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
41027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB32_5
41037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.1: # %loadbb1
41047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 8(a0)
41057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 8(a1)
41067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
41077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
41087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB32_5
41097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.2: # %loadbb2
41107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 16(a0)
41117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 16(a1)
41127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
41137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
41147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB32_5
41157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.3: # %loadbb3
41167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a0, 23(a0)
41177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a1, 23(a1)
41187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a0
41197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a1
41207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB32_5
41217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.4:
41227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    li a0, 0
41237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
41247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  .LBB32_5: # %res_block
41257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a2, a3
41267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    neg a0, a0
41277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ori a0, a0, 1
41287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
41297a5b040eSPengcheng Wang;
41307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_31:
41317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
41327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
41337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
41347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 31
41357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
41367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
41377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
41387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
41395adb5c05SPengcheng Wangentry:
41405adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 31)
41415adb5c05SPengcheng Wang  ret i32 %memcmp
41425adb5c05SPengcheng Wang}
41435adb5c05SPengcheng Wang
41445adb5c05SPengcheng Wangdefine i32 @memcmp_size_32(ptr %s1, ptr %s2) nounwind optsize {
41455adb5c05SPengcheng Wang; CHECK-RV32-LABEL: memcmp_size_32:
41465adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
41475adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
41485adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
41495adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    li a2, 32
41505adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call memcmp
41515adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
41525adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
41535adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
41545adb5c05SPengcheng Wang;
41557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_32:
41567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
41577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
41587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
41597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 32
41607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
41617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
41627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
41637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
41647a5b040eSPengcheng Wang;
41657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_32:
41667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
41677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
41687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
41697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 32
41707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
41717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
41727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
41737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
41747a5b040eSPengcheng Wang;
41757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_32:
41767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
41777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
41787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
41797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 32
41807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
41817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
41827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
41837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
41847a5b040eSPengcheng Wang;
41857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_32:
41867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
41877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
41887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
41897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 32
41907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
41917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
41927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
41937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
41947a5b040eSPengcheng Wang;
41957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_32:
41967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
41977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
41987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
41997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 32
42007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
42017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
42027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
42037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
42047a5b040eSPengcheng Wang;
42057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_32:
42067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
42077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 0(a0)
42087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 0(a1)
42097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
42107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
42117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB33_5
42127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.1: # %loadbb1
42137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 8(a0)
42147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 8(a1)
42157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
42167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
42177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB33_5
42187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.2: # %loadbb2
42197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 16(a0)
42207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 16(a1)
42217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
42227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
42237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB33_5
42247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.3: # %loadbb3
42257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a0, 24(a0)
42267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a1, 24(a1)
42277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a0
42287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a1
42297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB33_5
42307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.4:
42317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    li a0, 0
42327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
42337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  .LBB33_5: # %res_block
42347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a2, a3
42357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    neg a0, a0
42367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ori a0, a0, 1
42377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
42387a5b040eSPengcheng Wang;
42397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_32:
42407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
42417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 0(a0)
42427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 0(a1)
42437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
42447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
42457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB33_5
42467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.1: # %loadbb1
42477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 8(a0)
42487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 8(a1)
42497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
42507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
42517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB33_5
42527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.2: # %loadbb2
42537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 16(a0)
42547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 16(a1)
42557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
42567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
42577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB33_5
42587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.3: # %loadbb3
42597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a0, 24(a0)
42607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a1, 24(a1)
42617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a0
42627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a1
42637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB33_5
42647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.4:
42657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    li a0, 0
42667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
42677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  .LBB33_5: # %res_block
42687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a2, a3
42697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    neg a0, a0
42707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ori a0, a0, 1
42717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
42727a5b040eSPengcheng Wang;
42737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_32:
42747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
42757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
42767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
42777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 32
42787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
42797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
42807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
42817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
42825adb5c05SPengcheng Wangentry:
42835adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 32)
42845adb5c05SPengcheng Wang  ret i32 %memcmp
42855adb5c05SPengcheng Wang}
42865adb5c05SPengcheng Wang
42875adb5c05SPengcheng Wangdefine i32 @memcmp_size_63(ptr %s1, ptr %s2) nounwind optsize {
42885adb5c05SPengcheng Wang; CHECK-RV32-LABEL: memcmp_size_63:
42895adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
42905adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
42915adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
42925adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    li a2, 63
42935adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call memcmp
42945adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
42955adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
42965adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
42975adb5c05SPengcheng Wang;
42985adb5c05SPengcheng Wang; CHECK-RV64-LABEL: memcmp_size_63:
42995adb5c05SPengcheng Wang; CHECK-RV64:       # %bb.0: # %entry
43005adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, -16
43015adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
43025adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    li a2, 63
43035adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    call memcmp
43045adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
43055adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, 16
43065adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ret
43075adb5c05SPengcheng Wangentry:
43085adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 63)
43095adb5c05SPengcheng Wang  ret i32 %memcmp
43105adb5c05SPengcheng Wang}
43115adb5c05SPengcheng Wang
43125adb5c05SPengcheng Wangdefine i32 @memcmp_size_64(ptr %s1, ptr %s2) nounwind optsize {
43135adb5c05SPengcheng Wang; CHECK-RV32-LABEL: memcmp_size_64:
43145adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
43155adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
43165adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
43175adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    li a2, 64
43185adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call memcmp
43195adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
43205adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
43215adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
43225adb5c05SPengcheng Wang;
43235adb5c05SPengcheng Wang; CHECK-RV64-LABEL: memcmp_size_64:
43245adb5c05SPengcheng Wang; CHECK-RV64:       # %bb.0: # %entry
43255adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, -16
43265adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
43275adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    li a2, 64
43285adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    call memcmp
43295adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
43305adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, 16
43315adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ret
43325adb5c05SPengcheng Wangentry:
43335adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 64)
43345adb5c05SPengcheng Wang  ret i32 %memcmp
43355adb5c05SPengcheng Wang}
43365adb5c05SPengcheng Wang
43375adb5c05SPengcheng Wangdefine i32 @memcmp_size_127(ptr %s1, ptr %s2) nounwind optsize {
43385adb5c05SPengcheng Wang; CHECK-RV32-LABEL: memcmp_size_127:
43395adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
43405adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
43415adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
43425adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    li a2, 127
43435adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call memcmp
43445adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
43455adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
43465adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
43475adb5c05SPengcheng Wang;
43485adb5c05SPengcheng Wang; CHECK-RV64-LABEL: memcmp_size_127:
43495adb5c05SPengcheng Wang; CHECK-RV64:       # %bb.0: # %entry
43505adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, -16
43515adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
43525adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    li a2, 127
43535adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    call memcmp
43545adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
43555adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, 16
43565adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ret
43575adb5c05SPengcheng Wangentry:
43585adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 127)
43595adb5c05SPengcheng Wang  ret i32 %memcmp
43605adb5c05SPengcheng Wang}
43615adb5c05SPengcheng Wang
43625adb5c05SPengcheng Wangdefine i32 @memcmp_size_128(ptr %s1, ptr %s2) nounwind optsize {
43635adb5c05SPengcheng Wang; CHECK-RV32-LABEL: memcmp_size_128:
43645adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
43655adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
43665adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
43675adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    li a2, 128
43685adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call memcmp
43695adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
43705adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
43715adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
43725adb5c05SPengcheng Wang;
43735adb5c05SPengcheng Wang; CHECK-RV64-LABEL: memcmp_size_128:
43745adb5c05SPengcheng Wang; CHECK-RV64:       # %bb.0: # %entry
43755adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, -16
43765adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
43775adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    li a2, 128
43785adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    call memcmp
43795adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
43805adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, 16
43815adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ret
43825adb5c05SPengcheng Wangentry:
43835adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 128)
43845adb5c05SPengcheng Wang  ret i32 %memcmp
43855adb5c05SPengcheng Wang}
43865adb5c05SPengcheng Wang
43875adb5c05SPengcheng Wangdefine i32 @memcmp_size_runtime(ptr %s1, ptr %s2, iXLen %len) nounwind optsize {
43885adb5c05SPengcheng Wang; CHECK-RV32-LABEL: memcmp_size_runtime:
43895adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
43905adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
43915adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
43925adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call memcmp
43935adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
43945adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
43955adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
43965adb5c05SPengcheng Wang;
43975adb5c05SPengcheng Wang; CHECK-RV64-LABEL: memcmp_size_runtime:
43985adb5c05SPengcheng Wang; CHECK-RV64:       # %bb.0: # %entry
43995adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, -16
44005adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
44015adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    call memcmp
44025adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
44035adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, 16
44045adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ret
44055adb5c05SPengcheng Wangentry:
44065adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen %len)
44075adb5c05SPengcheng Wang  ret i32 %memcmp
44085adb5c05SPengcheng Wang}
44095adb5c05SPengcheng Wang
44105adb5c05SPengcheng Wangdefine i1 @memcmp_eq_zero(ptr %s1, ptr %s2) nounwind optsize {
44115adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_eq_zero:
44125adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
44135adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lbu a2, 1(a1)
44149122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lbu a3, 2(a1)
44159122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lbu a4, 3(a1)
44169122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lbu a1, 0(a1)
44175adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    slli a2, a2, 8
44189122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    slli a3, a3, 16
44199122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    slli a4, a4, 24
44209122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    or a1, a2, a1
44219122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lbu a2, 0(a0)
44229122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lbu a5, 1(a0)
44235adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    or a3, a4, a3
44249122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lbu a4, 2(a0)
44259122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lbu a0, 3(a0)
44269122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    slli a5, a5, 8
44279122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    or a2, a5, a2
44289122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    slli a4, a4, 16
44295adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    slli a0, a0, 24
44309122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    or a0, a0, a4
44319122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    or a1, a3, a1
44325adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    or a0, a0, a2
44335adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    xor a0, a0, a1
44345adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    seqz a0, a0
44355adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
44365adb5c05SPengcheng Wang;
44375adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_eq_zero:
44385adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
44395adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    lbu a2, 1(a1)
44409122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    lbu a3, 2(a1)
44419122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    lb a4, 3(a1)
44429122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    lbu a1, 0(a1)
44435adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    slli a2, a2, 8
44449122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    slli a3, a3, 16
44459122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    slli a4, a4, 24
44469122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    or a1, a2, a1
44479122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    lbu a2, 0(a0)
44489122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    lbu a5, 1(a0)
44495adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    or a3, a4, a3
44509122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    lbu a4, 2(a0)
44519122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    lb a0, 3(a0)
44529122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    slli a5, a5, 8
44539122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    or a2, a5, a2
44549122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    slli a4, a4, 16
44555adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    slli a0, a0, 24
44569122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    or a0, a0, a4
44579122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    or a1, a3, a1
44585adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    or a0, a0, a2
44595adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    xor a0, a0, a1
44605adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    seqz a0, a0
44615adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
44625adb5c05SPengcheng Wang;
44635adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_eq_zero:
44645adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
44655adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lbu a2, 1(a1)
44669122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lbu a3, 2(a1)
44679122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lbu a4, 3(a1)
44689122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lbu a1, 0(a1)
44695adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    slli a2, a2, 8
44709122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    slli a3, a3, 16
44719122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    slli a4, a4, 24
44729122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    or a1, a2, a1
44739122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lbu a2, 0(a0)
44749122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lbu a5, 1(a0)
44755adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    or a3, a4, a3
44769122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lbu a4, 2(a0)
44779122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lbu a0, 3(a0)
44789122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    slli a5, a5, 8
44799122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    or a2, a5, a2
44809122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    slli a4, a4, 16
44815adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    slli a0, a0, 24
44829122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    or a0, a0, a4
44839122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    or a1, a3, a1
44845adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    or a0, a0, a2
44855adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    xor a0, a0, a1
44865adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    seqz a0, a0
44875adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
44885adb5c05SPengcheng Wang;
44895adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_eq_zero:
44905adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
44915adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    lbu a2, 1(a1)
44929122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    lbu a3, 2(a1)
44939122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    lb a4, 3(a1)
44949122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    lbu a1, 0(a1)
44955adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    slli a2, a2, 8
44969122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    slli a3, a3, 16
44979122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    slli a4, a4, 24
44989122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    or a1, a2, a1
44999122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    lbu a2, 0(a0)
45009122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    lbu a5, 1(a0)
45015adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    or a3, a4, a3
45029122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    lbu a4, 2(a0)
45039122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    lb a0, 3(a0)
45049122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    slli a5, a5, 8
45059122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    or a2, a5, a2
45069122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    slli a4, a4, 16
45075adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    slli a0, a0, 24
45089122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    or a0, a0, a4
45099122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    or a1, a3, a1
45105adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    or a0, a0, a2
45115adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    xor a0, a0, a1
45125adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    seqz a0, a0
45135adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
45145adb5c05SPengcheng Wang;
45155adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_eq_zero:
45165adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
45175adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lbu a2, 0(a1)
45185adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lbu a3, 1(a1)
45195adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lbu a4, 2(a1)
45205adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lbu a1, 3(a1)
45219122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lbu a5, 1(a0)
45229122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lbu a6, 2(a0)
45239122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lbu a7, 3(a0)
45249122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lbu a0, 0(a0)
45255adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    packh a1, a4, a1
45265adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    packh a2, a2, a3
45279122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    packh a3, a6, a7
45289122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    packh a0, a0, a5
45295adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    pack a1, a2, a1
45309122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    pack a0, a0, a3
45315adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    xor a0, a0, a1
45325adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    seqz a0, a0
45335adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
45345adb5c05SPengcheng Wang;
45355adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_eq_zero:
45365adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
45375adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    lbu a2, 0(a1)
45385adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    lbu a3, 1(a1)
45395adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    lbu a4, 2(a1)
45405adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    lb a1, 3(a1)
45419122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    lbu a5, 0(a0)
45429122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    lbu a6, 1(a0)
45435adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    packh a2, a2, a3
45449122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    lbu a3, 2(a0)
45459122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    lb a0, 3(a0)
45469122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    packh a5, a5, a6
45475adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    slli a4, a4, 16
45485adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    slli a1, a1, 24
45495adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    or a1, a1, a4
45509122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    slli a3, a3, 16
45515adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    slli a0, a0, 24
45529122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    or a0, a0, a3
45539122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    or a1, a1, a2
45545adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    or a0, a0, a5
45555adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    xor a0, a0, a1
45565adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    seqz a0, a0
45575adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
45585adb5c05SPengcheng Wang;
45595adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_eq_zero:
45605adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
45615adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lbu a2, 1(a1)
45629122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lbu a3, 2(a1)
45639122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lbu a4, 3(a1)
45649122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lbu a1, 0(a1)
45655adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    slli a2, a2, 8
45669122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    slli a3, a3, 16
45679122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    slli a4, a4, 24
45689122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    or a1, a2, a1
45699122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lbu a2, 0(a0)
45709122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lbu a5, 1(a0)
45715adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    or a3, a4, a3
45729122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lbu a4, 2(a0)
45739122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lbu a0, 3(a0)
45749122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    slli a5, a5, 8
45759122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    or a2, a5, a2
45769122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    slli a4, a4, 16
45775adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    slli a0, a0, 24
45789122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    or a0, a0, a4
45799122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    or a1, a3, a1
45805adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    or a0, a0, a2
45815adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    xor a0, a0, a1
45825adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    seqz a0, a0
45835adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
45845adb5c05SPengcheng Wang;
45855adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_eq_zero:
45865adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
45875adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    lbu a2, 1(a1)
45889122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    lbu a3, 2(a1)
45899122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    lb a4, 3(a1)
45909122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    lbu a1, 0(a1)
45915adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    slli a2, a2, 8
45929122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    slli a3, a3, 16
45939122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    slli a4, a4, 24
45949122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    or a1, a2, a1
45959122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    lbu a2, 0(a0)
45969122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    lbu a5, 1(a0)
45975adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    or a3, a4, a3
45989122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    lbu a4, 2(a0)
45999122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    lb a0, 3(a0)
46009122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    slli a5, a5, 8
46019122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    or a2, a5, a2
46029122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    slli a4, a4, 16
46035adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    slli a0, a0, 24
46049122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    or a0, a0, a4
46059122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    or a1, a3, a1
46065adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    or a0, a0, a2
46075adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    xor a0, a0, a1
46085adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    seqz a0, a0
46095adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
46105adb5c05SPengcheng Wang;
46115adb5c05SPengcheng Wang; CHECK-UNALIGNED-LABEL: memcmp_eq_zero:
46125adb5c05SPengcheng Wang; CHECK-UNALIGNED:       # %bb.0: # %entry
46135adb5c05SPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a0, 0(a0)
46147a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a1, 0(a1)
46155adb5c05SPengcheng Wang; CHECK-UNALIGNED-NEXT:    xor a0, a0, a1
46165adb5c05SPengcheng Wang; CHECK-UNALIGNED-NEXT:    seqz a0, a0
46175adb5c05SPengcheng Wang; CHECK-UNALIGNED-NEXT:    ret
46185adb5c05SPengcheng Wangentry:
46195adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 4)
46205adb5c05SPengcheng Wang  %ret = icmp eq i32 %memcmp, 0
46215adb5c05SPengcheng Wang  ret i1 %ret
46225adb5c05SPengcheng Wang}
46235adb5c05SPengcheng Wang
46245adb5c05SPengcheng Wangdefine i1 @memcmp_lt_zero(ptr %s1, ptr %s2) nounwind optsize {
46257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_lt_zero:
46267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
46277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
46287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
46297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 4
46307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
46317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    srli a0, a0, 31
46327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
46337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
46347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
46355adb5c05SPengcheng Wang;
46367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_lt_zero:
46377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
46387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
46397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
46407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 4
46417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
46427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    slti a0, a0, 0
46437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
46447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
46457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
46467a5b040eSPengcheng Wang;
46477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_lt_zero:
46487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
46497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
46507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
46517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 4
46527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
46537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    srli a0, a0, 31
46547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
46557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
46567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
46577a5b040eSPengcheng Wang;
46587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_lt_zero:
46597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
46607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
46617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
46627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 4
46637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
46647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    slti a0, a0, 0
46657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
46667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
46677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
46687a5b040eSPengcheng Wang;
46697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_lt_zero:
46707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
46717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
46727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
46737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 4
46747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
46757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    srli a0, a0, 31
46767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
46777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
46787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
46797a5b040eSPengcheng Wang;
46807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_lt_zero:
46817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
46827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
46837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
46847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 4
46857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
46867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    slti a0, a0, 0
46877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
46887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
46897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
46907a5b040eSPengcheng Wang;
46917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_lt_zero:
46927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
46937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
46947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
46957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 4
46967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
46977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    srli a0, a0, 31
46987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
46997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
47007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
47017a5b040eSPengcheng Wang;
47027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_lt_zero:
47037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
47047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
47057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
47067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 4
47077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
47087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    slti a0, a0, 0
47097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
47107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
47117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
47127a5b040eSPengcheng Wang;
47137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_lt_zero:
47147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
47157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
47167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
47177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 4
47187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
47197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    srli a0, a0, 31
47207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
47217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
47227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
47237a5b040eSPengcheng Wang;
47247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_lt_zero:
47257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
47267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
47277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
47287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 4
47297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
47307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    slti a0, a0, 0
47317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
47327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
47337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
47347a5b040eSPengcheng Wang;
47357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_lt_zero:
47367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
47377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 0(a0)
47387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 0(a1)
47397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a0, a0
47407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a1, a1
47417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a0, a1
47427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
47437a5b040eSPengcheng Wang;
47447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_lt_zero:
47457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
47467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a0, 0(a0)
47477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a1, 0(a1)
47487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a0, a0
47497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a1, a1
47509122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a0, a0, 32
47517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a1, a1, 32
47527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a0, a1
47537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
47547a5b040eSPengcheng Wang;
47557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_lt_zero:
47567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
47577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 0(a0)
47587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 0(a1)
47597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a0, a0
47607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a1, a1
47617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a0, a1
47627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
47637a5b040eSPengcheng Wang;
47647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_lt_zero:
47657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
47667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a0, 0(a0)
47677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a1, 0(a1)
47687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a0, a0
47697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a1, a1
47709122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a0, a0, 32
47717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a1, a1, 32
47727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a0, a1
47737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
47747a5b040eSPengcheng Wang;
47757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_lt_zero:
47767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
47777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
47787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
47797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 4
47807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
47817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    srli a0, a0, 31
47827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
47837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
47847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
47857a5b040eSPengcheng Wang;
47867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_lt_zero:
47877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
47887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
47897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
47907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 4
47917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
47927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    slti a0, a0, 0
47937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
47947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
47957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
47965adb5c05SPengcheng Wangentry:
47975adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 4)
47985adb5c05SPengcheng Wang  %ret = icmp slt i32 %memcmp, 0
47995adb5c05SPengcheng Wang  ret i1 %ret
48005adb5c05SPengcheng Wang}
48015adb5c05SPengcheng Wang
48025adb5c05SPengcheng Wangdefine i1 @memcmp_gt_zero(ptr %s1, ptr %s2) nounwind optsize {
48037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_gt_zero:
48047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
48057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
48067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
48077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 4
48087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
48097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sgtz a0, a0
48107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
48117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
48127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
48135adb5c05SPengcheng Wang;
48147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_gt_zero:
48157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
48167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
48177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
48187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 4
48197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
48207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sgtz a0, a0
48217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
48227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
48237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
48247a5b040eSPengcheng Wang;
48257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_gt_zero:
48267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
48277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
48287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
48297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 4
48307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
48317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sgtz a0, a0
48327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
48337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
48347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
48357a5b040eSPengcheng Wang;
48367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_gt_zero:
48377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
48387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
48397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
48407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 4
48417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
48427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sgtz a0, a0
48437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
48447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
48457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
48467a5b040eSPengcheng Wang;
48477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_gt_zero:
48487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
48497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
48507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
48517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 4
48527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
48537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sgtz a0, a0
48547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
48557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
48567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
48577a5b040eSPengcheng Wang;
48587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_gt_zero:
48597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
48607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
48617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
48627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 4
48637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
48647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sgtz a0, a0
48657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
48667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
48677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
48687a5b040eSPengcheng Wang;
48697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_gt_zero:
48707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
48717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
48727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
48737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 4
48747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
48757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sgtz a0, a0
48767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
48777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
48787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
48797a5b040eSPengcheng Wang;
48807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_gt_zero:
48817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
48827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
48837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
48847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 4
48857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
48867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sgtz a0, a0
48877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
48887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
48897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
48907a5b040eSPengcheng Wang;
48917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_gt_zero:
48927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
48937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
48947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
48957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 4
48967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
48977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sgtz a0, a0
48987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
48997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
49007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
49017a5b040eSPengcheng Wang;
49027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_gt_zero:
49037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
49047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
49057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
49067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 4
49077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
49087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sgtz a0, a0
49097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
49107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
49117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
49127a5b040eSPengcheng Wang;
49137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_gt_zero:
49147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
49157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 0(a0)
49167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 0(a1)
49177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a0, a0
49187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a1, a1
49197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a1, a0
49207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
49217a5b040eSPengcheng Wang;
49227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_gt_zero:
49237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
49247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a0, 0(a0)
49257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a1, 0(a1)
49267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a0, a0
49277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a1, a1
49289122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a0, a0, 32
49297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a1, a1, 32
49307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a1, a0
49317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
49327a5b040eSPengcheng Wang;
49337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_gt_zero:
49347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
49357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 0(a0)
49367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 0(a1)
49377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a0, a0
49387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a1, a1
49397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a1, a0
49407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
49417a5b040eSPengcheng Wang;
49427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_gt_zero:
49437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
49447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a0, 0(a0)
49457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a1, 0(a1)
49467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a0, a0
49477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a1, a1
49489122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a0, a0, 32
49497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a1, a1, 32
49507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a1, a0
49517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
49527a5b040eSPengcheng Wang;
49537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_gt_zero:
49547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
49557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
49567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
49577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 4
49587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
49597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sgtz a0, a0
49607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
49617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
49627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
49637a5b040eSPengcheng Wang;
49647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_gt_zero:
49657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
49667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
49677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
49687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 4
49697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
49707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sgtz a0, a0
49717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
49727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
49737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
49745adb5c05SPengcheng Wangentry:
49755adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 4)
49765adb5c05SPengcheng Wang  %ret = icmp sgt i32 %memcmp, 0
49775adb5c05SPengcheng Wang  ret i1 %ret
49785adb5c05SPengcheng Wang}
49795adb5c05SPengcheng Wang;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
49805adb5c05SPengcheng Wang; CHECK-ALIGNED: {{.*}}
4981