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 @test_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: test_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-COUNT-30: ldrb w 20} 21 22define i1 @test_b2_align8(i8* align 8 %s1, i8* align 8 %s2) { 23entry: 24 %bcmp = call i32 @bcmp(i8* %s1, i8* %s2, i64 15) 25 %ret = icmp eq i32 %bcmp, 0 26 ret i1 %ret 27 28; CHECK-LABEL: test_b2_align8: 29; CHECK-NOT: bl bcmp 30; CHECKN: ldr x 31; CHECKN-NEXT: ldr x 32; CHECKN-NEXT: ldur x 33; CHECKN-NEXT: ldur x 34; CHECKS: ldr x 35; CHECKS-NEXT: ldr x 36; CHECKS-NEXT: ldr w 37; CHECKS-NEXT: ldr w 38; CHECKS-NEXT: ldrh w 39; CHECKS-NEXT: ldrh w 40; CHECKS-NEXT: ldrb w 41; CHECKS-NEXT: ldrb w 42} 43 44define i1 @test_bs(i8* %s1, i8* %s2) optsize { 45entry: 46 %memcmp = call i32 @memcmp(i8* %s1, i8* %s2, i64 31) 47 %ret = icmp eq i32 %memcmp, 0 48 ret i1 %ret 49 50; CHECK-LABEL: test_bs: 51; CHECKN-NOT: bl memcmp 52; CHECKN: ldp x 53; CHECKN-NEXT: ldp x 54; CHECKN-NEXT: ldr x 55; CHECKN-NEXT: ldr x 56; CHECKN-NEXT: ldur x 57; CHECKN-NEXT: ldur x 58; CHECKS: bl memcmp 59} 60