brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.5 KiB · c703aef Raw
218 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mcpu=z15 < %s -mtriple=s390x-linux-gnu | FileCheck %s3;4; Test memcpys of small constant lengths that should not be done with MVC.5 6declare void @llvm.memcpy.p0.p0.i64(ptr nocapture, ptr nocapture, i64, i1) nounwind7 8define void @fun16(ptr %Src, ptr %Dst, i8 %val) {9; CHECK-LABEL: fun16:10; CHECK:       # %bb.0:11; CHECK-NEXT:    mvc 0(16,%r3), 0(%r2)12; CHECK-NEXT:    br %r1413  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %Dst, ptr align 16 %Src, i64 16, i1 false)14  ret void15}16 17define void @fun17(ptr %Src, ptr %Dst, i8 %val) {18; CHECK-LABEL: fun17:19; CHECK:       # %bb.0:20; CHECK-NEXT:    lb %r0, 16(%r2)21; CHECK-NEXT:    stc %r0, 16(%r3)22; CHECK-NEXT:    vl %v0, 0(%r2), 423; CHECK-NEXT:    vst %v0, 0(%r3), 424; CHECK-NEXT:    br %r1425  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %Dst, ptr align 16 %Src, i64 17, i1 false)26  ret void27}28 29define void @fun18(ptr %Src, ptr %Dst, i8 %val) {30; CHECK-LABEL: fun18:31; CHECK:       # %bb.0:32; CHECK-NEXT:    lh %r0, 16(%r2)33; CHECK-NEXT:    sth %r0, 16(%r3)34; CHECK-NEXT:    vl %v0, 0(%r2), 435; CHECK-NEXT:    vst %v0, 0(%r3), 436; CHECK-NEXT:    br %r1437  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %Dst, ptr align 16 %Src, i64 18, i1 false)38  ret void39}40 41define void @fun19(ptr %Src, ptr %Dst, i8 %val) {42; CHECK-LABEL: fun19:43; CHECK:       # %bb.0:44; CHECK-NEXT:    l %r0, 15(%r2)45; CHECK-NEXT:    st %r0, 15(%r3)46; CHECK-NEXT:    vl %v0, 0(%r2), 447; CHECK-NEXT:    vst %v0, 0(%r3), 448; CHECK-NEXT:    br %r1449  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %Dst, ptr align 16 %Src, i64 19, i1 false)50  ret void51}52 53define void @fun20(ptr %Src, ptr %Dst, i8 %val) {54; CHECK-LABEL: fun20:55; CHECK:       # %bb.0:56; CHECK-NEXT:    l %r0, 16(%r2)57; CHECK-NEXT:    st %r0, 16(%r3)58; CHECK-NEXT:    vl %v0, 0(%r2), 459; CHECK-NEXT:    vst %v0, 0(%r3), 460; CHECK-NEXT:    br %r1461  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %Dst, ptr align 16 %Src, i64 20, i1 false)62  ret void63}64 65define void @fun21(ptr %Src, ptr %Dst, i8 %val) {66; CHECK-LABEL: fun21:67; CHECK:       # %bb.0:68; CHECK-NEXT:    lg %r0, 13(%r2)69; CHECK-NEXT:    stg %r0, 13(%r3)70; CHECK-NEXT:    vl %v0, 0(%r2), 471; CHECK-NEXT:    vst %v0, 0(%r3), 472; CHECK-NEXT:    br %r1473  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %Dst, ptr align 16 %Src, i64 21, i1 false)74  ret void75}76 77define void @fun22(ptr %Src, ptr %Dst, i8 %val) {78; CHECK-LABEL: fun22:79; CHECK:       # %bb.0:80; CHECK-NEXT:    lg %r0, 14(%r2)81; CHECK-NEXT:    stg %r0, 14(%r3)82; CHECK-NEXT:    vl %v0, 0(%r2), 483; CHECK-NEXT:    vst %v0, 0(%r3), 484; CHECK-NEXT:    br %r1485  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %Dst, ptr align 16 %Src, i64 22, i1 false)86  ret void87}88 89define void @fun23(ptr %Src, ptr %Dst, i8 %val) {90; CHECK-LABEL: fun23:91; CHECK:       # %bb.0:92; CHECK-NEXT:    lg %r0, 15(%r2)93; CHECK-NEXT:    stg %r0, 15(%r3)94; CHECK-NEXT:    vl %v0, 0(%r2), 495; CHECK-NEXT:    vst %v0, 0(%r3), 496; CHECK-NEXT:    br %r1497  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %Dst, ptr align 16 %Src, i64 23, i1 false)98  ret void99}100 101define void @fun24(ptr %Src, ptr %Dst, i8 %val) {102; CHECK-LABEL: fun24:103; CHECK:       # %bb.0:104; CHECK-NEXT:    lg %r0, 16(%r2)105; CHECK-NEXT:    stg %r0, 16(%r3)106; CHECK-NEXT:    vl %v0, 0(%r2), 4107; CHECK-NEXT:    vst %v0, 0(%r3), 4108; CHECK-NEXT:    br %r14109  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %Dst, ptr align 16 %Src, i64 24, i1 false)110  ret void111}112 113define void @fun25(ptr %Src, ptr %Dst, i8 %val) {114; CHECK-LABEL: fun25:115; CHECK:       # %bb.0:116; CHECK-NEXT:    vl %v0, 9(%r2)117; CHECK-NEXT:    vst %v0, 9(%r3)118; CHECK-NEXT:    vl %v0, 0(%r2), 4119; CHECK-NEXT:    vst %v0, 0(%r3), 4120; CHECK-NEXT:    br %r14121  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %Dst, ptr align 16 %Src, i64 25, i1 false)122  ret void123}124 125define void @fun26(ptr %Src, ptr %Dst, i8 %val) {126; CHECK-LABEL: fun26:127; CHECK:       # %bb.0:128; CHECK-NEXT:    vl %v0, 10(%r2)129; CHECK-NEXT:    vst %v0, 10(%r3)130; CHECK-NEXT:    vl %v0, 0(%r2), 4131; CHECK-NEXT:    vst %v0, 0(%r3), 4132; CHECK-NEXT:    br %r14133  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %Dst, ptr align 16 %Src, i64 26, i1 false)134  ret void135}136 137define void @fun27(ptr %Src, ptr %Dst, i8 %val) {138; CHECK-LABEL: fun27:139; CHECK:       # %bb.0:140; CHECK-NEXT:    vl %v0, 11(%r2)141; CHECK-NEXT:    vst %v0, 11(%r3)142; CHECK-NEXT:    vl %v0, 0(%r2), 4143; CHECK-NEXT:    vst %v0, 0(%r3), 4144; CHECK-NEXT:    br %r14145  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %Dst, ptr align 16 %Src, i64 27, i1 false)146  ret void147}148 149define void @fun28(ptr %Src, ptr %Dst, i8 %val) {150; CHECK-LABEL: fun28:151; CHECK:       # %bb.0:152; CHECK-NEXT:    vl %v0, 12(%r2)153; CHECK-NEXT:    vst %v0, 12(%r3)154; CHECK-NEXT:    vl %v0, 0(%r2), 4155; CHECK-NEXT:    vst %v0, 0(%r3), 4156; CHECK-NEXT:    br %r14157  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %Dst, ptr align 16 %Src, i64 28, i1 false)158  ret void159}160 161define void @fun29(ptr %Src, ptr %Dst, i8 %val) {162; CHECK-LABEL: fun29:163; CHECK:       # %bb.0:164; CHECK-NEXT:    vl %v0, 13(%r2)165; CHECK-NEXT:    vst %v0, 13(%r3)166; CHECK-NEXT:    vl %v0, 0(%r2), 4167; CHECK-NEXT:    vst %v0, 0(%r3), 4168; CHECK-NEXT:    br %r14169  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %Dst, ptr align 16 %Src, i64 29, i1 false)170  ret void171}172 173define void @fun30(ptr %Src, ptr %Dst, i8 %val) {174; CHECK-LABEL: fun30:175; CHECK:       # %bb.0:176; CHECK-NEXT:    vl %v0, 14(%r2)177; CHECK-NEXT:    vst %v0, 14(%r3)178; CHECK-NEXT:    vl %v0, 0(%r2), 4179; CHECK-NEXT:    vst %v0, 0(%r3), 4180; CHECK-NEXT:    br %r14181  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %Dst, ptr align 16 %Src, i64 30, i1 false)182  ret void183}184 185define void @fun31(ptr %Src, ptr %Dst, i8 %val) {186; CHECK-LABEL: fun31:187; CHECK:       # %bb.0:188; CHECK-NEXT:    vl %v0, 15(%r2)189; CHECK-NEXT:    vst %v0, 15(%r3)190; CHECK-NEXT:    vl %v0, 0(%r2), 4191; CHECK-NEXT:    vst %v0, 0(%r3), 4192; CHECK-NEXT:    br %r14193  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %Dst, ptr align 16 %Src, i64 31, i1 false)194  ret void195}196 197define void @fun32(ptr %Src, ptr %Dst, i8 %val) {198; CHECK-LABEL: fun32:199; CHECK:       # %bb.0:200; CHECK-NEXT:    vl %v0, 16(%r2), 4201; CHECK-NEXT:    vst %v0, 16(%r3), 4202; CHECK-NEXT:    vl %v0, 0(%r2), 4203; CHECK-NEXT:    vst %v0, 0(%r3), 4204; CHECK-NEXT:    br %r14205  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %Dst, ptr align 16 %Src, i64 32, i1 false)206  ret void207}208 209define void @fun33(ptr %Src, ptr %Dst, i8 %val) {210; CHECK-LABEL: fun33:211; CHECK:       # %bb.0:212; CHECK-NEXT:    mvc 0(33,%r3), 0(%r2)213; CHECK-NEXT:    br %r14214  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %Dst, ptr align 16 %Src, i64 33, i1 false)215  ret void216}217 218