brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.2 KiB · b69b997 Raw
162 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 -mtriple=powerpc-ibm-aix < %s | \3; RUN:   FileCheck %s --check-prefix=CHECK-AIX-32-P94 5; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-asm-full-reg-names -mtriple=powerpc-unknown-linux-gnu < %s | \6; RUN:   FileCheck %s --check-prefix=CHECK-LINUX32-P97 8define i32 @memcmp_test(ptr nocapture noundef readonly %ptr1, ptr nocapture noundef readonly %ptr2, i32 noundef %num) nounwind {9; CHECK-AIX-32-P9-LABEL: memcmp_test:10; CHECK-AIX-32-P9:       # %bb.0: # %entry11; CHECK-AIX-32-P9-NEXT:    mflr r012; CHECK-AIX-32-P9-NEXT:    stwu r1, -64(r1)13; CHECK-AIX-32-P9-NEXT:    stw r0, 72(r1)14; CHECK-AIX-32-P9-NEXT:    bl .___memcmp[PR]15; CHECK-AIX-32-P9-NEXT:    nop16; CHECK-AIX-32-P9-NEXT:    addi r1, r1, 6417; CHECK-AIX-32-P9-NEXT:    lwz r0, 8(r1)18; CHECK-AIX-32-P9-NEXT:    mtlr r019; CHECK-AIX-32-P9-NEXT:    blr20;21; CHECK-LINUX32-P9-LABEL: memcmp_test:22; CHECK-LINUX32-P9:       # %bb.0: # %entry23; CHECK-LINUX32-P9-NEXT:    mflr r024; CHECK-LINUX32-P9-NEXT:    stwu r1, -16(r1)25; CHECK-LINUX32-P9-NEXT:    stw r0, 20(r1)26; CHECK-LINUX32-P9-NEXT:    bl memcmp27; CHECK-LINUX32-P9-NEXT:    lwz r0, 20(r1)28; CHECK-LINUX32-P9-NEXT:    addi r1, r1, 1629; CHECK-LINUX32-P9-NEXT:    mtlr r030; CHECK-LINUX32-P9-NEXT:    blr31entry:32  %call = tail call i32 @memcmp(ptr noundef %ptr1, ptr noundef %ptr2, i32 noundef %num)33    ret i32 %call34}35 36declare i32 @memcmp(ptr noundef captures(none), ptr noundef captures(none), i32 noundef) nounwind37 38define i32 @strlen_test(ptr noundef %str) nounwind {39; CHECK-AIX-32-P9-LABEL: strlen_test:40; CHECK-AIX-32-P9:       # %bb.0: # %entry41; CHECK-AIX-32-P9-NEXT:    mflr r042; CHECK-AIX-32-P9-NEXT:    stwu r1, -64(r1)43; CHECK-AIX-32-P9-NEXT:    stw r0, 72(r1)44; CHECK-AIX-32-P9-NEXT:    stw r3, 60(r1)45; CHECK-AIX-32-P9-NEXT:    bl .___strlen[PR]46; CHECK-AIX-32-P9-NEXT:    nop47; CHECK-AIX-32-P9-NEXT:    addi r1, r1, 6448; CHECK-AIX-32-P9-NEXT:    lwz r0, 8(r1)49; CHECK-AIX-32-P9-NEXT:    mtlr r050; CHECK-AIX-32-P9-NEXT:    blr51;52; CHECK-LINUX32-P9-LABEL: strlen_test:53; CHECK-LINUX32-P9:       # %bb.0: # %entry54; CHECK-LINUX32-P9-NEXT:    mflr r055; CHECK-LINUX32-P9-NEXT:    stwu r1, -16(r1)56; CHECK-LINUX32-P9-NEXT:    stw r0, 20(r1)57; CHECK-LINUX32-P9-NEXT:    stw r3, 12(r1)58; CHECK-LINUX32-P9-NEXT:    bl strlen59; CHECK-LINUX32-P9-NEXT:    lwz r0, 20(r1)60; CHECK-LINUX32-P9-NEXT:    addi r1, r1, 1661; CHECK-LINUX32-P9-NEXT:    mtlr r062; CHECK-LINUX32-P9-NEXT:    blr63entry:64  %str.addr = alloca ptr, align 465  store ptr %str, ptr %str.addr, align 466  %0 = load ptr, ptr %str.addr, align 467  %call = call i32 @strlen(ptr noundef %0)68  ret i32 %call69}70 71define i32 @strlen_test_fp_strict(ptr noundef %str) nounwind {72; CHECK-AIX-32-P9-LABEL: strlen_test_fp_strict:73; CHECK-AIX-32-P9:       # %bb.0: # %entry74; CHECK-AIX-32-P9-NEXT:    mflr r075; CHECK-AIX-32-P9-NEXT:    stwu r1, -64(r1)76; CHECK-AIX-32-P9-NEXT:    stw r0, 72(r1)77; CHECK-AIX-32-P9-NEXT:    stw r3, 60(r1)78; CHECK-AIX-32-P9-NEXT:    bl .___strlen[PR]79; CHECK-AIX-32-P9-NEXT:    nop80; CHECK-AIX-32-P9-NEXT:    addi r1, r1, 6481; CHECK-AIX-32-P9-NEXT:    lwz r0, 8(r1)82; CHECK-AIX-32-P9-NEXT:    mtlr r083; CHECK-AIX-32-P9-NEXT:    blr84;85; CHECK-LINUX32-P9-LABEL: strlen_test_fp_strict:86; CHECK-LINUX32-P9:       # %bb.0: # %entry87; CHECK-LINUX32-P9-NEXT:    mflr r088; CHECK-LINUX32-P9-NEXT:    stwu r1, -16(r1)89; CHECK-LINUX32-P9-NEXT:    stw r0, 20(r1)90; CHECK-LINUX32-P9-NEXT:    stw r3, 12(r1)91; CHECK-LINUX32-P9-NEXT:    bl strlen92; CHECK-LINUX32-P9-NEXT:    lwz r0, 20(r1)93; CHECK-LINUX32-P9-NEXT:    addi r1, r1, 1694; CHECK-LINUX32-P9-NEXT:    mtlr r095; CHECK-LINUX32-P9-NEXT:    blr96entry:97  %str.addr = alloca ptr, align 498  store ptr %str, ptr %str.addr, align 499  %0 = load ptr, ptr %str.addr, align 4100  %call = call i32 @strlen(ptr noundef %0) #0101  ret i32 %call102}103 104declare i32 @strlen(ptr noundef) nounwind105attributes #0 = { strictfp }106 107define ptr @test_memmove(ptr noundef %destination, ptr noundef %source, i32 noundef %num) #0 {108; CHECK-AIX-32-P9-LABEL: test_memmove:109; CHECK-AIX-32-P9:       # %bb.0: # %entry110; CHECK-AIX-32-P9-NEXT:    mflr r0111; CHECK-AIX-32-P9-NEXT:    stwu r1, -80(r1)112; CHECK-AIX-32-P9-NEXT:    stw r0, 88(r1)113; CHECK-AIX-32-P9-NEXT:    stw r31, 76(r1) # 4-byte Folded Spill114; CHECK-AIX-32-P9-NEXT:    mr r31, r3115; CHECK-AIX-32-P9-NEXT:    stw r3, 72(r1)116; CHECK-AIX-32-P9-NEXT:    stw r4, 68(r1)117; CHECK-AIX-32-P9-NEXT:    stw r5, 64(r1)118; CHECK-AIX-32-P9-NEXT:    bl .___memmove[PR]119; CHECK-AIX-32-P9-NEXT:    nop120; CHECK-AIX-32-P9-NEXT:    mr r3, r31121; CHECK-AIX-32-P9-NEXT:    lwz r31, 76(r1) # 4-byte Folded Reload122; CHECK-AIX-32-P9-NEXT:    addi r1, r1, 80123; CHECK-AIX-32-P9-NEXT:    lwz r0, 8(r1)124; CHECK-AIX-32-P9-NEXT:    mtlr r0125; CHECK-AIX-32-P9-NEXT:    blr126;127; CHECK-LINUX32-P9-LABEL: test_memmove:128; CHECK-LINUX32-P9:       # %bb.0: # %entry129; CHECK-LINUX32-P9-NEXT:    mflr r0130; CHECK-LINUX32-P9-NEXT:    stwu r1, -32(r1)131; CHECK-LINUX32-P9-NEXT:    stw r0, 36(r1)132; CHECK-LINUX32-P9-NEXT:    .cfi_def_cfa_offset 32133; CHECK-LINUX32-P9-NEXT:    .cfi_offset lr, 4134; CHECK-LINUX32-P9-NEXT:    .cfi_offset r30, -8135; CHECK-LINUX32-P9-NEXT:    stw r30, 24(r1) # 4-byte Folded Spill136; CHECK-LINUX32-P9-NEXT:    mr r30, r3137; CHECK-LINUX32-P9-NEXT:    stw r3, 20(r1)138; CHECK-LINUX32-P9-NEXT:    stw r4, 16(r1)139; CHECK-LINUX32-P9-NEXT:    stw r5, 12(r1)140; CHECK-LINUX32-P9-NEXT:    bl memmove141; CHECK-LINUX32-P9-NEXT:    mr r3, r30142; CHECK-LINUX32-P9-NEXT:    lwz r30, 24(r1) # 4-byte Folded Reload143; CHECK-LINUX32-P9-NEXT:    lwz r0, 36(r1)144; CHECK-LINUX32-P9-NEXT:    addi r1, r1, 32145; CHECK-LINUX32-P9-NEXT:    mtlr r0146; CHECK-LINUX32-P9-NEXT:    blr147entry:148  %destination.addr = alloca ptr, align 4149  %source.addr = alloca ptr, align 4150  %num.addr = alloca i32, align 4151  store ptr %destination, ptr %destination.addr, align 4152  store ptr %source, ptr %source.addr, align 4153  store i32 %num, ptr %num.addr, align 4154  %0 = load ptr, ptr %destination.addr, align 4155  %1 = load ptr, ptr %source.addr, align 4156  %2 = load i32, ptr %num.addr, align 4157  call void @llvm.memmove.p0.p0.i32(ptr align 1 %0, ptr align 1 %1, i32 %2, i1 false)158  ret ptr %0159}160 161declare void @llvm.memmove.p0.p0.i32(ptr writeonly captures(none), ptr readonly captures(none), i32, i1 immarg)162