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