1; RUN: llc -O2 < %s -mtriple=aarch64-linux-gnu                     | FileCheck %s --check-prefixes=CHECK,CHECKN
2; RUN: llc -O2 < %s -mtriple=aarch64-linux-gnu -mattr=strict-align | FileCheck %s --check-prefixes=CHECK,CHECKS
3
4declare i32 @bcmp(i8*, i8*, i64) nounwind readonly
5declare i32 @memcmp(i8*, i8*, i64) nounwind readonly
6
7define i1 @bcmp_b2(i8* %s1, i8* %s2) {
8entry:
9  %bcmp = call i32 @bcmp(i8* %s1, i8* %s2, i64 15)
10  %ret = icmp eq i32 %bcmp, 0
11  ret i1 %ret
12
13; CHECK-LABEL: bcmp_b2:
14; CHECK-NOT:   bl bcmp
15; CHECKN:      ldr  x
16; CHECKN-NEXT: ldr  x
17; CHECKN-NEXT: ldur x
18; CHECKN-NEXT: ldur x
19; CHECKS:      ldr  x
20; CHECKS-NEXT: ldr  x
21; CHECKS-NEXT: ldr  w
22; CHECKS-NEXT: ldr  w
23; CHECKS-NEXT: ldrh w
24; CHECKS-NEXT: ldrh w
25; CHECKS-NEXT: ldrb w
26; CHECKS-NEXT: ldrb w
27}
28
29define i1 @bcmp_bs(i8* %s1, i8* %s2) optsize {
30entry:
31  %memcmp = call i32 @memcmp(i8* %s1, i8* %s2, i64 31)
32  %ret = icmp eq i32 %memcmp, 0
33  ret i1 %ret
34
35; CHECK-LABEL: bcmp_bs:
36; CHECKN-NOT:  bl memcmp
37; CHECKN:      ldp  x
38; CHECKN-NEXT: ldp  x
39; CHECKN-NEXT: ldr  x
40; CHECKN-NEXT: ldr  x
41; CHECKN-NEXT: ldur x
42; CHECKN-NEXT: ldur x
43; CHECKS:      bl memcmp
44}
45