182 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-asm-full-reg-names \3; RUN: -mtriple=powerpc64le-unknown-linux-gnu < %s | \4; RUN: FileCheck %s --check-prefix=CHECK-LE-P95; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-asm-full-reg-names \6; RUN: -mtriple=powerpc64-unknown-linux-gnu < %s | \7; RUN: FileCheck %s --check-prefix=CHECK-BE-P98; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-asm-full-reg-names \9; RUN: -mtriple=powerpc64-ibm-aix < %s | \10; RUN: FileCheck %s --check-prefix=CHECK-AIX-64-P911 12define noundef i32 @_Z11memcmp_testPKvS0_m(ptr noundef readonly captures(none) %ptr1, ptr noundef readonly captures(none) %ptr2, i64 noundef %num) nounwind {13; CHECK-LE-P9-LABEL: _Z11memcmp_testPKvS0_m:14; CHECK-LE-P9: # %bb.0: # %entry15; CHECK-LE-P9-NEXT: mflr r016; CHECK-LE-P9-NEXT: stdu r1, -32(r1)17; CHECK-LE-P9-NEXT: std r0, 48(r1)18; CHECK-LE-P9-NEXT: bl memcmp19; CHECK-LE-P9-NEXT: nop20; CHECK-LE-P9-NEXT: addi r1, r1, 3221; CHECK-LE-P9-NEXT: ld r0, 16(r1)22; CHECK-LE-P9-NEXT: mtlr r023; CHECK-LE-P9-NEXT: blr24;25; CHECK-BE-P9-LABEL: _Z11memcmp_testPKvS0_m:26; CHECK-BE-P9: # %bb.0: # %entry27; CHECK-BE-P9-NEXT: mflr r028; CHECK-BE-P9-NEXT: stdu r1, -112(r1)29; CHECK-BE-P9-NEXT: std r0, 128(r1)30; CHECK-BE-P9-NEXT: bl memcmp31; CHECK-BE-P9-NEXT: nop32; CHECK-BE-P9-NEXT: addi r1, r1, 11233; CHECK-BE-P9-NEXT: ld r0, 16(r1)34; CHECK-BE-P9-NEXT: mtlr r035; CHECK-BE-P9-NEXT: blr36;37; CHECK-AIX-64-P9-LABEL: _Z11memcmp_testPKvS0_m:38; CHECK-AIX-64-P9: # %bb.0: # %entry39; CHECK-AIX-64-P9-NEXT: mflr r040; CHECK-AIX-64-P9-NEXT: stdu r1, -112(r1)41; CHECK-AIX-64-P9-NEXT: std r0, 128(r1)42; CHECK-AIX-64-P9-NEXT: bl .___memcmp64[PR]43; CHECK-AIX-64-P9-NEXT: nop44; CHECK-AIX-64-P9-NEXT: addi r1, r1, 11245; CHECK-AIX-64-P9-NEXT: ld r0, 16(r1)46; CHECK-AIX-64-P9-NEXT: mtlr r047; CHECK-AIX-64-P9-NEXT: blr48entry:49 %call = tail call i32 @memcmp(ptr noundef %ptr1, ptr noundef %ptr2, i64 noundef %num)50 ret i32 %call51}52 53declare i32 @memcmp(ptr noundef captures(none), ptr noundef captures(none), i64 noundef) nounwind54 55define i64 @strlen_test(ptr noundef %str) nounwind {56; CHECK-LE-P9-LABEL: strlen_test:57; CHECK-LE-P9: # %bb.0: # %entry58; CHECK-LE-P9-NEXT: mflr r059; CHECK-LE-P9-NEXT: stdu r1, -48(r1)60; CHECK-LE-P9-NEXT: std r0, 64(r1)61; CHECK-LE-P9-NEXT: std r3, 40(r1)62; CHECK-LE-P9-NEXT: bl strlen63; CHECK-LE-P9-NEXT: nop64; CHECK-LE-P9-NEXT: addi r1, r1, 4865; CHECK-LE-P9-NEXT: ld r0, 16(r1)66; CHECK-LE-P9-NEXT: mtlr r067; CHECK-LE-P9-NEXT: blr68;69; CHECK-BE-P9-LABEL: strlen_test:70; CHECK-BE-P9: # %bb.0: # %entry71; CHECK-BE-P9-NEXT: mflr r072; CHECK-BE-P9-NEXT: stdu r1, -128(r1)73; CHECK-BE-P9-NEXT: std r0, 144(r1)74; CHECK-BE-P9-NEXT: std r3, 120(r1)75; CHECK-BE-P9-NEXT: bl strlen76; CHECK-BE-P9-NEXT: nop77; CHECK-BE-P9-NEXT: addi r1, r1, 12878; CHECK-BE-P9-NEXT: ld r0, 16(r1)79; CHECK-BE-P9-NEXT: mtlr r080; CHECK-BE-P9-NEXT: blr81;82; CHECK-AIX-64-P9-LABEL: strlen_test:83; CHECK-AIX-64-P9: # %bb.0: # %entry84; CHECK-AIX-64-P9-NEXT: mflr r085; CHECK-AIX-64-P9-NEXT: stdu r1, -128(r1)86; CHECK-AIX-64-P9-NEXT: std r0, 144(r1)87; CHECK-AIX-64-P9-NEXT: std r3, 120(r1)88; CHECK-AIX-64-P9-NEXT: bl .___strlen64[PR]89; CHECK-AIX-64-P9-NEXT: nop90; CHECK-AIX-64-P9-NEXT: addi r1, r1, 12891; CHECK-AIX-64-P9-NEXT: ld r0, 16(r1)92; CHECK-AIX-64-P9-NEXT: mtlr r093; CHECK-AIX-64-P9-NEXT: blr94entry:95 %str.addr = alloca ptr, align 896 store ptr %str, ptr %str.addr, align 897 %0 = load ptr, ptr %str.addr, align 898 %call = call i64 @strlen(ptr noundef %0)99 ret i64 %call100}101 102declare i64 @strlen(ptr noundef) nounwind103 104define ptr @test_memmove(ptr noundef %destination, ptr noundef %source, i64 noundef %num) #0 {105; CHECK-LE-P9-LABEL: test_memmove:106; CHECK-LE-P9: # %bb.0: # %entry107; CHECK-LE-P9-NEXT: mflr r0108; CHECK-LE-P9-NEXT: .cfi_def_cfa_offset 80109; CHECK-LE-P9-NEXT: .cfi_offset lr, 16110; CHECK-LE-P9-NEXT: .cfi_offset r30, -16111; CHECK-LE-P9-NEXT: std r30, -16(r1) # 8-byte Folded Spill112; CHECK-LE-P9-NEXT: stdu r1, -80(r1)113; CHECK-LE-P9-NEXT: std r0, 96(r1)114; CHECK-LE-P9-NEXT: mr r30, r3115; CHECK-LE-P9-NEXT: std r3, 56(r1)116; CHECK-LE-P9-NEXT: std r4, 48(r1)117; CHECK-LE-P9-NEXT: std r5, 40(r1)118; CHECK-LE-P9-NEXT: bl memmove119; CHECK-LE-P9-NEXT: nop120; CHECK-LE-P9-NEXT: mr r3, r30121; CHECK-LE-P9-NEXT: addi r1, r1, 80122; CHECK-LE-P9-NEXT: ld r0, 16(r1)123; CHECK-LE-P9-NEXT: ld r30, -16(r1) # 8-byte Folded Reload124; CHECK-LE-P9-NEXT: mtlr r0125; CHECK-LE-P9-NEXT: blr126;127; CHECK-BE-P9-LABEL: test_memmove:128; CHECK-BE-P9: # %bb.0: # %entry129; CHECK-BE-P9-NEXT: mflr r0130; CHECK-BE-P9-NEXT: stdu r1, -160(r1)131; CHECK-BE-P9-NEXT: std r0, 176(r1)132; CHECK-BE-P9-NEXT: .cfi_def_cfa_offset 160133; CHECK-BE-P9-NEXT: .cfi_offset lr, 16134; CHECK-BE-P9-NEXT: .cfi_offset r30, -16135; CHECK-BE-P9-NEXT: std r30, 144(r1) # 8-byte Folded Spill136; CHECK-BE-P9-NEXT: mr r30, r3137; CHECK-BE-P9-NEXT: std r3, 136(r1)138; CHECK-BE-P9-NEXT: std r4, 128(r1)139; CHECK-BE-P9-NEXT: std r5, 120(r1)140; CHECK-BE-P9-NEXT: bl memmove141; CHECK-BE-P9-NEXT: nop142; CHECK-BE-P9-NEXT: mr r3, r30143; CHECK-BE-P9-NEXT: ld r30, 144(r1) # 8-byte Folded Reload144; CHECK-BE-P9-NEXT: addi r1, r1, 160145; CHECK-BE-P9-NEXT: ld r0, 16(r1)146; CHECK-BE-P9-NEXT: mtlr r0147; CHECK-BE-P9-NEXT: blr148;149; CHECK-AIX-64-P9-LABEL: test_memmove:150; CHECK-AIX-64-P9: # %bb.0: # %entry151; CHECK-AIX-64-P9-NEXT: mflr r0152; CHECK-AIX-64-P9-NEXT: stdu r1, -144(r1)153; CHECK-AIX-64-P9-NEXT: std r0, 160(r1)154; CHECK-AIX-64-P9-NEXT: std r31, 136(r1) # 8-byte Folded Spill155; CHECK-AIX-64-P9-NEXT: mr r31, r3156; CHECK-AIX-64-P9-NEXT: std r3, 128(r1)157; CHECK-AIX-64-P9-NEXT: std r4, 120(r1)158; CHECK-AIX-64-P9-NEXT: std r5, 112(r1)159; CHECK-AIX-64-P9-NEXT: bl .___memmove64[PR]160; CHECK-AIX-64-P9-NEXT: nop161; CHECK-AIX-64-P9-NEXT: mr r3, r31162; CHECK-AIX-64-P9-NEXT: ld r31, 136(r1) # 8-byte Folded Reload163; CHECK-AIX-64-P9-NEXT: addi r1, r1, 144164; CHECK-AIX-64-P9-NEXT: ld r0, 16(r1)165; CHECK-AIX-64-P9-NEXT: mtlr r0166; CHECK-AIX-64-P9-NEXT: blr167entry:168 %destination.addr = alloca ptr, align 8169 %source.addr = alloca ptr, align 8170 %num.addr = alloca i64, align 8171 store ptr %destination, ptr %destination.addr, align 8172 store ptr %source, ptr %source.addr, align 8173 store i64 %num, ptr %num.addr, align 8174 %0 = load ptr, ptr %destination.addr, align 8175 %1 = load ptr, ptr %source.addr, align 8176 %2 = load i64, ptr %num.addr, align 8177 call void @llvm.memmove.p0.p0.i64(ptr align 1 %0, ptr align 1 %1, i64 %2, i1 false)178 ret ptr %0179}180 181declare void @llvm.memmove.p0.p0.i32(ptr writeonly captures(none), ptr readonly captures(none), i32, i1 immarg)182