383 lines · plain
1; Test memsets that clear all bits.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s4 5declare void @llvm.memset.p0.i32(ptr nocapture, i8, i32, i1) nounwind6declare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i1) nounwind7 8; No bytes, i32 version.9define void @f1(ptr %dest) {10; CHECK-LABEL: f1:11; CHECK-NOT: %r212; CHECK: br %r1413 call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 0, i1 false)14 ret void15}16 17; No bytes, i64 version.18define void @f2(ptr %dest) {19; CHECK-LABEL: f2:20; CHECK-NOT: %r221; CHECK: br %r1422 call void @llvm.memset.p0.i64(ptr %dest, i8 0, i64 0, i1 false)23 ret void24}25 26; 1 byte, i32 version.27define void @f3(ptr %dest) {28; CHECK-LABEL: f3:29; CHECK: mvi 0(%r2), 030; CHECK: br %r1431 call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 1, i1 false)32 ret void33}34 35; 1 byte, i64 version.36define void @f4(ptr %dest) {37; CHECK-LABEL: f4:38; CHECK: mvi 0(%r2), 039; CHECK: br %r1440 call void @llvm.memset.p0.i64(ptr %dest, i8 0, i64 1, i1 false)41 ret void42}43 44; 2 bytes, i32 version.45define void @f5(ptr %dest) {46; CHECK-LABEL: f5:47; CHECK: mvhhi 0(%r2), 048; CHECK: br %r1449 call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 2, i1 false)50 ret void51}52 53; 2 bytes, i64 version.54define void @f6(ptr %dest) {55; CHECK-LABEL: f6:56; CHECK: mvhhi 0(%r2), 057; CHECK: br %r1458 call void @llvm.memset.p0.i64(ptr %dest, i8 0, i64 2, i1 false)59 ret void60}61 62; 3 bytes, i32 version.63define void @f7(ptr %dest) {64; CHECK-LABEL: f7:65; CHECK-DAG: mvhhi 0(%r2), 066; CHECK-DAG: mvi 2(%r2), 067; CHECK: br %r1468 call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 3, i1 false)69 ret void70}71 72; 3 bytes, i64 version.73define void @f8(ptr %dest) {74; CHECK-LABEL: f8:75; CHECK-DAG: mvhhi 0(%r2), 076; CHECK-DAG: mvi 2(%r2), 077; CHECK: br %r1478 call void @llvm.memset.p0.i64(ptr %dest, i8 0, i64 3, i1 false)79 ret void80}81 82; 4 bytes, i32 version.83define void @f9(ptr %dest) {84; CHECK-LABEL: f9:85; CHECK: mvhi 0(%r2), 086; CHECK: br %r1487 call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 4, i1 false)88 ret void89}90 91; 4 bytes, i64 version.92define void @f10(ptr %dest) {93; CHECK-LABEL: f10:94; CHECK: mvhi 0(%r2), 095; CHECK: br %r1496 call void @llvm.memset.p0.i64(ptr %dest, i8 0, i64 4, i1 false)97 ret void98}99 100; 5 bytes, i32 version.101define void @f11(ptr %dest) {102; CHECK-LABEL: f11:103; CHECK-DAG: mvhi 0(%r2), 0104; CHECK-DAG: mvi 4(%r2), 0105; CHECK: br %r14106 call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 5, i1 false)107 ret void108}109 110; 5 bytes, i64 version.111define void @f12(ptr %dest) {112; CHECK-LABEL: f12:113; CHECK-DAG: mvhi 0(%r2), 0114; CHECK-DAG: mvi 4(%r2), 0115; CHECK: br %r14116 call void @llvm.memset.p0.i64(ptr %dest, i8 0, i64 5, i1 false)117 ret void118}119 120; 6 bytes, i32 version.121define void @f13(ptr %dest) {122; CHECK-LABEL: f13:123; CHECK-DAG: mvhi 0(%r2), 0124; CHECK-DAG: mvhhi 4(%r2), 0125; CHECK: br %r14126 call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 6, i1 false)127 ret void128}129 130; 6 bytes, i64 version.131define void @f14(ptr %dest) {132; CHECK-LABEL: f14:133; CHECK-DAG: mvhi 0(%r2), 0134; CHECK-DAG: mvhhi 4(%r2), 0135; CHECK: br %r14136 call void @llvm.memset.p0.i64(ptr %dest, i8 0, i64 6, i1 false)137 ret void138}139 140; 7 bytes, i32 version.141define void @f15(ptr %dest) {142; CHECK-LABEL: f15:143; CHECK: xc 0(7,%r2), 0(%r2)144; CHECK: br %r14145 call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 7, i1 false)146 ret void147}148 149; 7 bytes, i64 version.150define void @f16(ptr %dest) {151; CHECK-LABEL: f16:152; CHECK: xc 0(7,%r2), 0(%r2)153; CHECK: br %r14154 call void @llvm.memset.p0.i64(ptr %dest, i8 0, i64 7, i1 false)155 ret void156}157 158; 8 bytes, i32 version.159define void @f17(ptr %dest) {160; CHECK-LABEL: f17:161; CHECK: mvghi 0(%r2), 0162; CHECK: br %r14163 call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 8, i1 false)164 ret void165}166 167; 8 bytes, i64 version.168define void @f18(ptr %dest) {169; CHECK-LABEL: f18:170; CHECK: mvghi 0(%r2), 0171; CHECK: br %r14172 call void @llvm.memset.p0.i64(ptr %dest, i8 0, i64 8, i1 false)173 ret void174}175 176; 9 bytes, i32 version.177define void @f19(ptr %dest) {178; CHECK-LABEL: f19:179; CHECK-DAG: mvghi 0(%r2), 0180; CHECK-DAG: mvi 8(%r2), 0181; CHECK: br %r14182 call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 9, i1 false)183 ret void184}185 186; 9 bytes, i64 version.187define void @f20(ptr %dest) {188; CHECK-LABEL: f20:189; CHECK-DAG: mvghi 0(%r2), 0190; CHECK-DAG: mvi 8(%r2), 0191; CHECK: br %r14192 call void @llvm.memset.p0.i64(ptr %dest, i8 0, i64 9, i1 false)193 ret void194}195 196; 10 bytes, i32 version.197define void @f21(ptr %dest) {198; CHECK-LABEL: f21:199; CHECK-DAG: mvghi 0(%r2), 0200; CHECK-DAG: mvhhi 8(%r2), 0201; CHECK: br %r14202 call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 10, i1 false)203 ret void204}205 206; 10 bytes, i64 version.207define void @f22(ptr %dest) {208; CHECK-LABEL: f22:209; CHECK-DAG: mvghi 0(%r2), 0210; CHECK-DAG: mvhhi 8(%r2), 0211; CHECK: br %r14212 call void @llvm.memset.p0.i64(ptr %dest, i8 0, i64 10, i1 false)213 ret void214}215 216; 11 bytes, i32 version.217define void @f23(ptr %dest) {218; CHECK-LABEL: f23:219; CHECK: xc 0(11,%r2), 0(%r2)220; CHECK: br %r14221 call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 11, i1 false)222 ret void223}224 225; 11 bytes, i64 version.226define void @f24(ptr %dest) {227; CHECK-LABEL: f24:228; CHECK: xc 0(11,%r2), 0(%r2)229; CHECK: br %r14230 call void @llvm.memset.p0.i64(ptr %dest, i8 0, i64 11, i1 false)231 ret void232}233 234; 12 bytes, i32 version.235define void @f25(ptr %dest) {236; CHECK-LABEL: f25:237; CHECK-DAG: mvghi 0(%r2), 0238; CHECK-DAG: mvhi 8(%r2), 0239; CHECK: br %r14240 call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 12, i1 false)241 ret void242}243 244; 12 bytes, i64 version.245define void @f26(ptr %dest) {246; CHECK-LABEL: f26:247; CHECK-DAG: mvghi 0(%r2), 0248; CHECK-DAG: mvhi 8(%r2), 0249; CHECK: br %r14250 call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 12, i1 false)251 ret void252}253 254; 13 bytes, i32 version.255define void @f27(ptr %dest) {256; CHECK-LABEL: f27:257; CHECK: xc 0(13,%r2), 0(%r2)258; CHECK: br %r14259 call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 13, i1 false)260 ret void261}262 263; 13 bytes, i64 version.264define void @f28(ptr %dest) {265; CHECK-LABEL: f28:266; CHECK: xc 0(13,%r2), 0(%r2)267; CHECK: br %r14268 call void @llvm.memset.p0.i64(ptr %dest, i8 0, i64 13, i1 false)269 ret void270}271 272; 14 bytes, i32 version.273define void @f29(ptr %dest) {274; CHECK-LABEL: f29:275; CHECK: xc 0(14,%r2), 0(%r2)276; CHECK: br %r14277 call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 14, i1 false)278 ret void279}280 281; 14 bytes, i64 version.282define void @f30(ptr %dest) {283; CHECK-LABEL: f30:284; CHECK: xc 0(14,%r2), 0(%r2)285; CHECK: br %r14286 call void @llvm.memset.p0.i64(ptr %dest, i8 0, i64 14, i1 false)287 ret void288}289 290; 15 bytes, i32 version.291define void @f31(ptr %dest) {292; CHECK-LABEL: f31:293; CHECK: xc 0(15,%r2), 0(%r2)294; CHECK: br %r14295 call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 15, i1 false)296 ret void297}298 299; 15 bytes, i64 version.300define void @f32(ptr %dest) {301; CHECK-LABEL: f32:302; CHECK: xc 0(15,%r2), 0(%r2)303; CHECK: br %r14304 call void @llvm.memset.p0.i64(ptr %dest, i8 0, i64 15, i1 false)305 ret void306}307 308; 16 bytes, i32 version.309define void @f33(ptr %dest) {310; CHECK-LABEL: f33:311; CHECK-DAG: mvghi 0(%r2), 0312; CHECK-DAG: mvghi 8(%r2), 0313; CHECK: br %r14314 call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 16, i1 false)315 ret void316}317 318; 16 bytes, i64 version.319define void @f34(ptr %dest) {320; CHECK-LABEL: f34:321; CHECK-DAG: mvghi 0(%r2), 0322; CHECK-DAG: mvghi 8(%r2), 0323; CHECK: br %r14324 call void @llvm.memset.p0.i64(ptr %dest, i8 0, i64 16, i1 false)325 ret void326}327 328; 17 bytes, i32 version.329define void @f35(ptr %dest) {330; CHECK-LABEL: f35:331; CHECK: xc 0(17,%r2), 0(%r2)332; CHECK: br %r14333 call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 17, i1 false)334 ret void335}336 337; 17 bytes, i64 version.338define void @f36(ptr %dest) {339; CHECK-LABEL: f36:340; CHECK: xc 0(17,%r2), 0(%r2)341; CHECK: br %r14342 call void @llvm.memset.p0.i64(ptr %dest, i8 0, i64 17, i1 false)343 ret void344}345 346; 256 bytes, i32 version.347define void @f37(ptr %dest) {348; CHECK-LABEL: f37:349; CHECK: xc 0(256,%r2), 0(%r2)350; CHECK: br %r14351 call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 256, i1 false)352 ret void353}354 355; 256 bytes, i64 version.356define void @f38(ptr %dest) {357; CHECK-LABEL: f38:358; CHECK: xc 0(256,%r2), 0(%r2)359; CHECK: br %r14360 call void @llvm.memset.p0.i64(ptr %dest, i8 0, i64 256, i1 false)361 ret void362}363 364; 257 bytes, i32 version. We need two MVCs.365define void @f39(ptr %dest) {366; CHECK-LABEL: f39:367; CHECK: xc 0(256,%r2), 0(%r2)368; CHECK: xc 256(1,%r2), 256(%r2)369; CHECK: br %r14370 call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 257, i1 false)371 ret void372}373 374; 257 bytes, i64 version.375define void @f40(ptr %dest) {376; CHECK-LABEL: f40:377; CHECK: xc 0(256,%r2), 0(%r2)378; CHECK: xc 256(1,%r2), 256(%r2)379; CHECK: br %r14380 call void @llvm.memset.p0.i64(ptr %dest, i8 0, i64 257, i1 false)381 ret void382}383