xref: /llvm-project/llvm/test/CodeGen/RISCV/memcmp.ll (revision a4e47586b9c0566761b7fb704011da6ded823398)
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 {
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 {
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 {
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 {
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 {
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 {
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 {
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 {
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 {
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 {
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 {
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 {
13227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: bcmp_size_31:
13237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
13247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
13257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
13267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 31
13277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call bcmp
13287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
13297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
13307a5b040eSPengcheng Wang; CHECK-ALIGNED-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-RV32-ZBB-LABEL: bcmp_size_31:
13437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
13447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
13457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
13467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 31
13477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call bcmp
13487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
13497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
13507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
13517a5b040eSPengcheng Wang;
13527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_31:
13537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
13547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
13557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
13567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 31
13577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
13587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
13597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
13607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
13617a5b040eSPengcheng Wang;
13627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_31:
13637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
13647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
13657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
13667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 31
13677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call bcmp
13687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
13697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
13707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
13717a5b040eSPengcheng Wang;
13727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_31:
13737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
13747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
13757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
13767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 31
13777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
13787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
13797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
13807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
13817a5b040eSPengcheng Wang;
13827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_31:
13837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
13847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
13857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
13867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 31
13877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call bcmp
13887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
13897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
13907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
13917a5b040eSPengcheng Wang;
13927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_31:
13937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
13947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
13957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
13967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 31
13977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
13987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
13997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
14007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
14017a5b040eSPengcheng Wang;
14027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: bcmp_size_31:
14037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
14047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a2, 0(a0)
14057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a3, 4(a0)
14067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a4, 8(a0)
14077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a5, 12(a0)
14087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a6, 0(a1)
14097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a7, 4(a1)
14107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw t0, 8(a1)
14117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw t1, 12(a1)
14127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a2, a2, a6
14139122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a6, 16(a0)
14149122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw t2, 20(a0)
14159122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw t3, 24(a0)
14169122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a0, 27(a0)
14177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a3, a3, a7
14187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a4, a4, t0
14197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a5, a5, t1
14209122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a7, 16(a1)
14219122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw t0, 20(a1)
14229122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw t1, 24(a1)
14237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a1, 27(a1)
14249122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a6, a6, a7
14259122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a7, t2, t0
14269122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor t0, t3, t1
14277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a0, a0, a1
14287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    or a2, a2, a3
14297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    or a4, a4, a5
14307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    or a1, a6, a7
14317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    or a0, t0, a0
14327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    or a2, a2, a4
14337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    or a0, a1, a0
14347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    or a0, a2, a0
14357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    snez a0, a0
14367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
14377a5b040eSPengcheng Wang;
14387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: bcmp_size_31:
14397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
14407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a2, 0(a0)
14417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a3, 8(a0)
14427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a4, 16(a0)
14437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a0, 23(a0)
14447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a5, 0(a1)
14457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a6, 8(a1)
14467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a7, 16(a1)
14477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a1, 23(a1)
14487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a2, a2, a5
14497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a3, a3, a6
14507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a4, a4, a7
14517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a0, a0, a1
14527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a2, a2, a3
14537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a0, a4, a0
14547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a0, a2, a0
14557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    snez a0, a0
14567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
14577a5b040eSPengcheng Wang;
14587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: bcmp_size_31:
14597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
14607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 0(a0)
14617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 4(a0)
14627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a4, 8(a0)
14637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a5, 12(a0)
14647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a6, 0(a1)
14657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a7, 4(a1)
14667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw t0, 8(a1)
14677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw t1, 12(a1)
14687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a2, a2, a6
14699122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a6, 16(a0)
14709122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw t2, 20(a0)
14719122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw t3, 24(a0)
14729122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 27(a0)
14737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a3, a3, a7
14747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a4, a4, t0
14757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a5, a5, t1
14769122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a7, 16(a1)
14779122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw t0, 20(a1)
14789122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw t1, 24(a1)
14797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 27(a1)
14809122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a6, a6, a7
14819122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a7, t2, t0
14829122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor t0, t3, t1
14837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a0, a0, a1
14847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a2, a2, a3
14857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a4, a4, a5
14867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a1, a6, a7
14877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a0, t0, a0
14887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a2, a2, a4
14897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a0, a1, a0
14907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a0, a2, a0
14917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    snez a0, a0
14927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
14937a5b040eSPengcheng Wang;
14947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: bcmp_size_31:
14957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
14967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 0(a0)
14977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 8(a0)
14987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a4, 16(a0)
14997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a0, 23(a0)
15007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a5, 0(a1)
15017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a6, 8(a1)
15027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a7, 16(a1)
15037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a1, 23(a1)
15047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a2, a2, a5
15057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a3, a3, a6
15067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a4, a4, a7
15077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a0, a0, a1
15087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a2, a2, a3
15097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, a4, a0
15107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, a2, a0
15117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    snez a0, a0
15127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
15137a5b040eSPengcheng Wang;
15147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: bcmp_size_31:
15157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
15167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 0(a0)
15177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 4(a0)
15187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a4, 8(a0)
15197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a5, 12(a0)
15207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a6, 0(a1)
15217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a7, 4(a1)
15227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw t0, 8(a1)
15237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw t1, 12(a1)
15247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a2, a2, a6
15259122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a6, 16(a0)
15269122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw t2, 20(a0)
15279122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw t3, 24(a0)
15289122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 27(a0)
15297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a3, a3, a7
15307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a4, a4, t0
15317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a5, a5, t1
15329122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a7, 16(a1)
15339122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw t0, 20(a1)
15349122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw t1, 24(a1)
15357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 27(a1)
15369122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a6, a6, a7
15379122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a7, t2, t0
15389122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor t0, t3, t1
15397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a0, a0, a1
15407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    or a2, a2, a3
15417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    or a4, a4, a5
15427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    or a1, a6, a7
15437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    or a0, t0, a0
15447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    or a2, a2, a4
15457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    or a0, a1, a0
15467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    or a0, a2, a0
15477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    snez a0, a0
15487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
15497a5b040eSPengcheng Wang;
15507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: bcmp_size_31:
15517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
15527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 0(a0)
15537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 8(a0)
15547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a4, 16(a0)
15557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a0, 23(a0)
15567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a5, 0(a1)
15577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a6, 8(a1)
15587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a7, 16(a1)
15597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a1, 23(a1)
15607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a2, a2, a5
15617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a3, a3, a6
15627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a4, a4, a7
15637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a0, a0, a1
15647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a2, a2, a3
15657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a0, a4, a0
15667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a0, a2, a0
15677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    snez a0, a0
15687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
15697a5b040eSPengcheng Wang;
15707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: bcmp_size_31:
15717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
15727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a2, 0(a0)
15737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a3, 4(a0)
15747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a4, 8(a0)
15757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a5, 12(a0)
15767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a6, 0(a1)
15777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a7, 4(a1)
15787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw t0, 8(a1)
15797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw t1, 12(a1)
15807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a2, a2, a6
15819122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a6, 16(a0)
15829122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw t2, 20(a0)
15839122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw t3, 24(a0)
15849122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a0, 27(a0)
15857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a3, a3, a7
15867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a4, a4, t0
15877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a5, a5, t1
15889122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a7, 16(a1)
15899122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw t0, 20(a1)
15909122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw t1, 24(a1)
15917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a1, 27(a1)
15929122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a6, a6, a7
15939122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a7, t2, t0
15949122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor t0, t3, t1
15957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a0, a0, a1
15967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    or a2, a2, a3
15977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    or a4, a4, a5
15987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    or a1, a6, a7
15997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    or a0, t0, a0
16007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    or a2, a2, a4
16017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    or a0, a1, a0
16027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    or a0, a2, a0
16037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    snez a0, a0
16047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
16057a5b040eSPengcheng Wang;
16067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: bcmp_size_31:
16077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
16087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a2, 0(a0)
16097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a3, 8(a0)
16107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a4, 16(a0)
16117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a0, 23(a0)
16127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a5, 0(a1)
16137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a6, 8(a1)
16147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a7, 16(a1)
16157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a1, 23(a1)
16167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a2, a2, a5
16177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a3, a3, a6
16187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a4, a4, a7
16197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a0, a0, a1
16207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a2, a2, a3
16217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a0, a4, a0
16227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a0, a2, a0
16237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    snez a0, a0
16247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
16255adb5c05SPengcheng Wangentry:
16265adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 31)
16275adb5c05SPengcheng Wang  ret i32 %bcmp
16285adb5c05SPengcheng Wang}
16295adb5c05SPengcheng Wang
16305adb5c05SPengcheng Wangdefine i32 @bcmp_size_32(ptr %s1, ptr %s2) nounwind {
16317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: bcmp_size_32:
16327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
16337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
16347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
16357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 32
16367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call bcmp
16377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
16387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
16397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
16405adb5c05SPengcheng Wang;
16417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: bcmp_size_32:
16427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
16437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
16447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
16457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 32
16467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call bcmp
16477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
16487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
16497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
16507a5b040eSPengcheng Wang;
16517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_32:
16527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
16537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
16547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
16557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 32
16567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call bcmp
16577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
16587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
16597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
16607a5b040eSPengcheng Wang;
16617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_32:
16627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
16637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
16647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
16657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 32
16667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
16677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
16687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
16697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
16707a5b040eSPengcheng Wang;
16717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_32:
16727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
16737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
16747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
16757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 32
16767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call bcmp
16777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
16787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
16797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
16807a5b040eSPengcheng Wang;
16817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_32:
16827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
16837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
16847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
16857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 32
16867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
16877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
16887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
16897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
16907a5b040eSPengcheng Wang;
16917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_32:
16927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
16937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
16947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
16957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 32
16967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call bcmp
16977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
16987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
16997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
17007a5b040eSPengcheng Wang;
17017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_32:
17027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
17037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
17047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
17057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 32
17067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
17077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
17087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
17097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
17107a5b040eSPengcheng Wang;
17117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: bcmp_size_32:
17127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
17137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a2, 0(a0)
17147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a3, 4(a0)
17157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a4, 8(a0)
17167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a5, 12(a0)
17177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a6, 0(a1)
17187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a7, 4(a1)
17197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw t0, 8(a1)
17207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw t1, 12(a1)
17217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a2, a2, a6
17229122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a6, 16(a0)
17239122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw t2, 20(a0)
17249122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw t3, 24(a0)
17259122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a0, 28(a0)
17267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a3, a3, a7
17277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a4, a4, t0
17287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a5, a5, t1
17299122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a7, 16(a1)
17309122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw t0, 20(a1)
17319122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw t1, 24(a1)
17327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw a1, 28(a1)
17339122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a6, a6, a7
17349122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a7, t2, t0
17359122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor t0, t3, t1
17367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    xor a0, a0, a1
17377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    or a2, a2, a3
17387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    or a4, a4, a5
17397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    or a1, a6, a7
17407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    or a0, t0, a0
17417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    or a2, a2, a4
17427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    or a0, a1, a0
17437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    or a0, a2, a0
17447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    snez a0, a0
17457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
17467a5b040eSPengcheng Wang;
17477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: bcmp_size_32:
17487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
17497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a2, 0(a0)
17507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a3, 8(a0)
17517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a4, 16(a0)
17527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a0, 24(a0)
17537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a5, 0(a1)
17547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a6, 8(a1)
17557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a7, 16(a1)
17567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a1, 24(a1)
17577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a2, a2, a5
17587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a3, a3, a6
17597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a4, a4, a7
17607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a0, a0, a1
17617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a2, a2, a3
17627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a0, a4, a0
17637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a0, a2, a0
17647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    snez a0, a0
17657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
17667a5b040eSPengcheng Wang;
17677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: bcmp_size_32:
17687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
17697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 0(a0)
17707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 4(a0)
17717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a4, 8(a0)
17727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a5, 12(a0)
17737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a6, 0(a1)
17747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a7, 4(a1)
17757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw t0, 8(a1)
17767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw t1, 12(a1)
17777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a2, a2, a6
17789122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a6, 16(a0)
17799122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw t2, 20(a0)
17809122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw t3, 24(a0)
17819122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 28(a0)
17827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a3, a3, a7
17837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a4, a4, t0
17847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a5, a5, t1
17859122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a7, 16(a1)
17869122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw t0, 20(a1)
17879122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw t1, 24(a1)
17887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 28(a1)
17899122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a6, a6, a7
17909122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a7, t2, t0
17919122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor t0, t3, t1
17927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xor a0, a0, a1
17937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a2, a2, a3
17947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a4, a4, a5
17957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a1, a6, a7
17967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a0, t0, a0
17977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a2, a2, a4
17987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a0, a1, a0
17997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a0, a2, a0
18007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    snez a0, a0
18017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
18027a5b040eSPengcheng Wang;
18037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: bcmp_size_32:
18047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
18057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 0(a0)
18067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 8(a0)
18077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a4, 16(a0)
18087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a0, 24(a0)
18097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a5, 0(a1)
18107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a6, 8(a1)
18117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a7, 16(a1)
18127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a1, 24(a1)
18137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a2, a2, a5
18147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a3, a3, a6
18157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a4, a4, a7
18167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a0, a0, a1
18177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a2, a2, a3
18187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, a4, a0
18197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, a2, a0
18207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    snez a0, a0
18217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
18227a5b040eSPengcheng Wang;
18237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: bcmp_size_32:
18247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
18257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 0(a0)
18267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 4(a0)
18277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a4, 8(a0)
18287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a5, 12(a0)
18297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a6, 0(a1)
18307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a7, 4(a1)
18317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw t0, 8(a1)
18327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw t1, 12(a1)
18337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a2, a2, a6
18349122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a6, 16(a0)
18359122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw t2, 20(a0)
18369122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw t3, 24(a0)
18379122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 28(a0)
18387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a3, a3, a7
18397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a4, a4, t0
18407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a5, a5, t1
18419122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a7, 16(a1)
18429122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw t0, 20(a1)
18439122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw t1, 24(a1)
18447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 28(a1)
18459122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a6, a6, a7
18469122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a7, t2, t0
18479122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor t0, t3, t1
18487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xor a0, a0, a1
18497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    or a2, a2, a3
18507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    or a4, a4, a5
18517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    or a1, a6, a7
18527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    or a0, t0, a0
18537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    or a2, a2, a4
18547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    or a0, a1, a0
18557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    or a0, a2, a0
18567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    snez a0, a0
18577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
18587a5b040eSPengcheng Wang;
18597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: bcmp_size_32:
18607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
18617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 0(a0)
18627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 8(a0)
18637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a4, 16(a0)
18647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a0, 24(a0)
18657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a5, 0(a1)
18667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a6, 8(a1)
18677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a7, 16(a1)
18687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a1, 24(a1)
18697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a2, a2, a5
18707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a3, a3, a6
18717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a4, a4, a7
18727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a0, a0, a1
18737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a2, a2, a3
18747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a0, a4, a0
18757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a0, a2, a0
18767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    snez a0, a0
18777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
18787a5b040eSPengcheng Wang;
18797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: bcmp_size_32:
18807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
18817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a2, 0(a0)
18827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a3, 4(a0)
18837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a4, 8(a0)
18847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a5, 12(a0)
18857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a6, 0(a1)
18867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a7, 4(a1)
18877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw t0, 8(a1)
18887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw t1, 12(a1)
18897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a2, a2, a6
18909122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a6, 16(a0)
18919122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw t2, 20(a0)
18929122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw t3, 24(a0)
18939122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a0, 28(a0)
18947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a3, a3, a7
18957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a4, a4, t0
18967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a5, a5, t1
18979122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a7, 16(a1)
18989122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw t0, 20(a1)
18999122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw t1, 24(a1)
19007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw a1, 28(a1)
19019122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a6, a6, a7
19029122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a7, t2, t0
19039122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor t0, t3, t1
19047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    xor a0, a0, a1
19057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    or a2, a2, a3
19067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    or a4, a4, a5
19077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    or a1, a6, a7
19087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    or a0, t0, a0
19097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    or a2, a2, a4
19107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    or a0, a1, a0
19117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    or a0, a2, a0
19127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    snez a0, a0
19137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
19147a5b040eSPengcheng Wang;
19157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: bcmp_size_32:
19167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
19177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a2, 0(a0)
19187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a3, 8(a0)
19197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a4, 16(a0)
19207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a0, 24(a0)
19217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a5, 0(a1)
19227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a6, 8(a1)
19237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a7, 16(a1)
19247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a1, 24(a1)
19257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a2, a2, a5
19267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a3, a3, a6
19277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a4, a4, a7
19287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a0, a0, a1
19297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a2, a2, a3
19307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a0, a4, a0
19317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a0, a2, a0
19327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    snez a0, a0
19337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
19345adb5c05SPengcheng Wangentry:
19355adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 32)
19365adb5c05SPengcheng Wang  ret i32 %bcmp
19375adb5c05SPengcheng Wang}
19385adb5c05SPengcheng Wang
19395adb5c05SPengcheng Wangdefine i32 @bcmp_size_63(ptr %s1, ptr %s2) nounwind {
19405adb5c05SPengcheng Wang; CHECK-RV32-LABEL: bcmp_size_63:
19415adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
19425adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
19435adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
19445adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    li a2, 63
19455adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call bcmp
19465adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
19475adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
19485adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
19495adb5c05SPengcheng Wang;
19507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: bcmp_size_63:
19517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
19527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
19537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
19547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 63
19557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call bcmp
19567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
19577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
19587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
19597a5b040eSPengcheng Wang;
19607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_63:
19617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
19627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
19637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
19647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 63
19657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
19667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
19677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
19687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
19697a5b040eSPengcheng Wang;
19707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_63:
19717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
19727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
19737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
19747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 63
19757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
19767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
19777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
19787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
19797a5b040eSPengcheng Wang;
19807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_63:
19817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
19827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
19837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
19847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 63
19857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
19867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
19877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
19887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
19897a5b040eSPengcheng Wang;
19907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: bcmp_size_63:
19917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
19927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a2, 0(a0)
19937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a3, 8(a0)
19947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a4, 16(a0)
19957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a5, 24(a0)
19967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a6, 0(a1)
19977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a7, 8(a1)
19987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld t0, 16(a1)
19997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld t1, 24(a1)
20007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a2, a2, a6
20019122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a6, 32(a0)
20029122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld t2, 40(a0)
20039122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld t3, 48(a0)
20049122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a0, 55(a0)
20057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a3, a3, a7
20067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a4, a4, t0
20077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a5, a5, t1
20089122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a7, 32(a1)
20099122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld t0, 40(a1)
20109122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld t1, 48(a1)
20117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a1, 55(a1)
20129122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a6, a6, a7
20139122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a7, t2, t0
20149122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor t0, t3, t1
20157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a0, a0, a1
20167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a2, a2, a3
20177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a4, a4, a5
20187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a1, a6, a7
20197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a0, t0, a0
20207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a2, a2, a4
20217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a0, a1, a0
20227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a0, a2, a0
20237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    snez a0, a0
20247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
20257a5b040eSPengcheng Wang;
20267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: bcmp_size_63:
20277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
20287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 0(a0)
20297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 8(a0)
20307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a4, 16(a0)
20317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a5, 24(a0)
20327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a6, 0(a1)
20337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a7, 8(a1)
20347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld t0, 16(a1)
20357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld t1, 24(a1)
20367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a2, a2, a6
20379122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a6, 32(a0)
20389122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld t2, 40(a0)
20399122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld t3, 48(a0)
20409122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a0, 55(a0)
20417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a3, a3, a7
20427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a4, a4, t0
20437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a5, a5, t1
20449122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a7, 32(a1)
20459122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld t0, 40(a1)
20469122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld t1, 48(a1)
20477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a1, 55(a1)
20489122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a6, a6, a7
20499122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a7, t2, t0
20509122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor t0, t3, t1
20517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a0, a0, a1
20527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a2, a2, a3
20537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a4, a4, a5
20547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a1, a6, a7
20557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, t0, a0
20567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a2, a2, a4
20577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, a1, a0
20587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, a2, a0
20597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    snez a0, a0
20607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
20617a5b040eSPengcheng Wang;
20627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: bcmp_size_63:
20637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
20647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 0(a0)
20657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 8(a0)
20667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a4, 16(a0)
20677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a5, 24(a0)
20687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a6, 0(a1)
20697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a7, 8(a1)
20707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld t0, 16(a1)
20717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld t1, 24(a1)
20727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a2, a2, a6
20739122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a6, 32(a0)
20749122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld t2, 40(a0)
20759122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld t3, 48(a0)
20769122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a0, 55(a0)
20777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a3, a3, a7
20787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a4, a4, t0
20797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a5, a5, t1
20809122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a7, 32(a1)
20819122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld t0, 40(a1)
20829122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld t1, 48(a1)
20837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a1, 55(a1)
20849122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a6, a6, a7
20859122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a7, t2, t0
20869122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor t0, t3, t1
20877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a0, a0, a1
20887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a2, a2, a3
20897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a4, a4, a5
20907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a1, a6, a7
20917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a0, t0, a0
20927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a2, a2, a4
20937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a0, a1, a0
20947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a0, a2, a0
20957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    snez a0, a0
20967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
20977a5b040eSPengcheng Wang;
20987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: bcmp_size_63:
20997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
21007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a2, 0(a0)
21017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a3, 8(a0)
21027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a4, 16(a0)
21037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a5, 24(a0)
21047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a6, 0(a1)
21057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a7, 8(a1)
21067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld t0, 16(a1)
21077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld t1, 24(a1)
21087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a2, a2, a6
21099122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a6, 32(a0)
21109122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld t2, 40(a0)
21119122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld t3, 48(a0)
21129122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a0, 55(a0)
21137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a3, a3, a7
21147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a4, a4, t0
21157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a5, a5, t1
21169122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a7, 32(a1)
21179122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld t0, 40(a1)
21189122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld t1, 48(a1)
21197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a1, 55(a1)
21209122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a6, a6, a7
21219122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a7, t2, t0
21229122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor t0, t3, t1
21237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a0, a0, a1
21247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a2, a2, a3
21257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a4, a4, a5
21267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a1, a6, a7
21277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a0, t0, a0
21287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a2, a2, a4
21297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a0, a1, a0
21307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a0, a2, a0
21317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    snez a0, a0
21327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
21335adb5c05SPengcheng Wangentry:
21345adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 63)
21355adb5c05SPengcheng Wang  ret i32 %bcmp
21365adb5c05SPengcheng Wang}
21375adb5c05SPengcheng Wang
21385adb5c05SPengcheng Wangdefine i32 @bcmp_size_64(ptr %s1, ptr %s2) nounwind {
21395adb5c05SPengcheng Wang; CHECK-RV32-LABEL: bcmp_size_64:
21405adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
21415adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
21425adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
21435adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    li a2, 64
21445adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call bcmp
21455adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
21465adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
21475adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
21485adb5c05SPengcheng Wang;
21497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: bcmp_size_64:
21507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
21517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
21527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
21537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 64
21547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call bcmp
21557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
21567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
21577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
21587a5b040eSPengcheng Wang;
21597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_64:
21607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
21617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
21627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
21637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 64
21647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
21657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
21667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
21677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
21687a5b040eSPengcheng Wang;
21697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_64:
21707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
21717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
21727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
21737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 64
21747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
21757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
21767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
21777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
21787a5b040eSPengcheng Wang;
21797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_64:
21807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
21817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
21827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
21837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 64
21847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
21857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
21867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
21877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
21887a5b040eSPengcheng Wang;
21897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: bcmp_size_64:
21907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
21917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a2, 0(a0)
21927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a3, 8(a0)
21937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a4, 16(a0)
21947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a5, 24(a0)
21957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a6, 0(a1)
21967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a7, 8(a1)
21977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld t0, 16(a1)
21987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld t1, 24(a1)
21997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a2, a2, a6
22009122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a6, 32(a0)
22019122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld t2, 40(a0)
22029122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld t3, 48(a0)
22039122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a0, 56(a0)
22047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a3, a3, a7
22057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a4, a4, t0
22067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a5, a5, t1
22079122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a7, 32(a1)
22089122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld t0, 40(a1)
22099122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld t1, 48(a1)
22107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld a1, 56(a1)
22119122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a6, a6, a7
22129122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a7, t2, t0
22139122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor t0, t3, t1
22147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    xor a0, a0, a1
22157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a2, a2, a3
22167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a4, a4, a5
22177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a1, a6, a7
22187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a0, t0, a0
22197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a2, a2, a4
22207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a0, a1, a0
22217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    or a0, a2, a0
22227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    snez a0, a0
22237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
22247a5b040eSPengcheng Wang;
22257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: bcmp_size_64:
22267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
22277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 0(a0)
22287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 8(a0)
22297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a4, 16(a0)
22307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a5, 24(a0)
22317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a6, 0(a1)
22327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a7, 8(a1)
22337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld t0, 16(a1)
22347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld t1, 24(a1)
22357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a2, a2, a6
22369122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a6, 32(a0)
22379122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld t2, 40(a0)
22389122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld t3, 48(a0)
22399122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a0, 56(a0)
22407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a3, a3, a7
22417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a4, a4, t0
22427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a5, a5, t1
22439122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a7, 32(a1)
22449122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld t0, 40(a1)
22459122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld t1, 48(a1)
22467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a1, 56(a1)
22479122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a6, a6, a7
22489122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a7, t2, t0
22499122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor t0, t3, t1
22507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xor a0, a0, a1
22517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a2, a2, a3
22527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a4, a4, a5
22537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a1, a6, a7
22547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, t0, a0
22557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a2, a2, a4
22567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, a1, a0
22577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, a2, a0
22587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    snez a0, a0
22597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
22607a5b040eSPengcheng Wang;
22617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: bcmp_size_64:
22627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
22637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 0(a0)
22647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 8(a0)
22657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a4, 16(a0)
22667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a5, 24(a0)
22677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a6, 0(a1)
22687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a7, 8(a1)
22697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld t0, 16(a1)
22707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld t1, 24(a1)
22717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a2, a2, a6
22729122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a6, 32(a0)
22739122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld t2, 40(a0)
22749122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld t3, 48(a0)
22759122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a0, 56(a0)
22767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a3, a3, a7
22777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a4, a4, t0
22787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a5, a5, t1
22799122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a7, 32(a1)
22809122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld t0, 40(a1)
22819122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld t1, 48(a1)
22827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a1, 56(a1)
22839122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a6, a6, a7
22849122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a7, t2, t0
22859122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor t0, t3, t1
22867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xor a0, a0, a1
22877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a2, a2, a3
22887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a4, a4, a5
22897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a1, a6, a7
22907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a0, t0, a0
22917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a2, a2, a4
22927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a0, a1, a0
22937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a0, a2, a0
22947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    snez a0, a0
22957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
22967a5b040eSPengcheng Wang;
22977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: bcmp_size_64:
22987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
22997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a2, 0(a0)
23007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a3, 8(a0)
23017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a4, 16(a0)
23027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a5, 24(a0)
23037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a6, 0(a1)
23047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a7, 8(a1)
23057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld t0, 16(a1)
23067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld t1, 24(a1)
23077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a2, a2, a6
23089122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a6, 32(a0)
23099122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld t2, 40(a0)
23109122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld t3, 48(a0)
23119122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a0, 56(a0)
23127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a3, a3, a7
23137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a4, a4, t0
23147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a5, a5, t1
23159122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a7, 32(a1)
23169122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld t0, 40(a1)
23179122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld t1, 48(a1)
23187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld a1, 56(a1)
23199122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a6, a6, a7
23209122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a7, t2, t0
23219122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor t0, t3, t1
23227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    xor a0, a0, a1
23237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a2, a2, a3
23247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a4, a4, a5
23257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a1, a6, a7
23267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a0, t0, a0
23277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a2, a2, a4
23287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a0, a1, a0
23297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    or a0, a2, a0
23307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    snez a0, a0
23317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
23325adb5c05SPengcheng Wangentry:
23335adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 64)
23345adb5c05SPengcheng Wang  ret i32 %bcmp
23355adb5c05SPengcheng Wang}
23365adb5c05SPengcheng Wang
23375adb5c05SPengcheng Wangdefine i32 @bcmp_size_127(ptr %s1, ptr %s2) nounwind {
23385adb5c05SPengcheng Wang; CHECK-RV32-LABEL: bcmp_size_127:
23395adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
23405adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
23415adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
23425adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    li a2, 127
23435adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call bcmp
23445adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
23455adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
23465adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
23475adb5c05SPengcheng Wang;
23485adb5c05SPengcheng Wang; CHECK-RV64-LABEL: bcmp_size_127:
23495adb5c05SPengcheng Wang; CHECK-RV64:       # %bb.0: # %entry
23505adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, -16
23515adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
23525adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    li a2, 127
23535adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    call bcmp
23545adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
23555adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, 16
23565adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ret
23575adb5c05SPengcheng Wangentry:
23585adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 127)
23595adb5c05SPengcheng Wang  ret i32 %bcmp
23605adb5c05SPengcheng Wang}
23615adb5c05SPengcheng Wang
23625adb5c05SPengcheng Wangdefine i32 @bcmp_size_128(ptr %s1, ptr %s2) nounwind {
23635adb5c05SPengcheng Wang; CHECK-RV32-LABEL: bcmp_size_128:
23645adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
23655adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
23665adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
23675adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    li a2, 128
23685adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call bcmp
23695adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
23705adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
23715adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
23725adb5c05SPengcheng Wang;
23735adb5c05SPengcheng Wang; CHECK-RV64-LABEL: bcmp_size_128:
23745adb5c05SPengcheng Wang; CHECK-RV64:       # %bb.0: # %entry
23755adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, -16
23765adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
23775adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    li a2, 128
23785adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    call bcmp
23795adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
23805adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, 16
23815adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ret
23825adb5c05SPengcheng Wangentry:
23835adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 128)
23845adb5c05SPengcheng Wang  ret i32 %bcmp
23855adb5c05SPengcheng Wang}
23865adb5c05SPengcheng Wang
23875adb5c05SPengcheng Wangdefine i32 @bcmp_size_runtime(ptr %s1, ptr %s2, iXLen %len) nounwind {
23885adb5c05SPengcheng Wang; CHECK-RV32-LABEL: bcmp_size_runtime:
23895adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
23905adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
23915adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
23925adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call bcmp
23935adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
23945adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
23955adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
23965adb5c05SPengcheng Wang;
23975adb5c05SPengcheng Wang; CHECK-RV64-LABEL: bcmp_size_runtime:
23985adb5c05SPengcheng Wang; CHECK-RV64:       # %bb.0: # %entry
23995adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, -16
24005adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
24015adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    call bcmp
24025adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
24035adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, 16
24045adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ret
24055adb5c05SPengcheng Wangentry:
24065adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen %len)
24075adb5c05SPengcheng Wang  ret i32 %bcmp
24085adb5c05SPengcheng Wang}
24095adb5c05SPengcheng Wang
24105adb5c05SPengcheng Wangdefine i1 @bcmp_eq_zero(ptr %s1, ptr %s2) nounwind {
24117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: bcmp_eq_zero:
24127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
24137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
24147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
24157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 4
24167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call bcmp
24177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    seqz a0, a0
24187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
24197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
24207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
24215adb5c05SPengcheng Wang;
24227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: bcmp_eq_zero:
24237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
24247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
24257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
24267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 4
24277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call bcmp
24287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    seqz a0, a0
24297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
24307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
24317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
24327a5b040eSPengcheng Wang;
24337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_eq_zero:
24347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
24357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
24367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
24377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 4
24387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call bcmp
24397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    seqz a0, a0
24407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
24417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
24427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
24437a5b040eSPengcheng Wang;
24447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_eq_zero:
24457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
24467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
24477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
24487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 4
24497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
24507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    seqz a0, a0
24517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
24527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
24537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
24547a5b040eSPengcheng Wang;
24557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_eq_zero:
24567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
24577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
24587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
24597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 4
24607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call bcmp
24617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    seqz a0, a0
24627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
24637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
24647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
24657a5b040eSPengcheng Wang;
24667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_eq_zero:
24677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
24687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
24697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
24707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 4
24717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
24727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    seqz a0, a0
24737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
24747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
24757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
24767a5b040eSPengcheng Wang;
24777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: bcmp_eq_zero:
24787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
24797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
24807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
24817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 4
24827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call bcmp
24837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    seqz a0, a0
24847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
24857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
24867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
24877a5b040eSPengcheng Wang;
24887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_eq_zero:
24897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
24907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
24917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
24927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 4
24937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
24947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    seqz a0, a0
24957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
24967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
24977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
24987a5b040eSPengcheng Wang;
24997a5b040eSPengcheng Wang; CHECK-UNALIGNED-LABEL: bcmp_eq_zero:
25007a5b040eSPengcheng Wang; CHECK-UNALIGNED:       # %bb.0: # %entry
25017a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a0, 0(a0)
25027a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a1, 0(a1)
25037a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    xor a0, a0, a1
25047a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    seqz a0, a0
25057a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    ret
25065adb5c05SPengcheng Wangentry:
25075adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 4)
25085adb5c05SPengcheng Wang  %ret = icmp eq i32 %bcmp, 0
25095adb5c05SPengcheng Wang  ret i1 %ret
25105adb5c05SPengcheng Wang}
25115adb5c05SPengcheng Wang
25125adb5c05SPengcheng Wangdefine i1 @bcmp_lt_zero(ptr %s1, ptr %s2) nounwind {
25137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: bcmp_lt_zero:
25147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
25157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
25167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
25177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 4
25187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call bcmp
25197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    srli a0, a0, 31
25207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
25217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
25227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
25235adb5c05SPengcheng Wang;
25247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: bcmp_lt_zero:
25257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
25267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
25277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
25287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 4
25297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call bcmp
25307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    slti a0, a0, 0
25317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
25327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
25337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
25347a5b040eSPengcheng Wang;
25357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_lt_zero:
25367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
25377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
25387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
25397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 4
25407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call bcmp
25417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    srli a0, a0, 31
25427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
25437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
25447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
25457a5b040eSPengcheng Wang;
25467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_lt_zero:
25477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
25487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
25497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
25507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 4
25517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
25527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    slti a0, a0, 0
25537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
25547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
25557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
25567a5b040eSPengcheng Wang;
25577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_lt_zero:
25587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
25597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
25607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
25617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 4
25627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call bcmp
25637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    srli a0, a0, 31
25647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
25657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
25667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
25677a5b040eSPengcheng Wang;
25687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_lt_zero:
25697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
25707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
25717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
25727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 4
25737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
25747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    slti a0, a0, 0
25757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
25767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
25777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
25787a5b040eSPengcheng Wang;
25797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: bcmp_lt_zero:
25807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
25817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
25827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
25837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 4
25847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call bcmp
25857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    srli a0, a0, 31
25867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
25877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
25887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
25897a5b040eSPengcheng Wang;
25907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_lt_zero:
25917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
25927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
25937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
25947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 4
25957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
25967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    slti a0, a0, 0
25977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
25987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
25997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
26007a5b040eSPengcheng Wang;
26017a5b040eSPengcheng Wang; CHECK-UNALIGNED-LABEL: bcmp_lt_zero:
26027a5b040eSPengcheng Wang; CHECK-UNALIGNED:       # %bb.0: # %entry
26037a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    li a0, 0
26047a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    ret
26055adb5c05SPengcheng Wangentry:
26065adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 4)
26075adb5c05SPengcheng Wang  %ret = icmp slt i32 %bcmp, 0
26085adb5c05SPengcheng Wang  ret i1 %ret
26095adb5c05SPengcheng Wang}
26105adb5c05SPengcheng Wang
26115adb5c05SPengcheng Wangdefine i1 @bcmp_gt_zero(ptr %s1, ptr %s2) nounwind {
26127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: bcmp_gt_zero:
26137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
26147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
26157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
26167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 4
26177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call bcmp
26187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sgtz a0, a0
26197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
26207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
26217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
26225adb5c05SPengcheng Wang;
26237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: bcmp_gt_zero:
26247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
26257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
26267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
26277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 4
26287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call bcmp
26297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sgtz a0, a0
26307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
26317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
26327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
26337a5b040eSPengcheng Wang;
26347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_gt_zero:
26357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
26367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
26377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
26387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 4
26397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call bcmp
26407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sgtz a0, a0
26417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
26427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
26437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
26447a5b040eSPengcheng Wang;
26457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_gt_zero:
26467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
26477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
26487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
26497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 4
26507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
26517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sgtz a0, a0
26527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
26537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
26547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
26557a5b040eSPengcheng Wang;
26567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_gt_zero:
26577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
26587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
26597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
26607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 4
26617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call bcmp
26627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sgtz a0, a0
26637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
26647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
26657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
26667a5b040eSPengcheng Wang;
26677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_gt_zero:
26687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
26697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
26707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
26717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 4
26727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
26737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sgtz a0, a0
26747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
26757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
26767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
26777a5b040eSPengcheng Wang;
26787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: bcmp_gt_zero:
26797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
26807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
26817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
26827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 4
26837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call bcmp
26847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sgtz a0, a0
26857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
26867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
26877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
26887a5b040eSPengcheng Wang;
26897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: bcmp_gt_zero:
26907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
26917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
26927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
26937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 4
26947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
26957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sgtz a0, a0
26967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
26977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
26987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
26997a5b040eSPengcheng Wang;
27007a5b040eSPengcheng Wang; CHECK-UNALIGNED-LABEL: bcmp_gt_zero:
27017a5b040eSPengcheng Wang; CHECK-UNALIGNED:       # %bb.0: # %entry
27027a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a0, 0(a0)
27037a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a1, 0(a1)
27047a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    xor a0, a0, a1
27057a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    snez a0, a0
27067a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    ret
27075adb5c05SPengcheng Wangentry:
27085adb5c05SPengcheng Wang  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 4)
27095adb5c05SPengcheng Wang  %ret = icmp sgt i32 %bcmp, 0
27105adb5c05SPengcheng Wang  ret i1 %ret
27115adb5c05SPengcheng Wang}
27125adb5c05SPengcheng Wang
2713bad0f98bSCraig Topperdefine i1 @bcmp_le_zero(ptr %s1, ptr %s2) nounwind {
2714bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-LABEL: bcmp_le_zero:
2715bad0f98bSCraig Topper; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
2716bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
2717bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
2718bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    li a2, 4
2719bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    call bcmp
2720bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    slti a0, a0, 1
2721bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
2722bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
2723bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    ret
2724bad0f98bSCraig Topper;
2725bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-LABEL: bcmp_le_zero:
2726bad0f98bSCraig Topper; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
2727bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
2728bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
2729bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    li a2, 4
2730bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    call bcmp
2731bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    slti a0, a0, 1
2732bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
2733bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
2734bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    ret
2735bad0f98bSCraig Topper;
2736bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_le_zero:
2737bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
2738bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
2739bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
2740bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 4
2741bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    call bcmp
2742bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    slti a0, a0, 1
2743bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
2744bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
2745bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
2746bad0f98bSCraig Topper;
2747bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_le_zero:
2748bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
2749bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
2750bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
2751bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 4
2752bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
2753bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    slti a0, a0, 1
2754bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
2755bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
2756bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
2757bad0f98bSCraig Topper;
2758bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_le_zero:
2759bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
2760bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
2761bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
2762bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 4
2763bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call bcmp
2764bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    slti a0, a0, 1
2765bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
2766bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
2767bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
2768bad0f98bSCraig Topper;
2769bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_le_zero:
2770bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
2771bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
2772bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
2773bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 4
2774bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
2775bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    slti a0, a0, 1
2776bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
2777bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
2778bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
2779bad0f98bSCraig Topper;
2780bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-LABEL: bcmp_le_zero:
2781bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
2782bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
2783bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
2784bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 4
2785bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    call bcmp
2786bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    slti a0, a0, 1
2787bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
2788bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
2789bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    ret
2790bad0f98bSCraig Topper;
2791bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-LABEL: bcmp_le_zero:
2792bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
2793bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
2794bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
2795bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 4
2796bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
2797bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    slti a0, a0, 1
2798bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
2799bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
2800bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    ret
2801bad0f98bSCraig Topper;
2802bad0f98bSCraig Topper; CHECK-UNALIGNED-LABEL: bcmp_le_zero:
2803bad0f98bSCraig Topper; CHECK-UNALIGNED:       # %bb.0: # %entry
2804bad0f98bSCraig Topper; CHECK-UNALIGNED-NEXT:    lw a0, 0(a0)
2805bad0f98bSCraig Topper; CHECK-UNALIGNED-NEXT:    lw a1, 0(a1)
2806bad0f98bSCraig Topper; CHECK-UNALIGNED-NEXT:    xor a0, a0, a1
2807bad0f98bSCraig Topper; CHECK-UNALIGNED-NEXT:    snez a0, a0
2808bad0f98bSCraig Topper; CHECK-UNALIGNED-NEXT:    slti a0, a0, 1
2809bad0f98bSCraig Topper; CHECK-UNALIGNED-NEXT:    ret
2810bad0f98bSCraig Topperentry:
2811bad0f98bSCraig Topper  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 4)
2812bad0f98bSCraig Topper  %ret = icmp slt i32 %bcmp, 1
2813bad0f98bSCraig Topper  ret i1 %ret
2814bad0f98bSCraig Topper}
2815bad0f98bSCraig Topper
2816bad0f98bSCraig Topperdefine i1 @bcmp_ge_zero(ptr %s1, ptr %s2) nounwind {
2817bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-LABEL: bcmp_ge_zero:
2818bad0f98bSCraig Topper; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
2819bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
2820bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
2821bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    li a2, 4
2822bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    call bcmp
2823bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    slti a0, a0, 0
2824bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    xori a0, a0, 1
2825bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
2826bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
2827bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    ret
2828bad0f98bSCraig Topper;
2829bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-LABEL: bcmp_ge_zero:
2830bad0f98bSCraig Topper; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
2831bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
2832bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
2833bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    li a2, 4
2834bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    call bcmp
2835bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    slti a0, a0, 0
2836bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    xori a0, a0, 1
2837bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
2838bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
2839bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    ret
2840bad0f98bSCraig Topper;
2841bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_ge_zero:
2842bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
2843bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
2844bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
2845bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 4
2846bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    call bcmp
2847bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    slti a0, a0, 0
2848bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    xori a0, a0, 1
2849bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
2850bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
2851bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
2852bad0f98bSCraig Topper;
2853bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_ge_zero:
2854bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
2855bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
2856bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
2857bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 4
2858bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    call bcmp
2859bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    slti a0, a0, 0
2860bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    xori a0, a0, 1
2861bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
2862bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
2863bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
2864bad0f98bSCraig Topper;
2865bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_ge_zero:
2866bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
2867bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
2868bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
2869bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 4
2870bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call bcmp
2871bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    slti a0, a0, 0
2872bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    xori a0, a0, 1
2873bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
2874bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
2875bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
2876bad0f98bSCraig Topper;
2877bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_ge_zero:
2878bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
2879bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
2880bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
2881bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 4
2882bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call bcmp
2883bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    slti a0, a0, 0
2884bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    xori a0, a0, 1
2885bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
2886bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
2887bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
2888bad0f98bSCraig Topper;
2889bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-LABEL: bcmp_ge_zero:
2890bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
2891bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
2892bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
2893bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 4
2894bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    call bcmp
2895bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    slti a0, a0, 0
2896bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    xori a0, a0, 1
2897bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
2898bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
2899bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    ret
2900bad0f98bSCraig Topper;
2901bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-LABEL: bcmp_ge_zero:
2902bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
2903bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
2904bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
2905bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 4
2906bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    call bcmp
2907bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    slti a0, a0, 0
2908bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    xori a0, a0, 1
2909bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
2910bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
2911bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    ret
2912bad0f98bSCraig Topper;
2913bad0f98bSCraig Topper; CHECK-UNALIGNED-LABEL: bcmp_ge_zero:
2914bad0f98bSCraig Topper; CHECK-UNALIGNED:       # %bb.0: # %entry
2915bad0f98bSCraig Topper; CHECK-UNALIGNED-NEXT:    li a0, 1
2916bad0f98bSCraig Topper; CHECK-UNALIGNED-NEXT:    ret
2917bad0f98bSCraig Topperentry:
2918bad0f98bSCraig Topper  %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 4)
2919bad0f98bSCraig Topper  %ret = icmp sgt i32 %bcmp, -1
2920bad0f98bSCraig Topper  ret i1 %ret
2921bad0f98bSCraig Topper}
2922bad0f98bSCraig Topper
29235adb5c05SPengcheng Wangdefine i32 @memcmp_size_0(ptr %s1, ptr %s2) nounwind {
29245adb5c05SPengcheng Wang; CHECK-LABEL: memcmp_size_0:
29255adb5c05SPengcheng Wang; CHECK:       # %bb.0: # %entry
29265adb5c05SPengcheng Wang; CHECK-NEXT:    li a0, 0
29275adb5c05SPengcheng Wang; CHECK-NEXT:    ret
29285adb5c05SPengcheng Wangentry:
29295adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 0)
29305adb5c05SPengcheng Wang  ret i32 %memcmp
29315adb5c05SPengcheng Wang}
29325adb5c05SPengcheng Wang
29335adb5c05SPengcheng Wangdefine i32 @memcmp_size_1(ptr %s1, ptr %s2) nounwind {
29347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_1:
29357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
29367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
29377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
29387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 1
29397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
29407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
29417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
29427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
29435adb5c05SPengcheng Wang;
29447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_1:
29457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
29467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
29477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
29487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 1
29497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
29507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
29517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
29527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
29537a5b040eSPengcheng Wang;
29547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_1:
29557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
29567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
29577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
29587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 1
29597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
29607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
29617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
29627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
29637a5b040eSPengcheng Wang;
29647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_1:
29657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
29667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
29677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
29687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 1
29697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
29707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
29717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
29727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
29737a5b040eSPengcheng Wang;
29747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_1:
29757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
29767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
29777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
29787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 1
29797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
29807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
29817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
29827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
29837a5b040eSPengcheng Wang;
29847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_1:
29857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
29867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
29877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
29887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 1
29897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
29907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
29917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
29927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
29937a5b040eSPengcheng Wang;
29947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_1:
29957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
29967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
29977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
29987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 1
29997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
30007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
30017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
30027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
30037a5b040eSPengcheng Wang;
30047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_1:
30057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
30067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
30077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
30087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 1
30097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
30107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
30117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
30127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
30137a5b040eSPengcheng Wang;
30147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_1:
30157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
30167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
30177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
30187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 1
30197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
30207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
30217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
30227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
30237a5b040eSPengcheng Wang;
30247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_1:
30257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
30267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
30277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
30287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 1
30297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
30307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
30317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
30327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
30337a5b040eSPengcheng Wang;
30347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_1:
30357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
30367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lbu a0, 0(a0)
30377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lbu a1, 0(a1)
30387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sub a0, a0, a1
30397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
30407a5b040eSPengcheng Wang;
30417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_1:
30427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
30437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lbu a0, 0(a0)
30447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lbu a1, 0(a1)
30457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sub a0, a0, a1
30467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
30477a5b040eSPengcheng Wang;
30487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_1:
30497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
30507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lbu a0, 0(a0)
30517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lbu a1, 0(a1)
30527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sub a0, a0, a1
30537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
30547a5b040eSPengcheng Wang;
30557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_1:
30567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
30577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lbu a0, 0(a0)
30587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lbu a1, 0(a1)
30597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sub a0, a0, a1
30607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
30617a5b040eSPengcheng Wang;
30627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_1:
30637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
30647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
30657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
30667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 1
30677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
30687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
30697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
30707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
30717a5b040eSPengcheng Wang;
30727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_1:
30737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
30747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
30757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
30767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 1
30777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
30787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
30797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
30807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
30815adb5c05SPengcheng Wangentry:
30825adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 1)
30835adb5c05SPengcheng Wang  ret i32 %memcmp
30845adb5c05SPengcheng Wang}
30855adb5c05SPengcheng Wang
30865adb5c05SPengcheng Wangdefine i32 @memcmp_size_2(ptr %s1, ptr %s2) nounwind {
30877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_2:
30887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
30897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
30907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
30917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 2
30927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
30937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
30947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
30957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
30965adb5c05SPengcheng Wang;
30977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_2:
30987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
30997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
31007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
31017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 2
31027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
31037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
31047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
31057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
31067a5b040eSPengcheng Wang;
31077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_2:
31087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
31097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
31107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
31117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 2
31127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
31137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
31147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
31157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
31167a5b040eSPengcheng Wang;
31177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_2:
31187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
31197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
31207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
31217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 2
31227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
31237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
31247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
31257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
31267a5b040eSPengcheng Wang;
31277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_2:
31287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
31297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
31307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
31317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 2
31327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
31337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
31347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
31357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
31367a5b040eSPengcheng Wang;
31377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_2:
31387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
31397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
31407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
31417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 2
31427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
31437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
31447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
31457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
31467a5b040eSPengcheng Wang;
31477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_2:
31487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
31497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
31507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
31517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 2
31527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
31537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
31547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
31557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
31567a5b040eSPengcheng Wang;
31577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_2:
31587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
31597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
31607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
31617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 2
31627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
31637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
31647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
31657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
31667a5b040eSPengcheng Wang;
31677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_2:
31687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
31697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
31707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
31717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 2
31727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
31737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
31747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
31757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
31767a5b040eSPengcheng Wang;
31777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_2:
31787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
31797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
31807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
31817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 2
31827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
31837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
31847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
31857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
31867a5b040eSPengcheng Wang;
31877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_2:
31887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
31897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lh a0, 0(a0)
31907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lh a1, 0(a1)
31917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a0, a0
31927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a1, a1
31939122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    srli a0, a0, 16
31947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    srli a1, a1, 16
31957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sub a0, a0, a1
31967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
31977a5b040eSPengcheng Wang;
31987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_2:
31997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
32007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lh a0, 0(a0)
32017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lh a1, 0(a1)
32027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a0, a0
32037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a1, a1
32049122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a0, a0, 48
32057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a1, a1, 48
32067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sub a0, a0, a1
32077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
32087a5b040eSPengcheng Wang;
32097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_2:
32107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
32117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lh a0, 0(a0)
32127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lh a1, 0(a1)
32137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a0, a0
32147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a1, a1
32159122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    srli a0, a0, 16
32167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    srli a1, a1, 16
32177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sub a0, a0, a1
32187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
32197a5b040eSPengcheng Wang;
32207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_2:
32217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
32227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lh a0, 0(a0)
32237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lh a1, 0(a1)
32247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a0, a0
32257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a1, a1
32269122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a0, a0, 48
32277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a1, a1, 48
32287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sub a0, a0, a1
32297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
32307a5b040eSPengcheng Wang;
32317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_2:
32327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
32337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
32347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
32357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 2
32367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
32377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
32387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
32397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
32407a5b040eSPengcheng Wang;
32417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_2:
32427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
32437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
32447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
32457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 2
32467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
32477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
32487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
32497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
32505adb5c05SPengcheng Wangentry:
32515adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 2)
32525adb5c05SPengcheng Wang  ret i32 %memcmp
32535adb5c05SPengcheng Wang}
32545adb5c05SPengcheng Wang
32555adb5c05SPengcheng Wangdefine i32 @memcmp_size_3(ptr %s1, ptr %s2) nounwind {
32567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_3:
32577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
32587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
32597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
32607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 3
32617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
32627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
32637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
32647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
32655adb5c05SPengcheng Wang;
32667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_3:
32677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
32687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
32697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
32707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 3
32717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
32727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
32737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
32747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
32757a5b040eSPengcheng Wang;
32767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_3:
32777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
32787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
32797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
32807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 3
32817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
32827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
32837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
32847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
32857a5b040eSPengcheng Wang;
32867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_3:
32877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
32887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
32897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
32907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 3
32917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
32927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
32937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
32947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
32957a5b040eSPengcheng Wang;
32967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_3:
32977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
32987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
32997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
33007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 3
33017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
33027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
33037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
33047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
33057a5b040eSPengcheng Wang;
33067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_3:
33077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
33087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
33097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
33107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 3
33117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
33127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
33137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
33147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
33157a5b040eSPengcheng Wang;
33167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_3:
33177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
33187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
33197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
33207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 3
33217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
33227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
33237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
33247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
33257a5b040eSPengcheng Wang;
33267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_3:
33277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
33287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
33297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
33307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 3
33317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
33327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
33337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
33347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
33357a5b040eSPengcheng Wang;
33367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_3:
33377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
33387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
33397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
33407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 3
33417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
33427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
33437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
33447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
33457a5b040eSPengcheng Wang;
33467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_3:
33477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
33487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
33497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
33507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 3
33517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
33527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
33537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
33547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
33557a5b040eSPengcheng Wang;
33567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_3:
33577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
335872db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lbu a2, 2(a0)
335972db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lhu a0, 0(a0)
336072db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lbu a3, 2(a1)
336172db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lhu a1, 0(a1)
336272db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    slli a2, a2, 16
336372db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a0, a0, a2
336472db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    slli a3, a3, 16
336572db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    or a1, a1, a3
336672db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a0, a0
336772db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a1, a1
336813cf5c9cSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a2, a0, a1
336913cf5c9cSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a1, a0
337013cf5c9cSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sub a0, a0, a2
33717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
33727a5b040eSPengcheng Wang;
33737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_3:
33747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
337572db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lbu a2, 2(a0)
337672db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lhu a0, 0(a0)
337772db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lbu a3, 2(a1)
337872db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lhu a1, 0(a1)
337972db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    slli a2, a2, 16
338072db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, a0, a2
338172db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    slli a3, a3, 16
338272db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a1, a1, a3
338372db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a0, a0
338472db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a1, a1
338572db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a0, a0, 32
338672db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a1, a1, 32
338713cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a2, a0, a1
338813cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a1, a0
338913cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sub a0, a0, a2
33907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
33917a5b040eSPengcheng Wang;
33927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_3:
33937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
339472db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lhu a2, 0(a0)
33957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lbu a0, 2(a0)
339672db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lhu a3, 0(a1)
33977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lbu a1, 2(a1)
339872db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    pack a0, a2, a0
339972db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    pack a1, a3, a1
340072db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a0, a0
340172db3f98SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a1, a1
340213cf5c9cSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a2, a0, a1
340313cf5c9cSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a1, a0
340413cf5c9cSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sub a0, a0, a2
34057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
34067a5b040eSPengcheng Wang;
34077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_3:
34087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
340972db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lbu a2, 2(a0)
341072db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lhu a0, 0(a0)
341172db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lbu a3, 2(a1)
341272db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lhu a1, 0(a1)
341372db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    slli a2, a2, 16
341472db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a0, a0, a2
341572db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    slli a3, a3, 16
341672db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    or a1, a1, a3
341772db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a0, a0
341872db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a1, a1
341972db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a0, a0, 32
342072db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a1, a1, 32
342113cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a2, a0, a1
342213cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a1, a0
342313cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sub a0, a0, a2
34247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
34257a5b040eSPengcheng Wang;
34267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_3:
34277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
34287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
34297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
34307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 3
34317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
34327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
34337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
34347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
34357a5b040eSPengcheng Wang;
34367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_3:
34377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
34387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
34397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
34407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 3
34417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
34427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
34437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
34447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
34455adb5c05SPengcheng Wangentry:
34465adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 3)
34475adb5c05SPengcheng Wang  ret i32 %memcmp
34485adb5c05SPengcheng Wang}
34495adb5c05SPengcheng Wang
34505adb5c05SPengcheng Wangdefine i32 @memcmp_size_4(ptr %s1, ptr %s2) nounwind {
34517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_4:
34527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
34537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
34547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
34557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 4
34567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
34577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
34587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
34597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
34605adb5c05SPengcheng Wang;
34617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_4:
34627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
34637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
34647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
34657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 4
34667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
34677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
34687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
34697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
34707a5b040eSPengcheng Wang;
34717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_4:
34727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
34737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
34747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
34757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 4
34767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
34777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
34787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
34797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
34807a5b040eSPengcheng Wang;
34817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_4:
34827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
34837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
34847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
34857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 4
34867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
34877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
34887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
34897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
34907a5b040eSPengcheng Wang;
34917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_4:
34927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
34937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
34947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
34957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 4
34967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
34977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
34987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
34997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
35007a5b040eSPengcheng Wang;
35017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_4:
35027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
35037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
35047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
35057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 4
35067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
35077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
35087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
35097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
35107a5b040eSPengcheng Wang;
35117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_4:
35127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
35137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
35147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
35157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 4
35167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
35177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
35187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
35197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
35207a5b040eSPengcheng Wang;
35217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_4:
35227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
35237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
35247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
35257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 4
35267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
35277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
35287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
35297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
35307a5b040eSPengcheng Wang;
35317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_4:
35327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
35337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
35347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
35357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 4
35367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
35377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
35387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
35397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
35407a5b040eSPengcheng Wang;
35417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_4:
35427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
35437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
35447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
35457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 4
35467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
35477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
35487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
35497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
35507a5b040eSPengcheng Wang;
35517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_4:
35527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
35537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 0(a0)
35547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 0(a1)
35557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a0, a0
35567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a1, a1
35574dfea22eSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a2, a0, a1
35584dfea22eSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a1, a0
35594dfea22eSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sub a0, a0, a2
35607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
35617a5b040eSPengcheng Wang;
35627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_4:
35637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
35647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a0, 0(a0)
35657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a1, 0(a1)
35667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a0, a0
35677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a1, a1
35689122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a0, a0, 32
35697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a1, a1, 32
35704dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a2, a0, a1
35714dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a1, a0
35724dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sub a0, a0, a2
35737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
35747a5b040eSPengcheng Wang;
35757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_4:
35767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
35777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 0(a0)
35787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 0(a1)
35797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a0, a0
35807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a1, a1
35814dfea22eSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a2, a0, a1
35824dfea22eSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a1, a0
35834dfea22eSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sub a0, a0, a2
35847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
35857a5b040eSPengcheng Wang;
35867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_4:
35877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
35887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a0, 0(a0)
35897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a1, 0(a1)
35907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a0, a0
35917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a1, a1
35929122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a0, a0, 32
35937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a1, a1, 32
35944dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a2, a0, a1
35954dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a1, a0
35964dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sub a0, a0, a2
35977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
35987a5b040eSPengcheng Wang;
35997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_4:
36007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
36017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
36027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
36037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 4
36047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
36057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
36067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
36077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
36087a5b040eSPengcheng Wang;
36097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_4:
36107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
36117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
36127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
36137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 4
36147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
36157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
36167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
36177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
36185adb5c05SPengcheng Wangentry:
36195adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 4)
36205adb5c05SPengcheng Wang  ret i32 %memcmp
36215adb5c05SPengcheng Wang}
36225adb5c05SPengcheng Wang
36235adb5c05SPengcheng Wangdefine i32 @memcmp_size_5(ptr %s1, ptr %s2) nounwind {
36247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_5:
36257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
36267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
36277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
36287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 5
36297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
36307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
36317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
36327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
36335adb5c05SPengcheng Wang;
36347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_5:
36357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
36367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
36377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
36387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 5
36397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
36407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
36417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
36427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
36437a5b040eSPengcheng Wang;
36447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_5:
36457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
36467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
36477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
36487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 5
36497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
36507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
36517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
36527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
36537a5b040eSPengcheng Wang;
36547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_5:
36557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
36567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
36577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
36587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 5
36597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
36607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
36617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
36627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
36637a5b040eSPengcheng Wang;
36647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_5:
36657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
36667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
36677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
36687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 5
36697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
36707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
36717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
36727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
36737a5b040eSPengcheng Wang;
36747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_5:
36757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
36767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
36777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
36787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 5
36797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
36807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
36817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
36827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
36837a5b040eSPengcheng Wang;
36847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_5:
36857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
36867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
36877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
36887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 5
36897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
36907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
36917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
36927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
36937a5b040eSPengcheng Wang;
36947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_5:
36957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
36967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
36977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
36987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 5
36997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
37007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
37017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
37027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
37037a5b040eSPengcheng Wang;
37047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_5:
37057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
37067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
37077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
37087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 5
37097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
37107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
37117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
37127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
37137a5b040eSPengcheng Wang;
37147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_5:
37157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
37167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
37177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
37187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 5
37197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
37207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
37217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
37227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
37237a5b040eSPengcheng Wang;
37247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_5:
37257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
37267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 0(a0)
37277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 0(a1)
37287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
37297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
3730bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB28_2
37317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.1: # %loadbb1
37327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lbu a0, 4(a0)
37337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lbu a1, 4(a1)
37347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sub a0, a0, a1
37357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
3736bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:  .LBB28_2: # %res_block
37377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a2, a3
37387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    neg a0, a0
37397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ori a0, a0, 1
37407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
37417a5b040eSPengcheng Wang;
37427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_5:
37437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
374472db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lbu a2, 4(a0)
374572db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lwu a0, 0(a0)
374672db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lbu a3, 4(a1)
374772db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lwu a1, 0(a1)
374872db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    slli a2, a2, 32
374972db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, a0, a2
375072db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    slli a3, a3, 32
375172db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a1, a1, a3
375272db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a0, a0
375372db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a1, a1
375413cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a2, a0, a1
375513cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a1, a0
375613cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sub a0, a0, a2
37577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
37587a5b040eSPengcheng Wang;
37597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_5:
37607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
37617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 0(a0)
37627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 0(a1)
37637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
37647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
3765bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB28_2
37667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.1: # %loadbb1
37677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lbu a0, 4(a0)
37687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lbu a1, 4(a1)
37697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sub a0, a0, a1
37707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
3771bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  .LBB28_2: # %res_block
37727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a2, a3
37737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    neg a0, a0
37747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ori a0, a0, 1
37757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
37767a5b040eSPengcheng Wang;
37777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_5:
37787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
377972db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lwu a2, 0(a0)
37807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lbu a0, 4(a0)
378172db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lwu a3, 0(a1)
37827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lbu a1, 4(a1)
378372db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    pack a0, a2, a0
378472db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    pack a1, a3, a1
378572db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a0, a0
378672db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a1, a1
378713cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a2, a0, a1
378813cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a1, a0
378913cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sub a0, a0, a2
37907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
37917a5b040eSPengcheng Wang;
37927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_5:
37937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
37947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
37957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
37967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 5
37977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
37987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
37997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
38007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
38017a5b040eSPengcheng Wang;
38027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_5:
38037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
38047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
38057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
38067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 5
38077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
38087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
38097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
38107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
38115adb5c05SPengcheng Wangentry:
38125adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 5)
38135adb5c05SPengcheng Wang  ret i32 %memcmp
38145adb5c05SPengcheng Wang}
38155adb5c05SPengcheng Wang
38165adb5c05SPengcheng Wangdefine i32 @memcmp_size_6(ptr %s1, ptr %s2) nounwind {
38177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_6:
38187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
38197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
38207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
38217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 6
38227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
38237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
38247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
38257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
38265adb5c05SPengcheng Wang;
38277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_6:
38287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
38297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
38307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
38317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 6
38327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
38337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
38347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
38357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
38367a5b040eSPengcheng Wang;
38377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_6:
38387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
38397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
38407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
38417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 6
38427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
38437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
38447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
38457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
38467a5b040eSPengcheng Wang;
38477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_6:
38487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
38497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
38507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
38517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 6
38527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
38537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
38547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
38557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
38567a5b040eSPengcheng Wang;
38577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_6:
38587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
38597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
38607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
38617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 6
38627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
38637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
38647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
38657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
38667a5b040eSPengcheng Wang;
38677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_6:
38687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
38697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
38707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
38717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 6
38727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
38737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
38747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
38757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
38767a5b040eSPengcheng Wang;
38777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_6:
38787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
38797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
38807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
38817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 6
38827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
38837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
38847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
38857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
38867a5b040eSPengcheng Wang;
38877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_6:
38887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
38897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
38907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
38917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 6
38927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
38937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
38947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
38957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
38967a5b040eSPengcheng Wang;
38977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_6:
38987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
38997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
39007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
39017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 6
39027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
39037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
39047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
39057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
39067a5b040eSPengcheng Wang;
39077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_6:
39087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
39097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
39107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
39117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 6
39127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
39137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
39147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
39157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
39167a5b040eSPengcheng Wang;
39177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_6:
39187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
39197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 0(a0)
39207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 0(a1)
39217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
39227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
3923bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB29_3
39247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.1: # %loadbb1
39257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lh a0, 4(a0)
39267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lh a1, 4(a1)
39277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a0
39287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a1
39299122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    srli a2, a2, 16
39307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    srli a3, a3, 16
3931bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB29_3
39327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.2:
39337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    li a0, 0
39347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
3935bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:  .LBB29_3: # %res_block
39367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a2, a3
39377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    neg a0, a0
39387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ori a0, a0, 1
39397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
39407a5b040eSPengcheng Wang;
39417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_6:
39427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
394372db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lhu a2, 4(a0)
394472db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lwu a0, 0(a0)
394572db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lhu a3, 4(a1)
394672db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lwu a1, 0(a1)
394772db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    slli a2, a2, 32
394872db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a0, a0, a2
394972db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    slli a3, a3, 32
395072db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    or a1, a1, a3
395172db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a0, a0
395272db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a1, a1
395313cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a2, a0, a1
395413cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a1, a0
395513cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sub a0, a0, a2
39567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
39577a5b040eSPengcheng Wang;
39587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_6:
39597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
39607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 0(a0)
39617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 0(a1)
39627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
39637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
3964bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB29_3
39657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.1: # %loadbb1
39667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lh a0, 4(a0)
39677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lh a1, 4(a1)
39687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a0
39697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a1
39709122c523SPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    srli a2, a2, 16
39717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    srli a3, a3, 16
3972bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB29_3
39737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.2:
39747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    li a0, 0
39757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
3976bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  .LBB29_3: # %res_block
39777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a2, a3
39787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    neg a0, a0
39797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ori a0, a0, 1
39807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
39817a5b040eSPengcheng Wang;
39827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_6:
39837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
398472db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lwu a2, 0(a0)
398572db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lhu a0, 4(a0)
398672db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lwu a3, 0(a1)
398772db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lhu a1, 4(a1)
398872db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    pack a0, a2, a0
398972db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    pack a1, a3, a1
399072db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a0, a0
399172db3f98SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a1, a1
399213cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a2, a0, a1
399313cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a1, a0
399413cf5c9cSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sub a0, a0, a2
39957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
39967a5b040eSPengcheng Wang;
39977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_6:
39987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
39997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
40007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
40017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 6
40027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
40037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
40047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
40057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
40067a5b040eSPengcheng Wang;
40077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_6:
40087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
40097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
40107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
40117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 6
40127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
40137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
40147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
40157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
40165adb5c05SPengcheng Wangentry:
40175adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 6)
40185adb5c05SPengcheng Wang  ret i32 %memcmp
40195adb5c05SPengcheng Wang}
40205adb5c05SPengcheng Wang
40215adb5c05SPengcheng Wangdefine i32 @memcmp_size_7(ptr %s1, ptr %s2) nounwind {
40227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_7:
40237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
40247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
40257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
40267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 7
40277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
40287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
40297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
40307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
40315adb5c05SPengcheng Wang;
40327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_7:
40337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
40347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
40357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
40367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 7
40377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
40387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
40397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
40407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
40417a5b040eSPengcheng Wang;
40427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_7:
40437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
40447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
40457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
40467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 7
40477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
40487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
40497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
40507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
40517a5b040eSPengcheng Wang;
40527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_7:
40537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
40547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
40557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
40567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 7
40577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
40587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
40597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
40607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
40617a5b040eSPengcheng Wang;
40627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_7:
40637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
40647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
40657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
40667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 7
40677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
40687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
40697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
40707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
40717a5b040eSPengcheng Wang;
40727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_7:
40737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
40747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
40757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
40767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 7
40777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
40787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
40797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
40807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
40817a5b040eSPengcheng Wang;
40827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_7:
40837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
40847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
40857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
40867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 7
40877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
40887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
40897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
40907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
40917a5b040eSPengcheng Wang;
40927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_7:
40937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
40947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
40957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
40967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 7
40977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
40987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
40997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
41007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
41017a5b040eSPengcheng Wang;
41027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_7:
41037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
41047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
41057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
41067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 7
41077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
41087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
41097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
41107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
41117a5b040eSPengcheng Wang;
41127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_7:
41137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
41147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
41157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
41167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 7
41177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
41187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
41197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
41207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
41217a5b040eSPengcheng Wang;
41227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_7:
41237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
41247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 0(a0)
41257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 0(a1)
41267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
41277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
4128bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB30_3
41297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.1: # %loadbb1
41307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 3(a0)
41317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 3(a1)
41327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a0
41337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a1
4134bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB30_3
41357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.2:
41367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    li a0, 0
41377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
4138bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:  .LBB30_3: # %res_block
41397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a2, a3
41407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    neg a0, a0
41417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ori a0, a0, 1
41427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
41437a5b040eSPengcheng Wang;
41447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_7:
41457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
41467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a2, 0(a0)
41477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a3, 0(a1)
41487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
41497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
41509122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a2, a2, 32
41517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a3, a3, 32
4152bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB30_3
41537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.1: # %loadbb1
41547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a0, 3(a0)
41557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a1, 3(a1)
41567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a0
41577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a1
41589122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a2, a2, 32
41597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a3, a3, 32
4160bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB30_3
41617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.2:
41627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    li a0, 0
41637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
4164bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:  .LBB30_3: # %res_block
41657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a2, a3
41667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    neg a0, a0
41677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ori a0, a0, 1
41687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
41697a5b040eSPengcheng Wang;
41707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_7:
41717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
41727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 0(a0)
41737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 0(a1)
41747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
41757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
4176bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB30_3
41777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.1: # %loadbb1
41787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 3(a0)
41797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 3(a1)
41807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a0
41817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a1
4182bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB30_3
41837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.2:
41847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    li a0, 0
41857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
4186bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  .LBB30_3: # %res_block
41877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a2, a3
41887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    neg a0, a0
41897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ori a0, a0, 1
41907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
41917a5b040eSPengcheng Wang;
41927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_7:
41937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
41947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a2, 0(a0)
41957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a3, 0(a1)
41967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
41977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
41989122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a2, a2, 32
41997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a3, a3, 32
4200bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB30_3
42017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.1: # %loadbb1
42027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a0, 3(a0)
42037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a1, 3(a1)
42047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a0
42057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a1
42069122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a2, a2, 32
42077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a3, a3, 32
4208bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB30_3
42097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.2:
42107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    li a0, 0
42117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
4212bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  .LBB30_3: # %res_block
42137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a2, a3
42147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    neg a0, a0
42157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ori a0, a0, 1
42167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
42177a5b040eSPengcheng Wang;
42187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_7:
42197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
42207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
42217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
42227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 7
42237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
42247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
42257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
42267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
42277a5b040eSPengcheng Wang;
42287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_7:
42297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
42307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
42317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
42327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 7
42337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
42347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
42357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
42367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
42375adb5c05SPengcheng Wangentry:
42385adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 7)
42395adb5c05SPengcheng Wang  ret i32 %memcmp
42405adb5c05SPengcheng Wang}
42415adb5c05SPengcheng Wang
42425adb5c05SPengcheng Wangdefine i32 @memcmp_size_8(ptr %s1, ptr %s2) nounwind {
42437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_8:
42447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
42457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
42467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
42477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 8
42487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
42497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
42507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
42517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
42525adb5c05SPengcheng Wang;
42537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_8:
42547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
42557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
42567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
42577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 8
42587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
42597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
42607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
42617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
42627a5b040eSPengcheng Wang;
42637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_8:
42647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
42657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
42667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
42677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 8
42687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
42697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
42707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
42717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
42727a5b040eSPengcheng Wang;
42737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_8:
42747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
42757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
42767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
42777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 8
42787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
42797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
42807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
42817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
42827a5b040eSPengcheng Wang;
42837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_8:
42847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
42857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
42867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
42877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 8
42887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
42897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
42907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
42917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
42927a5b040eSPengcheng Wang;
42937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_8:
42947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
42957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
42967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
42977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 8
42987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
42997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
43007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
43017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
43027a5b040eSPengcheng Wang;
43037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_8:
43047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
43057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
43067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
43077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 8
43087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
43097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
43107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
43117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
43127a5b040eSPengcheng Wang;
43137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_8:
43147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
43157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
43167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
43177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 8
43187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
43197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
43207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
43217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
43227a5b040eSPengcheng Wang;
43237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_8:
43247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
43257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
43267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
43277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 8
43287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
43297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
43307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
43317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
43327a5b040eSPengcheng Wang;
43337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_8:
43347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
43357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
43367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
43377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 8
43387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
43397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
43407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
43417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
43427a5b040eSPengcheng Wang;
43437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_8:
43447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
43457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 0(a0)
43467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 0(a1)
43477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
43487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
4349bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB31_3
43507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.1: # %loadbb1
43517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 4(a0)
43527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 4(a1)
43537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a0
43547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a1
4355bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB31_3
43567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.2:
43577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    li a0, 0
43587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
4359bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:  .LBB31_3: # %res_block
43607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a2, a3
43617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    neg a0, a0
43627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ori a0, a0, 1
43637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
43647a5b040eSPengcheng Wang;
43657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_8:
43667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
43677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a0, 0(a0)
43687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a1, 0(a1)
43697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a0, a0
43707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a1, a1
43714dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a2, a0, a1
43724dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a1, a0
43734dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sub a0, a0, a2
43747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
43757a5b040eSPengcheng Wang;
43767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_8:
43777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
43787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 0(a0)
43797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 0(a1)
43807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
43817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
4382bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB31_3
43837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.1: # %loadbb1
43847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 4(a0)
43857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 4(a1)
43867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a0
43877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a1
4388bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB31_3
43897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.2:
43907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    li a0, 0
43917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
4392bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  .LBB31_3: # %res_block
43937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a2, a3
43947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    neg a0, a0
43957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ori a0, a0, 1
43967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
43977a5b040eSPengcheng Wang;
43987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_8:
43997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
44007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a0, 0(a0)
44017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a1, 0(a1)
44027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a0, a0
44037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a1, a1
44044dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a2, a0, a1
44054dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a1, a0
44064dfea22eSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sub a0, a0, a2
44077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
44087a5b040eSPengcheng Wang;
44097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_8:
44107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
44117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
44127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
44137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 8
44147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
44157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
44167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
44177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
44187a5b040eSPengcheng Wang;
44197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_8:
44207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
44217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
44227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
44237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 8
44247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
44257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
44267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
44277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
44285adb5c05SPengcheng Wangentry:
44295adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 8)
44305adb5c05SPengcheng Wang  ret i32 %memcmp
44315adb5c05SPengcheng Wang}
44325adb5c05SPengcheng Wang
44335adb5c05SPengcheng Wangdefine i32 @memcmp_size_15(ptr %s1, ptr %s2) nounwind {
44347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_15:
44357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
44367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
44377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
44387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 15
44397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
44407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
44417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
44427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
44435adb5c05SPengcheng Wang;
44447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_15:
44457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
44467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
44477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
44487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 15
44497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
44507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
44517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
44527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
44537a5b040eSPengcheng Wang;
44547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_15:
44557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
44567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
44577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
44587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 15
44597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
44607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
44617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
44627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
44637a5b040eSPengcheng Wang;
44647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_15:
44657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
44667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
44677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
44687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 15
44697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
44707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
44717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
44727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
44737a5b040eSPengcheng Wang;
44747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_15:
44757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
44767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
44777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
44787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 15
44797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
44807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
44817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
44827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
44837a5b040eSPengcheng Wang;
44847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_15:
44857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
44867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
44877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
44887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 15
44897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
44907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
44917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
44927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
44937a5b040eSPengcheng Wang;
44947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_15:
44957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
44967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
44977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
44987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 15
44997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
45007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
45017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
45027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
45037a5b040eSPengcheng Wang;
45047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_15:
45057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
45067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
45077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
45087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 15
45097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
45107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
45117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
45127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
45137a5b040eSPengcheng Wang;
45147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_15:
45157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
45167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
45177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
45187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 15
45197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
45207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
45217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
45227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
45237a5b040eSPengcheng Wang;
45247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_15:
45257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
45267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
45277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
45287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 15
45297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
45307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
45317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
45327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
45337a5b040eSPengcheng Wang;
45347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_15:
45357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
45367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 0(a0)
45377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 0(a1)
45387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
45397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
4540bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB32_5
45417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.1: # %loadbb1
45427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 4(a0)
45437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 4(a1)
45447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
45457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
4546bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB32_5
45477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.2: # %loadbb2
45487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 8(a0)
45497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 8(a1)
45507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
45517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
4552bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB32_5
45537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.3: # %loadbb3
45547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 11(a0)
45557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 11(a1)
45567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a0
45577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a1
4558bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB32_5
45597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.4:
45607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    li a0, 0
45617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
4562bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:  .LBB32_5: # %res_block
45637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a2, a3
45647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    neg a0, a0
45657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ori a0, a0, 1
45667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
45677a5b040eSPengcheng Wang;
45687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_15:
45697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
45707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 0(a0)
45717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 0(a1)
45727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
45737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
4574bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB32_3
45757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.1: # %loadbb1
45767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a0, 7(a0)
45777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a1, 7(a1)
45787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a0
45797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a1
4580bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB32_3
45817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.2:
45827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    li a0, 0
45837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
4584bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:  .LBB32_3: # %res_block
45857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a2, a3
45867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    neg a0, a0
45877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ori a0, a0, 1
45887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
45897a5b040eSPengcheng Wang;
45907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_15:
45917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
45927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 0(a0)
45937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 0(a1)
45947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
45957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
4596bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB32_5
45977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.1: # %loadbb1
45987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 4(a0)
45997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 4(a1)
46007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
46017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
4602bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB32_5
46037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.2: # %loadbb2
46047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 8(a0)
46057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 8(a1)
46067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
46077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
4608bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB32_5
46097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.3: # %loadbb3
46107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 11(a0)
46117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 11(a1)
46127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a0
46137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a1
4614bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB32_5
46157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.4:
46167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    li a0, 0
46177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
4618bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  .LBB32_5: # %res_block
46197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a2, a3
46207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    neg a0, a0
46217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ori a0, a0, 1
46227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
46237a5b040eSPengcheng Wang;
46247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_15:
46257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
46267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 0(a0)
46277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 0(a1)
46287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
46297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
4630bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB32_3
46317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.1: # %loadbb1
46327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a0, 7(a0)
46337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a1, 7(a1)
46347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a0
46357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a1
4636bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB32_3
46377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.2:
46387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    li a0, 0
46397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
4640bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  .LBB32_3: # %res_block
46417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a2, a3
46427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    neg a0, a0
46437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ori a0, a0, 1
46447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
46457a5b040eSPengcheng Wang;
46467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_15:
46477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
46487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
46497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
46507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 15
46517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
46527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
46537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
46547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
46557a5b040eSPengcheng Wang;
46567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_15:
46577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
46587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
46597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
46607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 15
46617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
46627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
46637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
46647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
46655adb5c05SPengcheng Wangentry:
46665adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 15)
46675adb5c05SPengcheng Wang  ret i32 %memcmp
46685adb5c05SPengcheng Wang}
46695adb5c05SPengcheng Wang
46705adb5c05SPengcheng Wangdefine i32 @memcmp_size_16(ptr %s1, ptr %s2) nounwind {
46717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_16:
46727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
46737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
46747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
46757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 16
46767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
46777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
46787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
46797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
46805adb5c05SPengcheng Wang;
46817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_16:
46827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
46837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
46847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
46857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 16
46867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
46877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
46887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
46897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
46907a5b040eSPengcheng Wang;
46917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_16:
46927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
46937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
46947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
46957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 16
46967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
46977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
46987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
46997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
47007a5b040eSPengcheng Wang;
47017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_16:
47027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
47037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
47047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
47057a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 16
47067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
47077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
47087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
47097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
47107a5b040eSPengcheng Wang;
47117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_16:
47127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
47137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
47147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
47157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 16
47167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
47177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
47187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
47197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
47207a5b040eSPengcheng Wang;
47217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_16:
47227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
47237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
47247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
47257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 16
47267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
47277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
47287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
47297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
47307a5b040eSPengcheng Wang;
47317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_16:
47327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
47337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
47347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
47357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 16
47367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
47377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
47387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
47397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
47407a5b040eSPengcheng Wang;
47417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_16:
47427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
47437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
47447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
47457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 16
47467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
47477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
47487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
47497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
47507a5b040eSPengcheng Wang;
47517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_16:
47527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
47537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
47547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
47557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 16
47567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
47577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
47587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
47597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
47607a5b040eSPengcheng Wang;
47617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_16:
47627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
47637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
47647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
47657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 16
47667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
47677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
47687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
47697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
47707a5b040eSPengcheng Wang;
47717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_16:
47727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
47737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 0(a0)
47747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 0(a1)
47757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
47767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
4777bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB33_5
47787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.1: # %loadbb1
47797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 4(a0)
47807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 4(a1)
47817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
47827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
4783bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB33_5
47847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.2: # %loadbb2
47857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 8(a0)
47867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 8(a1)
47877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
47887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
4789bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB33_5
47907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.3: # %loadbb3
47917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 12(a0)
47927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 12(a1)
47937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a0
47947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a1
4795bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB33_5
47967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.4:
47977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    li a0, 0
47987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
4799bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:  .LBB33_5: # %res_block
48007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a2, a3
48017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    neg a0, a0
48027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ori a0, a0, 1
48037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
48047a5b040eSPengcheng Wang;
48057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_16:
48067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
48077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 0(a0)
48087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 0(a1)
48097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
48107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
4811bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB33_3
48127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.1: # %loadbb1
48137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a0, 8(a0)
48147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a1, 8(a1)
48157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a0
48167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a1
4817bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB33_3
48187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.2:
48197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    li a0, 0
48207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
4821bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:  .LBB33_3: # %res_block
48227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a2, a3
48237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    neg a0, a0
48247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ori a0, a0, 1
48257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
48267a5b040eSPengcheng Wang;
48277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_16:
48287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
48297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 0(a0)
48307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 0(a1)
48317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
48327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
4833bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB33_5
48347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.1: # %loadbb1
48357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 4(a0)
48367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 4(a1)
48377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
48387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
4839bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB33_5
48407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.2: # %loadbb2
48417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 8(a0)
48427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 8(a1)
48437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
48447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
4845bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB33_5
48467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.3: # %loadbb3
48477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 12(a0)
48487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 12(a1)
48497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a0
48507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a1
4851bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB33_5
48527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.4:
48537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    li a0, 0
48547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
4855bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  .LBB33_5: # %res_block
48567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a2, a3
48577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    neg a0, a0
48587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ori a0, a0, 1
48597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
48607a5b040eSPengcheng Wang;
48617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_16:
48627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
48637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 0(a0)
48647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 0(a1)
48657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
48667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
4867bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB33_3
48687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.1: # %loadbb1
48697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a0, 8(a0)
48707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a1, 8(a1)
48717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a0
48727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a1
4873bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB33_3
48747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.2:
48757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    li a0, 0
48767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
4877bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  .LBB33_3: # %res_block
48787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a2, a3
48797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    neg a0, a0
48807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ori a0, a0, 1
48817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
48827a5b040eSPengcheng Wang;
48837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_16:
48847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
48857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
48867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
48877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 16
48887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
48897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
48907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
48917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
48927a5b040eSPengcheng Wang;
48937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_16:
48947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
48957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
48967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
48977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 16
48987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
48997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
49007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
49017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
49025adb5c05SPengcheng Wangentry:
49035adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 16)
49045adb5c05SPengcheng Wang  ret i32 %memcmp
49055adb5c05SPengcheng Wang}
49065adb5c05SPengcheng Wang
49075adb5c05SPengcheng Wangdefine i32 @memcmp_size_31(ptr %s1, ptr %s2) nounwind {
49087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_31:
49097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
49107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
49117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
49127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 31
49137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
49147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
49157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
49167a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
49175adb5c05SPengcheng Wang;
49187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_31:
49197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
49207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
49217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
49227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 31
49237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
49247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
49257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
49267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
49277a5b040eSPengcheng Wang;
49287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_31:
49297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
49307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
49317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
49327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 31
49337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
49347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
49357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
49367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
49377a5b040eSPengcheng Wang;
49387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_31:
49397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
49407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
49417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
49427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 31
49437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
49447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
49457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
49467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
49477a5b040eSPengcheng Wang;
49487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_31:
49497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
49507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
49517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
49527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 31
49537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
49547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
49557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
49567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
49577a5b040eSPengcheng Wang;
49587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_31:
49597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
49607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
49617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
49627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 31
49637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
49647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
49657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
49667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
49677a5b040eSPengcheng Wang;
49687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_31:
49697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
49707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
49717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
49727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 31
49737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
49747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
49757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
49767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
49777a5b040eSPengcheng Wang;
49787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_31:
49797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
49807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
49817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
49827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 31
49837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
49847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
49857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
49867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
49877a5b040eSPengcheng Wang;
49887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_31:
49897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
49907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
49917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
49927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 31
49937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
49947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
49957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
49967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
49977a5b040eSPengcheng Wang;
49987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_31:
49997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
50007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
50017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
50027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 31
50037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
50047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
50057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
50067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
50077a5b040eSPengcheng Wang;
50087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_31:
50097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
50107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 0(a0)
50117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 0(a1)
50127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
50137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
5014bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB34_9
50157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.1: # %loadbb1
50167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 4(a0)
50177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 4(a1)
50187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
50197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
5020bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB34_9
50217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.2: # %loadbb2
50227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 8(a0)
50237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 8(a1)
50247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
50257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
5026bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB34_9
50277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.3: # %loadbb3
50287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 12(a0)
50297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 12(a1)
50307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
50317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
5032bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB34_9
50337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.4: # %loadbb4
50347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 16(a0)
50357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 16(a1)
50367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
50377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
5038bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB34_9
50397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.5: # %loadbb5
50407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 20(a0)
50417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 20(a1)
50427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
50437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
5044bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB34_9
50457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.6: # %loadbb6
50467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 24(a0)
50477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 24(a1)
50487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
50497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
5050bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB34_9
50517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.7: # %loadbb7
50527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 27(a0)
50537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 27(a1)
50547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a0
50557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a1
5056bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB34_9
50577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.8:
50587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    li a0, 0
50597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
5060bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:  .LBB34_9: # %res_block
50617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a2, a3
50627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    neg a0, a0
50637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ori a0, a0, 1
50647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
50657a5b040eSPengcheng Wang;
50667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_31:
50677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
50687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 0(a0)
50697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 0(a1)
50707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
50717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
5072bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB34_5
50737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.1: # %loadbb1
50747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 8(a0)
50757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 8(a1)
50767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
50777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
5078bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB34_5
50797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.2: # %loadbb2
50807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 16(a0)
50817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 16(a1)
50827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
50837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
5084bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB34_5
50857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.3: # %loadbb3
50867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a0, 23(a0)
50877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a1, 23(a1)
50887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a0
50897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a1
5090bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB34_5
50917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.4:
50927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    li a0, 0
50937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
5094bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:  .LBB34_5: # %res_block
50957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a2, a3
50967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    neg a0, a0
50977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ori a0, a0, 1
50987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
50997a5b040eSPengcheng Wang;
51007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_31:
51017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
51027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 0(a0)
51037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 0(a1)
51047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
51057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
5106bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB34_9
51077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.1: # %loadbb1
51087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 4(a0)
51097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 4(a1)
51107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
51117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
5112bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB34_9
51137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.2: # %loadbb2
51147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 8(a0)
51157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 8(a1)
51167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
51177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
5118bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB34_9
51197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.3: # %loadbb3
51207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 12(a0)
51217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 12(a1)
51227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
51237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
5124bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB34_9
51257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.4: # %loadbb4
51267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 16(a0)
51277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 16(a1)
51287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
51297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
5130bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB34_9
51317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.5: # %loadbb5
51327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 20(a0)
51337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 20(a1)
51347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
51357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
5136bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB34_9
51377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.6: # %loadbb6
51387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 24(a0)
51397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 24(a1)
51407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
51417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
5142bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB34_9
51437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.7: # %loadbb7
51447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 27(a0)
51457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 27(a1)
51467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a0
51477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a1
5148bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB34_9
51497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.8:
51507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    li a0, 0
51517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
5152bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  .LBB34_9: # %res_block
51537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a2, a3
51547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    neg a0, a0
51557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ori a0, a0, 1
51567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
51577a5b040eSPengcheng Wang;
51587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_31:
51597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
51607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 0(a0)
51617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 0(a1)
51627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
51637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
5164bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB34_5
51657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.1: # %loadbb1
51667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 8(a0)
51677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 8(a1)
51687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
51697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
5170bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB34_5
51717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.2: # %loadbb2
51727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 16(a0)
51737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 16(a1)
51747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
51757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
5176bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB34_5
51777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.3: # %loadbb3
51787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a0, 23(a0)
51797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a1, 23(a1)
51807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a0
51817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a1
5182bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB34_5
51837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.4:
51847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    li a0, 0
51857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
5186bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  .LBB34_5: # %res_block
51877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a2, a3
51887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    neg a0, a0
51897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ori a0, a0, 1
51907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
51917a5b040eSPengcheng Wang;
51927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_31:
51937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
51947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
51957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
51967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 31
51977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
51987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
51997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
52007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
52017a5b040eSPengcheng Wang;
52027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_31:
52037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
52047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
52057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
52067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 31
52077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
52087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
52097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
52107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
52115adb5c05SPengcheng Wangentry:
52125adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 31)
52135adb5c05SPengcheng Wang  ret i32 %memcmp
52145adb5c05SPengcheng Wang}
52155adb5c05SPengcheng Wang
52165adb5c05SPengcheng Wangdefine i32 @memcmp_size_32(ptr %s1, ptr %s2) nounwind {
52177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_size_32:
52187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
52197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
52207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
52217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 32
52227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
52237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
52247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
52257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
52265adb5c05SPengcheng Wang;
52277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_32:
52287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
52297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
52307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
52317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 32
52327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
52337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
52347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
52357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
52367a5b040eSPengcheng Wang;
52377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_32:
52387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
52397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
52407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
52417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 32
52427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
52437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
52447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
52457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
52467a5b040eSPengcheng Wang;
52477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_32:
52487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
52497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
52507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
52517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 32
52527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
52537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
52547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
52557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
52567a5b040eSPengcheng Wang;
52577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_32:
52587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
52597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
52607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
52617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 32
52627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
52637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
52647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
52657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
52667a5b040eSPengcheng Wang;
52677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_32:
52687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
52697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
52707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
52717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 32
52727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
52737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
52747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
52757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
52767a5b040eSPengcheng Wang;
52777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_32:
52787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
52797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
52807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
52817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 32
52827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
52837a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
52847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
52857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
52867a5b040eSPengcheng Wang;
52877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_32:
52887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
52897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
52907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
52917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 32
52927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
52937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
52947a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
52957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
52967a5b040eSPengcheng Wang;
52977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_32:
52987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
52997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
53007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
53017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 32
53027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
53037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
53047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
53057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
53067a5b040eSPengcheng Wang;
53077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_32:
53087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
53097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
53107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
53117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 32
53127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
53137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
53147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
53157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
53167a5b040eSPengcheng Wang;
53177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_32:
53187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
53197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 0(a0)
53207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 0(a1)
53217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
53227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
5323bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB35_9
53247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.1: # %loadbb1
53257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 4(a0)
53267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 4(a1)
53277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
53287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
5329bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB35_9
53307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.2: # %loadbb2
53317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 8(a0)
53327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 8(a1)
53337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
53347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
5335bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB35_9
53367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.3: # %loadbb3
53377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 12(a0)
53387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 12(a1)
53397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
53407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
5341bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB35_9
53427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.4: # %loadbb4
53437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 16(a0)
53447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 16(a1)
53457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
53467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
5347bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB35_9
53487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.5: # %loadbb5
53497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 20(a0)
53507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 20(a1)
53517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
53527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
5353bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB35_9
53547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.6: # %loadbb6
53557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a2, 24(a0)
53567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a3, 24(a1)
53577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a2
53587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a3
5359bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB35_9
53607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.7: # %loadbb7
53617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 28(a0)
53627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 28(a1)
53637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a2, a0
53647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a3, a1
5365bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    bne a2, a3, .LBB35_9
53667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:  # %bb.8:
53677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    li a0, 0
53687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
5369bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:  .LBB35_9: # %res_block
53707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a2, a3
53717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    neg a0, a0
53727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ori a0, a0, 1
53737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
53747a5b040eSPengcheng Wang;
53757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_32:
53767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
53777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 0(a0)
53787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 0(a1)
53797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
53807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
5381bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB35_5
53827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.1: # %loadbb1
53837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 8(a0)
53847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 8(a1)
53857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
53867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
5387bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB35_5
53887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.2: # %loadbb2
53897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 16(a0)
53907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 16(a1)
53917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
53927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
5393bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB35_5
53947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.3: # %loadbb3
53957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a0, 24(a0)
53967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a1, 24(a1)
53977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a0
53987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a1
5399bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB35_5
54007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.4:
54017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    li a0, 0
54027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
5403bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:  .LBB35_5: # %res_block
54047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a2, a3
54057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    neg a0, a0
54067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ori a0, a0, 1
54077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
54087a5b040eSPengcheng Wang;
54097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_32:
54107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
54117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 0(a0)
54127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 0(a1)
54137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
54147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
5415bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB35_9
54167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.1: # %loadbb1
54177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 4(a0)
54187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 4(a1)
54197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
54207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
5421bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB35_9
54227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.2: # %loadbb2
54237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 8(a0)
54247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 8(a1)
54257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
54267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
5427bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB35_9
54287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.3: # %loadbb3
54297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 12(a0)
54307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 12(a1)
54317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
54327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
5433bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB35_9
54347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.4: # %loadbb4
54357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 16(a0)
54367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 16(a1)
54377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
54387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
5439bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB35_9
54407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.5: # %loadbb5
54417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 20(a0)
54427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 20(a1)
54437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
54447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
5445bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB35_9
54467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.6: # %loadbb6
54477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a2, 24(a0)
54487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a3, 24(a1)
54497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a2
54507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a3
5451bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB35_9
54527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.7: # %loadbb7
54537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 28(a0)
54547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 28(a1)
54557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a2, a0
54567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a3, a1
5457bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    bne a2, a3, .LBB35_9
54587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  # %bb.8:
54597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    li a0, 0
54607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
5461bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:  .LBB35_9: # %res_block
54627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a2, a3
54637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    neg a0, a0
54647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ori a0, a0, 1
54657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
54667a5b040eSPengcheng Wang;
54677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_32:
54687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
54697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 0(a0)
54707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 0(a1)
54717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
54727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
5473bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB35_5
54747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.1: # %loadbb1
54757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 8(a0)
54767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 8(a1)
54777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
54787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
5479bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB35_5
54807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.2: # %loadbb2
54817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 16(a0)
54827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 16(a1)
54837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
54847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
5485bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB35_5
54867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.3: # %loadbb3
54877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a0, 24(a0)
54887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a1, 24(a1)
54897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a0
54907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a1
5491bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB35_5
54927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.4:
54937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    li a0, 0
54947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
5495bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  .LBB35_5: # %res_block
54967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a2, a3
54977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    neg a0, a0
54987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ori a0, a0, 1
54997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
55007a5b040eSPengcheng Wang;
55017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_32:
55027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
55037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
55047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
55057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 32
55067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
55077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
55087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
55097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
55107a5b040eSPengcheng Wang;
55117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_32:
55127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
55137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
55147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
55157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 32
55167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
55177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
55187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
55197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
55205adb5c05SPengcheng Wangentry:
55215adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 32)
55225adb5c05SPengcheng Wang  ret i32 %memcmp
55235adb5c05SPengcheng Wang}
55245adb5c05SPengcheng Wang
55255adb5c05SPengcheng Wangdefine i32 @memcmp_size_63(ptr %s1, ptr %s2) nounwind {
55265adb5c05SPengcheng Wang; CHECK-RV32-LABEL: memcmp_size_63:
55275adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
55285adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
55295adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
55305adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    li a2, 63
55315adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call memcmp
55325adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
55335adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
55345adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
55355adb5c05SPengcheng Wang;
55367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_63:
55377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
55387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
55397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
55407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 63
55417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
55427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
55437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
55447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
55457a5b040eSPengcheng Wang;
55467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_63:
55477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
55487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
55497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
55507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 63
55517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
55527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
55537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
55547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
55557a5b040eSPengcheng Wang;
55567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_63:
55577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
55587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
55597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
55607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 63
55617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
55627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
55637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
55647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
55657a5b040eSPengcheng Wang;
55667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_63:
55677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
55687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
55697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
55707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 63
55717a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
55727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
55737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
55747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
55757a5b040eSPengcheng Wang;
55767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_63:
55777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
55787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
55797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
55807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 63
55817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
55827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
55837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
55847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
55857a5b040eSPengcheng Wang;
55867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_63:
55877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
55887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 0(a0)
55897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 0(a1)
55907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
55917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
5592bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB36_9
55937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.1: # %loadbb1
55947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 8(a0)
55957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 8(a1)
55967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
55977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
5598bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB36_9
55997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.2: # %loadbb2
56007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 16(a0)
56017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 16(a1)
56027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
56037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
5604bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB36_9
56057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.3: # %loadbb3
56067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 24(a0)
56077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 24(a1)
56087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
56097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
5610bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB36_9
56117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.4: # %loadbb4
56127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 32(a0)
56137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 32(a1)
56147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
56157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
5616bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB36_9
56177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.5: # %loadbb5
56187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 40(a0)
56197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 40(a1)
56207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
56217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
5622bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB36_9
56237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.6: # %loadbb6
56247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 48(a0)
56257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 48(a1)
56267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
56277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
5628bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB36_9
56297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.7: # %loadbb7
56307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a0, 55(a0)
56317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a1, 55(a1)
56327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a0
56337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a1
5634bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB36_9
56357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.8:
56367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    li a0, 0
56377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
5638bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:  .LBB36_9: # %res_block
56397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a2, a3
56407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    neg a0, a0
56417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ori a0, a0, 1
56427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
56437a5b040eSPengcheng Wang;
56447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_63:
56457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
56467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 0(a0)
56477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 0(a1)
56487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
56497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
5650bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB36_9
56517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.1: # %loadbb1
56527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 8(a0)
56537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 8(a1)
56547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
56557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
5656bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB36_9
56577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.2: # %loadbb2
56587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 16(a0)
56597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 16(a1)
56607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
56617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
5662bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB36_9
56637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.3: # %loadbb3
56647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 24(a0)
56657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 24(a1)
56667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
56677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
5668bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB36_9
56697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.4: # %loadbb4
56707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 32(a0)
56717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 32(a1)
56727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
56737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
5674bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB36_9
56757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.5: # %loadbb5
56767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 40(a0)
56777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 40(a1)
56787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
56797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
5680bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB36_9
56817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.6: # %loadbb6
56827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 48(a0)
56837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 48(a1)
56847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
56857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
5686bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB36_9
56877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.7: # %loadbb7
56887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a0, 55(a0)
56897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a1, 55(a1)
56907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a0
56917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a1
5692bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB36_9
56937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.8:
56947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    li a0, 0
56957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
5696bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  .LBB36_9: # %res_block
56977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a2, a3
56987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    neg a0, a0
56997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ori a0, a0, 1
57007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
57017a5b040eSPengcheng Wang;
57027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_63:
57037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
57047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
57057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
57067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 63
57077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
57087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
57097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
57107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
57115adb5c05SPengcheng Wangentry:
57125adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 63)
57135adb5c05SPengcheng Wang  ret i32 %memcmp
57145adb5c05SPengcheng Wang}
57155adb5c05SPengcheng Wang
57165adb5c05SPengcheng Wangdefine i32 @memcmp_size_64(ptr %s1, ptr %s2) nounwind {
57175adb5c05SPengcheng Wang; CHECK-RV32-LABEL: memcmp_size_64:
57185adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
57195adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
57205adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
57215adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    li a2, 64
57225adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call memcmp
57235adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
57245adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
57255adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
57265adb5c05SPengcheng Wang;
57277a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_size_64:
57287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
57297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
57307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
57317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 64
57327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
57337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
57347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
57357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
57367a5b040eSPengcheng Wang;
57377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_64:
57387a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
57397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
57407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
57417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 64
57427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
57437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
57447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
57457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
57467a5b040eSPengcheng Wang;
57477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_64:
57487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
57497a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
57507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
57517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 64
57527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
57537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
57547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
57557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
57567a5b040eSPengcheng Wang;
57577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_64:
57587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
57597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
57607a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
57617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 64
57627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
57637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
57647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
57657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
57667a5b040eSPengcheng Wang;
57677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_64:
57687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
57697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
57707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
57717a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 64
57727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
57737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
57747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
57757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
57767a5b040eSPengcheng Wang;
57777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_64:
57787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
57797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 0(a0)
57807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 0(a1)
57817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
57827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
5783bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB37_9
57847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.1: # %loadbb1
57857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 8(a0)
57867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 8(a1)
57877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
57887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
5789bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB37_9
57907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.2: # %loadbb2
57917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 16(a0)
57927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 16(a1)
57937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
57947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
5795bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB37_9
57967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.3: # %loadbb3
57977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 24(a0)
57987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 24(a1)
57997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
58007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
5801bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB37_9
58027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.4: # %loadbb4
58037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 32(a0)
58047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 32(a1)
58057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
58067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
5807bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB37_9
58087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.5: # %loadbb5
58097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 40(a0)
58107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 40(a1)
58117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
58127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
5813bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB37_9
58147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.6: # %loadbb6
58157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a2, 48(a0)
58167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a3, 48(a1)
58177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a2
58187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a3
5819bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB37_9
58207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.7: # %loadbb7
58217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a0, 56(a0)
58227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ld a1, 56(a1)
58237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a2, a0
58247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a3, a1
5825bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    bne a2, a3, .LBB37_9
58267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:  # %bb.8:
58277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    li a0, 0
58287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
5829bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:  .LBB37_9: # %res_block
58307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a2, a3
58317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    neg a0, a0
58327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ori a0, a0, 1
58337a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
58347a5b040eSPengcheng Wang;
58357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_64:
58367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
58377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 0(a0)
58387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 0(a1)
58397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
58407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
5841bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB37_9
58427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.1: # %loadbb1
58437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 8(a0)
58447a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 8(a1)
58457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
58467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
5847bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB37_9
58487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.2: # %loadbb2
58497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 16(a0)
58507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 16(a1)
58517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
58527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
5853bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB37_9
58547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.3: # %loadbb3
58557a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 24(a0)
58567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 24(a1)
58577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
58587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
5859bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB37_9
58607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.4: # %loadbb4
58617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 32(a0)
58627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 32(a1)
58637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
58647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
5865bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB37_9
58667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.5: # %loadbb5
58677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 40(a0)
58687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 40(a1)
58697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
58707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
5871bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB37_9
58727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.6: # %loadbb6
58737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a2, 48(a0)
58747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a3, 48(a1)
58757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a2
58767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a3
5877bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB37_9
58787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.7: # %loadbb7
58797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a0, 56(a0)
58807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ld a1, 56(a1)
58817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a2, a0
58827a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a3, a1
5883bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    bne a2, a3, .LBB37_9
58847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  # %bb.8:
58857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    li a0, 0
58867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
5887bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:  .LBB37_9: # %res_block
58887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a2, a3
58897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    neg a0, a0
58907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ori a0, a0, 1
58917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
58927a5b040eSPengcheng Wang;
58937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_64:
58947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
58957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
58967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
58977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 64
58987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
58997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
59007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
59017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
59025adb5c05SPengcheng Wangentry:
59035adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 64)
59045adb5c05SPengcheng Wang  ret i32 %memcmp
59055adb5c05SPengcheng Wang}
59065adb5c05SPengcheng Wang
59075adb5c05SPengcheng Wangdefine i32 @memcmp_size_127(ptr %s1, ptr %s2) nounwind {
59085adb5c05SPengcheng Wang; CHECK-RV32-LABEL: memcmp_size_127:
59095adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
59105adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
59115adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
59125adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    li a2, 127
59135adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call memcmp
59145adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
59155adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
59165adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
59175adb5c05SPengcheng Wang;
59185adb5c05SPengcheng Wang; CHECK-RV64-LABEL: memcmp_size_127:
59195adb5c05SPengcheng Wang; CHECK-RV64:       # %bb.0: # %entry
59205adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, -16
59215adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
59225adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    li a2, 127
59235adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    call memcmp
59245adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
59255adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, 16
59265adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ret
59275adb5c05SPengcheng Wangentry:
59285adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 127)
59295adb5c05SPengcheng Wang  ret i32 %memcmp
59305adb5c05SPengcheng Wang}
59315adb5c05SPengcheng Wang
59325adb5c05SPengcheng Wangdefine i32 @memcmp_size_128(ptr %s1, ptr %s2) nounwind {
59335adb5c05SPengcheng Wang; CHECK-RV32-LABEL: memcmp_size_128:
59345adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
59355adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
59365adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
59375adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    li a2, 128
59385adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call memcmp
59395adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
59405adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
59415adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
59425adb5c05SPengcheng Wang;
59435adb5c05SPengcheng Wang; CHECK-RV64-LABEL: memcmp_size_128:
59445adb5c05SPengcheng Wang; CHECK-RV64:       # %bb.0: # %entry
59455adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, -16
59465adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
59475adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    li a2, 128
59485adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    call memcmp
59495adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
59505adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, 16
59515adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ret
59525adb5c05SPengcheng Wangentry:
59535adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 128)
59545adb5c05SPengcheng Wang  ret i32 %memcmp
59555adb5c05SPengcheng Wang}
59565adb5c05SPengcheng Wang
59575adb5c05SPengcheng Wangdefine i32 @memcmp_size_runtime(ptr %s1, ptr %s2, iXLen %len) nounwind {
59585adb5c05SPengcheng Wang; CHECK-RV32-LABEL: memcmp_size_runtime:
59595adb5c05SPengcheng Wang; CHECK-RV32:       # %bb.0: # %entry
59605adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, -16
59615adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
59625adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    call memcmp
59635adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
59645adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    addi sp, sp, 16
59655adb5c05SPengcheng Wang; CHECK-RV32-NEXT:    ret
59665adb5c05SPengcheng Wang;
59675adb5c05SPengcheng Wang; CHECK-RV64-LABEL: memcmp_size_runtime:
59685adb5c05SPengcheng Wang; CHECK-RV64:       # %bb.0: # %entry
59695adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, -16
59705adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
59715adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    call memcmp
59725adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
59735adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    addi sp, sp, 16
59745adb5c05SPengcheng Wang; CHECK-RV64-NEXT:    ret
59755adb5c05SPengcheng Wangentry:
59765adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen %len)
59775adb5c05SPengcheng Wang  ret i32 %memcmp
59785adb5c05SPengcheng Wang}
59795adb5c05SPengcheng Wang
59805adb5c05SPengcheng Wangdefine i1 @memcmp_eq_zero(ptr %s1, ptr %s2) nounwind {
59815adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_eq_zero:
59825adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
59835adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lbu a2, 1(a1)
59849122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lbu a3, 2(a1)
59859122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lbu a4, 3(a1)
59869122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lbu a1, 0(a1)
59875adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    slli a2, a2, 8
59889122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    slli a3, a3, 16
59899122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    slli a4, a4, 24
59909122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    or a1, a2, a1
59919122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lbu a2, 0(a0)
59929122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lbu a5, 1(a0)
59935adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    or a3, a4, a3
59949122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lbu a4, 2(a0)
59959122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lbu a0, 3(a0)
59969122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    slli a5, a5, 8
59979122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    or a2, a5, a2
59989122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    slli a4, a4, 16
59995adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    slli a0, a0, 24
60009122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    or a0, a0, a4
60019122c523SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    or a1, a3, a1
60025adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    or a0, a0, a2
60035adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    xor a0, a0, a1
60045adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    seqz a0, a0
60055adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
60065adb5c05SPengcheng Wang;
60075adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_eq_zero:
60085adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
60095adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    lbu a2, 1(a1)
60109122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    lbu a3, 2(a1)
60119122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    lb a4, 3(a1)
60129122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    lbu a1, 0(a1)
60135adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    slli a2, a2, 8
60149122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    slli a3, a3, 16
60159122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    slli a4, a4, 24
60169122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    or a1, a2, a1
60179122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    lbu a2, 0(a0)
60189122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    lbu a5, 1(a0)
60195adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    or a3, a4, a3
60209122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    lbu a4, 2(a0)
60219122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    lb a0, 3(a0)
60229122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    slli a5, a5, 8
60239122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    or a2, a5, a2
60249122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    slli a4, a4, 16
60255adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    slli a0, a0, 24
60269122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    or a0, a0, a4
60279122c523SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    or a1, a3, a1
60285adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    or a0, a0, a2
60295adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    xor a0, a0, a1
60305adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    seqz a0, a0
60315adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
60325adb5c05SPengcheng Wang;
60335adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_eq_zero:
60345adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
60355adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lbu a2, 1(a1)
60369122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lbu a3, 2(a1)
60379122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lbu a4, 3(a1)
60389122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lbu a1, 0(a1)
60395adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    slli a2, a2, 8
60409122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    slli a3, a3, 16
60419122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    slli a4, a4, 24
60429122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    or a1, a2, a1
60439122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lbu a2, 0(a0)
60449122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lbu a5, 1(a0)
60455adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    or a3, a4, a3
60469122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lbu a4, 2(a0)
60479122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lbu a0, 3(a0)
60489122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    slli a5, a5, 8
60499122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    or a2, a5, a2
60509122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    slli a4, a4, 16
60515adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    slli a0, a0, 24
60529122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    or a0, a0, a4
60539122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    or a1, a3, a1
60545adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    or a0, a0, a2
60555adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    xor a0, a0, a1
60565adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    seqz a0, a0
60575adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
60585adb5c05SPengcheng Wang;
60595adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_eq_zero:
60605adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
60615adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    lbu a2, 1(a1)
60629122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    lbu a3, 2(a1)
60639122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    lb a4, 3(a1)
60649122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    lbu a1, 0(a1)
60655adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    slli a2, a2, 8
60669122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    slli a3, a3, 16
60679122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    slli a4, a4, 24
60689122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    or a1, a2, a1
60699122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    lbu a2, 0(a0)
60709122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    lbu a5, 1(a0)
60715adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    or a3, a4, a3
60729122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    lbu a4, 2(a0)
60739122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    lb a0, 3(a0)
60749122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    slli a5, a5, 8
60759122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    or a2, a5, a2
60769122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    slli a4, a4, 16
60775adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    slli a0, a0, 24
60789122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    or a0, a0, a4
60799122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    or a1, a3, a1
60805adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    or a0, a0, a2
60815adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    xor a0, a0, a1
60825adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    seqz a0, a0
60835adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
60845adb5c05SPengcheng Wang;
60855adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_eq_zero:
60865adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
60875adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lbu a2, 0(a1)
60885adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lbu a3, 1(a1)
60895adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lbu a4, 2(a1)
60905adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lbu a1, 3(a1)
60919122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lbu a5, 1(a0)
60929122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lbu a6, 2(a0)
60939122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lbu a7, 3(a0)
60949122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lbu a0, 0(a0)
60955adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    packh a1, a4, a1
60965adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    packh a2, a2, a3
60979122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    packh a3, a6, a7
60989122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    packh a0, a0, a5
60995adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    pack a1, a2, a1
61009122c523SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    pack a0, a0, a3
61015adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    xor a0, a0, a1
61025adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    seqz a0, a0
61035adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
61045adb5c05SPengcheng Wang;
61055adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_eq_zero:
61065adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
61075adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    lbu a2, 0(a1)
61085adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    lbu a3, 1(a1)
61095adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    lbu a4, 2(a1)
61105adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    lb a1, 3(a1)
61119122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    lbu a5, 0(a0)
61129122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    lbu a6, 1(a0)
61135adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    packh a2, a2, a3
61149122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    lbu a3, 2(a0)
61159122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    lb a0, 3(a0)
61169122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    packh a5, a5, a6
61175adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    slli a4, a4, 16
61185adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    slli a1, a1, 24
61195adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    or a1, a1, a4
61209122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    slli a3, a3, 16
61215adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    slli a0, a0, 24
61229122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    or a0, a0, a3
61239122c523SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    or a1, a1, a2
61245adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    or a0, a0, a5
61255adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    xor a0, a0, a1
61265adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    seqz a0, a0
61275adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
61285adb5c05SPengcheng Wang;
61295adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_eq_zero:
61305adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
61315adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lbu a2, 1(a1)
61329122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lbu a3, 2(a1)
61339122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lbu a4, 3(a1)
61349122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lbu a1, 0(a1)
61355adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    slli a2, a2, 8
61369122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    slli a3, a3, 16
61379122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    slli a4, a4, 24
61389122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    or a1, a2, a1
61399122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lbu a2, 0(a0)
61409122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lbu a5, 1(a0)
61415adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    or a3, a4, a3
61429122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lbu a4, 2(a0)
61439122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lbu a0, 3(a0)
61449122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    slli a5, a5, 8
61459122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    or a2, a5, a2
61469122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    slli a4, a4, 16
61475adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    slli a0, a0, 24
61489122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    or a0, a0, a4
61499122c523SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    or a1, a3, a1
61505adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    or a0, a0, a2
61515adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    xor a0, a0, a1
61525adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    seqz a0, a0
61535adb5c05SPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
61545adb5c05SPengcheng Wang;
61555adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_eq_zero:
61565adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
61575adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    lbu a2, 1(a1)
61589122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    lbu a3, 2(a1)
61599122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    lb a4, 3(a1)
61609122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    lbu a1, 0(a1)
61615adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    slli a2, a2, 8
61629122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    slli a3, a3, 16
61639122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    slli a4, a4, 24
61649122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    or a1, a2, a1
61659122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    lbu a2, 0(a0)
61669122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    lbu a5, 1(a0)
61675adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    or a3, a4, a3
61689122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    lbu a4, 2(a0)
61699122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    lb a0, 3(a0)
61709122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    slli a5, a5, 8
61719122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    or a2, a5, a2
61729122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    slli a4, a4, 16
61735adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    slli a0, a0, 24
61749122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    or a0, a0, a4
61759122c523SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    or a1, a3, a1
61765adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    or a0, a0, a2
61775adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    xor a0, a0, a1
61785adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    seqz a0, a0
61795adb5c05SPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
61805adb5c05SPengcheng Wang;
61815adb5c05SPengcheng Wang; CHECK-UNALIGNED-LABEL: memcmp_eq_zero:
61825adb5c05SPengcheng Wang; CHECK-UNALIGNED:       # %bb.0: # %entry
61835adb5c05SPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a0, 0(a0)
61847a5b040eSPengcheng Wang; CHECK-UNALIGNED-NEXT:    lw a1, 0(a1)
61855adb5c05SPengcheng Wang; CHECK-UNALIGNED-NEXT:    xor a0, a0, a1
61865adb5c05SPengcheng Wang; CHECK-UNALIGNED-NEXT:    seqz a0, a0
61875adb5c05SPengcheng Wang; CHECK-UNALIGNED-NEXT:    ret
61885adb5c05SPengcheng Wangentry:
61895adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 4)
61905adb5c05SPengcheng Wang  %ret = icmp eq i32 %memcmp, 0
61915adb5c05SPengcheng Wang  ret i1 %ret
61925adb5c05SPengcheng Wang}
61935adb5c05SPengcheng Wang
61945adb5c05SPengcheng Wangdefine i1 @memcmp_lt_zero(ptr %s1, ptr %s2) nounwind {
61957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_lt_zero:
61967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
61977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
61987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
61997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 4
62007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
62017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    srli a0, a0, 31
62027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
62037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
62047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
62055adb5c05SPengcheng Wang;
62067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_lt_zero:
62077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
62087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
62097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
62107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 4
62117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
62127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    slti a0, a0, 0
62137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
62147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
62157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
62167a5b040eSPengcheng Wang;
62177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_lt_zero:
62187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
62197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
62207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
62217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 4
62227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
62237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    srli a0, a0, 31
62247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
62257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
62267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
62277a5b040eSPengcheng Wang;
62287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_lt_zero:
62297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
62307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
62317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
62327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 4
62337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
62347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    slti a0, a0, 0
62357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
62367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
62377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
62387a5b040eSPengcheng Wang;
62397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_lt_zero:
62407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
62417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
62427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
62437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 4
62447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
62457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    srli a0, a0, 31
62467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
62477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
62487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
62497a5b040eSPengcheng Wang;
62507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_lt_zero:
62517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
62527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
62537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
62547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 4
62557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
62567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    slti a0, a0, 0
62577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
62587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
62597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
62607a5b040eSPengcheng Wang;
62617a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_lt_zero:
62627a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
62637a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
62647a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
62657a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 4
62667a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
62677a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    srli a0, a0, 31
62687a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
62697a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
62707a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
62717a5b040eSPengcheng Wang;
62727a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_lt_zero:
62737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
62747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
62757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
62767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 4
62777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
62787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    slti a0, a0, 0
62797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
62807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
62817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
62827a5b040eSPengcheng Wang;
62837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_lt_zero:
62847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
62857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
62867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
62877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 4
62887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
62897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    srli a0, a0, 31
62907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
62917a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
62927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
62937a5b040eSPengcheng Wang;
62947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_lt_zero:
62957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
62967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
62977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
62987a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 4
62997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
63007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    slti a0, a0, 0
63017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
63027a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
63037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
63047a5b040eSPengcheng Wang;
63057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_lt_zero:
63067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
63077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 0(a0)
63087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 0(a1)
63097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a0, a0
63107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a1, a1
63117a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a0, a1
63127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
63137a5b040eSPengcheng Wang;
63147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_lt_zero:
63157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
63167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a0, 0(a0)
63177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a1, 0(a1)
63187a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a0, a0
63197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a1, a1
63209122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a0, a0, 32
63217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a1, a1, 32
63227a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a0, a1
63237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
63247a5b040eSPengcheng Wang;
63257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_lt_zero:
63267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
63277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 0(a0)
63287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 0(a1)
63297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a0, a0
63307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a1, a1
63317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a0, a1
63327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
63337a5b040eSPengcheng Wang;
63347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_lt_zero:
63357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
63367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a0, 0(a0)
63377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a1, 0(a1)
63387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a0, a0
63397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a1, a1
63409122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a0, a0, 32
63417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a1, a1, 32
63427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a0, a1
63437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
63447a5b040eSPengcheng Wang;
63457a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_lt_zero:
63467a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
63477a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
63487a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
63497a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 4
63507a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
63517a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    srli a0, a0, 31
63527a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
63537a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
63547a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
63557a5b040eSPengcheng Wang;
63567a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_lt_zero:
63577a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
63587a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
63597a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
63607a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 4
63617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
63627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    slti a0, a0, 0
63637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
63647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
63657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
63665adb5c05SPengcheng Wangentry:
63675adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 4)
63685adb5c05SPengcheng Wang  %ret = icmp slt i32 %memcmp, 0
63695adb5c05SPengcheng Wang  ret i1 %ret
63705adb5c05SPengcheng Wang}
63715adb5c05SPengcheng Wang
63725adb5c05SPengcheng Wangdefine i1 @memcmp_gt_zero(ptr %s1, ptr %s2) nounwind {
63737a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-LABEL: memcmp_gt_zero:
63747a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
63757a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
63767a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
63777a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    li a2, 4
63787a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    call memcmp
63797a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    sgtz a0, a0
63807a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
63817a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
63827a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-NEXT:    ret
63835adb5c05SPengcheng Wang;
63847a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-LABEL: memcmp_gt_zero:
63857a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
63867a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
63877a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
63887a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    li a2, 4
63897a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    call memcmp
63907a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    sgtz a0, a0
63917a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
63927a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
63937a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-NEXT:    ret
63947a5b040eSPengcheng Wang;
63957a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_gt_zero:
63967a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
63977a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
63987a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
63997a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 4
64007a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
64017a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    sgtz a0, a0
64027a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
64037a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
64047a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
64057a5b040eSPengcheng Wang;
64067a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_gt_zero:
64077a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
64087a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
64097a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
64107a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 4
64117a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
64127a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    sgtz a0, a0
64137a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
64147a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
64157a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
64167a5b040eSPengcheng Wang;
64177a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_gt_zero:
64187a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
64197a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
64207a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
64217a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 4
64227a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
64237a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sgtz a0, a0
64247a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
64257a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
64267a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
64277a5b040eSPengcheng Wang;
64287a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_gt_zero:
64297a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
64307a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
64317a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
64327a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 4
64337a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
64347a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sgtz a0, a0
64357a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
64367a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
64377a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
64387a5b040eSPengcheng Wang;
64397a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-LABEL: memcmp_gt_zero:
64407a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
64417a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
64427a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
64437a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 4
64447a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
64457a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    sgtz a0, a0
64467a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
64477a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
64487a5b040eSPengcheng Wang; CHECK-ALIGNED-RV32-V-NEXT:    ret
64497a5b040eSPengcheng Wang;
64507a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-LABEL: memcmp_gt_zero:
64517a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
64527a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
64537a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
64547a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 4
64557a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
64567a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    sgtz a0, a0
64577a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
64587a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
64597a5b040eSPengcheng Wang; CHECK-ALIGNED-RV64-V-NEXT:    ret
64607a5b040eSPengcheng Wang;
64617a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-LABEL: memcmp_gt_zero:
64627a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
64637a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
64647a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
64657a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    li a2, 4
64667a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
64677a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    sgtz a0, a0
64687a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
64697a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
64707a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-NEXT:    ret
64717a5b040eSPengcheng Wang;
64727a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-LABEL: memcmp_gt_zero:
64737a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
64747a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
64757a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
64767a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    li a2, 4
64777a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
64787a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    sgtz a0, a0
64797a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
64807a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
64817a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-NEXT:    ret
64827a5b040eSPengcheng Wang;
64837a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_gt_zero:
64847a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
64857a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 0(a0)
64867a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 0(a1)
64877a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a0, a0
64887a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a1, a1
64897a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a1, a0
64907a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
64917a5b040eSPengcheng Wang;
64927a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_gt_zero:
64937a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
64947a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a0, 0(a0)
64957a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a1, 0(a1)
64967a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a0, a0
64977a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a1, a1
64989122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a0, a0, 32
64997a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a1, a1, 32
65007a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a1, a0
65017a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
65027a5b040eSPengcheng Wang;
65037a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_gt_zero:
65047a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
65057a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 0(a0)
65067a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 0(a1)
65077a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a0, a0
65087a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a1, a1
65097a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a1, a0
65107a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
65117a5b040eSPengcheng Wang;
65127a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_gt_zero:
65137a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
65147a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a0, 0(a0)
65157a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a1, 0(a1)
65167a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a0, a0
65177a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a1, a1
65189122c523SPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a0, a0, 32
65197a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a1, a1, 32
65207a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a1, a0
65217a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
65227a5b040eSPengcheng Wang;
65237a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_gt_zero:
65247a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
65257a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
65267a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
65277a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 4
65287a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
65297a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    sgtz a0, a0
65307a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
65317a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
65327a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV32-V-NEXT:    ret
65337a5b040eSPengcheng Wang;
65347a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_gt_zero:
65357a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
65367a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
65377a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
65387a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 4
65397a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
65407a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    sgtz a0, a0
65417a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
65427a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
65437a5b040eSPengcheng Wang; CHECK-UNALIGNED-RV64-V-NEXT:    ret
65445adb5c05SPengcheng Wangentry:
65455adb5c05SPengcheng Wang  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 4)
65465adb5c05SPengcheng Wang  %ret = icmp sgt i32 %memcmp, 0
65475adb5c05SPengcheng Wang  ret i1 %ret
65485adb5c05SPengcheng Wang}
6549bad0f98bSCraig Topper
6550bad0f98bSCraig Topperdefine i1 @memcmp_le_zero(ptr %s1, ptr %s2) nounwind {
6551bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-LABEL: memcmp_le_zero:
6552bad0f98bSCraig Topper; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
6553bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
6554bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
6555bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    li a2, 4
6556bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    call memcmp
6557bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    slti a0, a0, 1
6558bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
6559bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
6560bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    ret
6561bad0f98bSCraig Topper;
6562bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-LABEL: memcmp_le_zero:
6563bad0f98bSCraig Topper; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
6564bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
6565bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
6566bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    li a2, 4
6567bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    call memcmp
6568bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    slti a0, a0, 1
6569bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
6570bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
6571bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    ret
6572bad0f98bSCraig Topper;
6573bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_le_zero:
6574bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
6575bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
6576bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
6577bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 4
6578bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
6579bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    slti a0, a0, 1
6580bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
6581bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
6582bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
6583bad0f98bSCraig Topper;
6584bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_le_zero:
6585bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
6586bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
6587bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
6588bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 4
6589bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
6590bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    slti a0, a0, 1
6591bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
6592bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
6593bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
6594bad0f98bSCraig Topper;
6595bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_le_zero:
6596bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
6597bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
6598bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
6599bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 4
6600bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
6601bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    slti a0, a0, 1
6602bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
6603bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
6604bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
6605bad0f98bSCraig Topper;
6606bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_le_zero:
6607bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
6608bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
6609bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
6610bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 4
6611bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
6612bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    slti a0, a0, 1
6613bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
6614bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
6615bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
6616bad0f98bSCraig Topper;
6617bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-LABEL: memcmp_le_zero:
6618bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
6619bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
6620bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
6621bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 4
6622bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
6623bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    slti a0, a0, 1
6624bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
6625bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
6626bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    ret
6627bad0f98bSCraig Topper;
6628bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-LABEL: memcmp_le_zero:
6629bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
6630bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
6631bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
6632bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 4
6633bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
6634bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    slti a0, a0, 1
6635bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
6636bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
6637bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    ret
6638bad0f98bSCraig Topper;
6639bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-LABEL: memcmp_le_zero:
6640bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
6641bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
6642bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
6643bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-NEXT:    li a2, 4
6644bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
6645bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-NEXT:    slti a0, a0, 1
6646bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
6647bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
6648bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-NEXT:    ret
6649bad0f98bSCraig Topper;
6650bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-LABEL: memcmp_le_zero:
6651bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
6652bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
6653bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
6654bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-NEXT:    li a2, 4
6655bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
6656bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-NEXT:    slti a0, a0, 1
6657bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
6658bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
6659bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-NEXT:    ret
6660bad0f98bSCraig Topper;
6661bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_le_zero:
6662bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
6663bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 0(a0)
6664bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 0(a1)
6665bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a0, a0
6666bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a1, a1
6667bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a1, a0
6668*a4e47586SCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xori a0, a0, 1
6669bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
6670bad0f98bSCraig Topper;
6671bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_le_zero:
6672bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
6673bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a0, 0(a0)
6674bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a1, 0(a1)
6675bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a0, a0
6676bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a1, a1
6677bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a0, a0, 32
6678bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a1, a1, 32
6679bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a1, a0
6680*a4e47586SCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xori a0, a0, 1
6681bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
6682bad0f98bSCraig Topper;
6683bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_le_zero:
6684bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
6685bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 0(a0)
6686bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 0(a1)
6687bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a0, a0
6688bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a1, a1
6689bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a1, a0
6690*a4e47586SCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xori a0, a0, 1
6691bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
6692bad0f98bSCraig Topper;
6693bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_le_zero:
6694bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
6695bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a0, 0(a0)
6696bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a1, 0(a1)
6697bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a0, a0
6698bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a1, a1
6699bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a0, a0, 32
6700bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a1, a1, 32
6701bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a1, a0
6702*a4e47586SCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xori a0, a0, 1
6703bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
6704bad0f98bSCraig Topper;
6705bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_le_zero:
6706bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
6707bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
6708bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
6709bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 4
6710bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
6711bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-V-NEXT:    slti a0, a0, 1
6712bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
6713bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
6714bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-V-NEXT:    ret
6715bad0f98bSCraig Topper;
6716bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_le_zero:
6717bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
6718bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
6719bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
6720bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 4
6721bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
6722bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-V-NEXT:    slti a0, a0, 1
6723bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
6724bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
6725bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-V-NEXT:    ret
6726bad0f98bSCraig Topperentry:
6727bad0f98bSCraig Topper  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 4)
6728bad0f98bSCraig Topper  %ret = icmp slt i32 %memcmp, 1
6729bad0f98bSCraig Topper  ret i1 %ret
6730bad0f98bSCraig Topper}
6731bad0f98bSCraig Topper
6732bad0f98bSCraig Topperdefine i1 @memcmp_ge_zero(ptr %s1, ptr %s2) nounwind {
6733bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-LABEL: memcmp_ge_zero:
6734bad0f98bSCraig Topper; CHECK-ALIGNED-RV32:       # %bb.0: # %entry
6735bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, -16
6736bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
6737bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    li a2, 4
6738bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    call memcmp
6739bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    slti a0, a0, 0
6740bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    xori a0, a0, 1
6741bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
6742bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    addi sp, sp, 16
6743bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-NEXT:    ret
6744bad0f98bSCraig Topper;
6745bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-LABEL: memcmp_ge_zero:
6746bad0f98bSCraig Topper; CHECK-ALIGNED-RV64:       # %bb.0: # %entry
6747bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, -16
6748bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
6749bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    li a2, 4
6750bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    call memcmp
6751bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    slti a0, a0, 0
6752bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    xori a0, a0, 1
6753bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
6754bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    addi sp, sp, 16
6755bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-NEXT:    ret
6756bad0f98bSCraig Topper;
6757bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_ge_zero:
6758bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB:       # %bb.0: # %entry
6759bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, -16
6760bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
6761bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    li a2, 4
6762bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    call memcmp
6763bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    slti a0, a0, 0
6764bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    xori a0, a0, 1
6765bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
6766bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    addi sp, sp, 16
6767bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBB-NEXT:    ret
6768bad0f98bSCraig Topper;
6769bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_ge_zero:
6770bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB:       # %bb.0: # %entry
6771bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, -16
6772bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
6773bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    li a2, 4
6774bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    call memcmp
6775bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    slti a0, a0, 0
6776bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    xori a0, a0, 1
6777bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
6778bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    addi sp, sp, 16
6779bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBB-NEXT:    ret
6780bad0f98bSCraig Topper;
6781bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_ge_zero:
6782bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB:       # %bb.0: # %entry
6783bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, -16
6784bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
6785bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    li a2, 4
6786bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    call memcmp
6787bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    slti a0, a0, 0
6788bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    xori a0, a0, 1
6789bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
6790bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    addi sp, sp, 16
6791bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-ZBKB-NEXT:    ret
6792bad0f98bSCraig Topper;
6793bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_ge_zero:
6794bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB:       # %bb.0: # %entry
6795bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, -16
6796bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
6797bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    li a2, 4
6798bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    call memcmp
6799bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    slti a0, a0, 0
6800bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    xori a0, a0, 1
6801bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
6802bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    addi sp, sp, 16
6803bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-ZBKB-NEXT:    ret
6804bad0f98bSCraig Topper;
6805bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-LABEL: memcmp_ge_zero:
6806bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V:       # %bb.0: # %entry
6807bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, -16
6808bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
6809bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    li a2, 4
6810bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    call memcmp
6811bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    slti a0, a0, 0
6812bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    xori a0, a0, 1
6813bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
6814bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    addi sp, sp, 16
6815bad0f98bSCraig Topper; CHECK-ALIGNED-RV32-V-NEXT:    ret
6816bad0f98bSCraig Topper;
6817bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-LABEL: memcmp_ge_zero:
6818bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V:       # %bb.0: # %entry
6819bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, -16
6820bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
6821bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    li a2, 4
6822bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    call memcmp
6823bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    slti a0, a0, 0
6824bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    xori a0, a0, 1
6825bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
6826bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    addi sp, sp, 16
6827bad0f98bSCraig Topper; CHECK-ALIGNED-RV64-V-NEXT:    ret
6828bad0f98bSCraig Topper;
6829bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-LABEL: memcmp_ge_zero:
6830bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32:       # %bb.0: # %entry
6831bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, -16
6832bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
6833bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-NEXT:    li a2, 4
6834bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-NEXT:    call memcmp
6835bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-NEXT:    slti a0, a0, 0
6836bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-NEXT:    xori a0, a0, 1
6837bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
6838bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-NEXT:    addi sp, sp, 16
6839bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-NEXT:    ret
6840bad0f98bSCraig Topper;
6841bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-LABEL: memcmp_ge_zero:
6842bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64:       # %bb.0: # %entry
6843bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, -16
6844bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
6845bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-NEXT:    li a2, 4
6846bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-NEXT:    call memcmp
6847bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-NEXT:    slti a0, a0, 0
6848bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-NEXT:    xori a0, a0, 1
6849bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
6850bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-NEXT:    addi sp, sp, 16
6851bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-NEXT:    ret
6852bad0f98bSCraig Topper;
6853bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_ge_zero:
6854bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB:       # %bb.0: # %entry
6855bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a0, 0(a0)
6856bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    lw a1, 0(a1)
6857bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a0, a0
6858bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    rev8 a1, a1
6859*a4e47586SCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    sltu a0, a0, a1
6860bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    xori a0, a0, 1
6861bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBB-NEXT:    ret
6862bad0f98bSCraig Topper;
6863bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_ge_zero:
6864bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB:       # %bb.0: # %entry
6865bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a0, 0(a0)
6866bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    lw a1, 0(a1)
6867bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a0, a0
6868bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    rev8 a1, a1
6869bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a0, a0, 32
6870bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    srli a1, a1, 32
6871*a4e47586SCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    sltu a0, a0, a1
6872bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    xori a0, a0, 1
6873bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBB-NEXT:    ret
6874bad0f98bSCraig Topper;
6875bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_ge_zero:
6876bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB:       # %bb.0: # %entry
6877bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a0, 0(a0)
6878bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    lw a1, 0(a1)
6879bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a0, a0
6880bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    rev8 a1, a1
6881*a4e47586SCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    sltu a0, a0, a1
6882bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    xori a0, a0, 1
6883bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-ZBKB-NEXT:    ret
6884bad0f98bSCraig Topper;
6885bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_ge_zero:
6886bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB:       # %bb.0: # %entry
6887bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a0, 0(a0)
6888bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    lw a1, 0(a1)
6889bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a0, a0
6890bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    rev8 a1, a1
6891bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a0, a0, 32
6892bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    srli a1, a1, 32
6893*a4e47586SCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    sltu a0, a0, a1
6894bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    xori a0, a0, 1
6895bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-ZBKB-NEXT:    ret
6896bad0f98bSCraig Topper;
6897bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_ge_zero:
6898bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-V:       # %bb.0: # %entry
6899bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, -16
6900bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-V-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
6901bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-V-NEXT:    li a2, 4
6902bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-V-NEXT:    call memcmp
6903bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-V-NEXT:    slti a0, a0, 0
6904bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-V-NEXT:    xori a0, a0, 1
6905bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-V-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
6906bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-V-NEXT:    addi sp, sp, 16
6907bad0f98bSCraig Topper; CHECK-UNALIGNED-RV32-V-NEXT:    ret
6908bad0f98bSCraig Topper;
6909bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_ge_zero:
6910bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-V:       # %bb.0: # %entry
6911bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, -16
6912bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-V-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
6913bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-V-NEXT:    li a2, 4
6914bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-V-NEXT:    call memcmp
6915bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-V-NEXT:    slti a0, a0, 0
6916bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-V-NEXT:    xori a0, a0, 1
6917bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-V-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
6918bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-V-NEXT:    addi sp, sp, 16
6919bad0f98bSCraig Topper; CHECK-UNALIGNED-RV64-V-NEXT:    ret
6920bad0f98bSCraig Topperentry:
6921bad0f98bSCraig Topper  %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 4)
6922bad0f98bSCraig Topper  %ret = icmp sgt i32 %memcmp, -1
6923bad0f98bSCraig Topper  ret i1 %ret
6924bad0f98bSCraig Topper}
69255adb5c05SPengcheng Wang;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
69265adb5c05SPengcheng Wang; CHECK-ALIGNED: {{.*}}
6927