1; Test memsets that clear all bits. 2; 3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s 4 5declare void @llvm.memset.p0i8.i32(i8 *nocapture, i8, i32, i32, i1) nounwind 6declare void @llvm.memset.p0i8.i64(i8 *nocapture, i8, i64, i32, i1) nounwind 7 8; No bytes, i32 version. 9define void @f1(i8 *%dest) { 10; CHECK-LABEL: f1: 11; CHECK-NOT: %r2 12; CHECK: br %r14 13 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 0, i32 1, i1 false) 14 ret void 15} 16 17; No bytes, i64 version. 18define void @f2(i8 *%dest) { 19; CHECK-LABEL: f2: 20; CHECK-NOT: %r2 21; CHECK: br %r14 22 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 0, i32 1, i1 false) 23 ret void 24} 25 26; 1 byte, i32 version. 27define void @f3(i8 *%dest) { 28; CHECK-LABEL: f3: 29; CHECK: mvi 0(%r2), 0 30; CHECK: br %r14 31 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 1, i32 1, i1 false) 32 ret void 33} 34 35; 1 byte, i64 version. 36define void @f4(i8 *%dest) { 37; CHECK-LABEL: f4: 38; CHECK: mvi 0(%r2), 0 39; CHECK: br %r14 40 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 1, i32 1, i1 false) 41 ret void 42} 43 44; 2 bytes, i32 version. 45define void @f5(i8 *%dest) { 46; CHECK-LABEL: f5: 47; CHECK: mvhhi 0(%r2), 0 48; CHECK: br %r14 49 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 2, i32 1, i1 false) 50 ret void 51} 52 53; 2 bytes, i64 version. 54define void @f6(i8 *%dest) { 55; CHECK-LABEL: f6: 56; CHECK: mvhhi 0(%r2), 0 57; CHECK: br %r14 58 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 2, i32 1, i1 false) 59 ret void 60} 61 62; 3 bytes, i32 version. 63define void @f7(i8 *%dest) { 64; CHECK-LABEL: f7: 65; CHECK-DAG: mvhhi 0(%r2), 0 66; CHECK-DAG: mvi 2(%r2), 0 67; CHECK: br %r14 68 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 3, i32 1, i1 false) 69 ret void 70} 71 72; 3 bytes, i64 version. 73define void @f8(i8 *%dest) { 74; CHECK-LABEL: f8: 75; CHECK-DAG: mvhhi 0(%r2), 0 76; CHECK-DAG: mvi 2(%r2), 0 77; CHECK: br %r14 78 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 3, i32 1, i1 false) 79 ret void 80} 81 82; 4 bytes, i32 version. 83define void @f9(i8 *%dest) { 84; CHECK-LABEL: f9: 85; CHECK: mvhi 0(%r2), 0 86; CHECK: br %r14 87 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 4, i32 1, i1 false) 88 ret void 89} 90 91; 4 bytes, i64 version. 92define void @f10(i8 *%dest) { 93; CHECK-LABEL: f10: 94; CHECK: mvhi 0(%r2), 0 95; CHECK: br %r14 96 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 4, i32 1, i1 false) 97 ret void 98} 99 100; 5 bytes, i32 version. 101define void @f11(i8 *%dest) { 102; CHECK-LABEL: f11: 103; CHECK-DAG: mvhi 0(%r2), 0 104; CHECK-DAG: mvi 4(%r2), 0 105; CHECK: br %r14 106 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 5, i32 1, i1 false) 107 ret void 108} 109 110; 5 bytes, i64 version. 111define void @f12(i8 *%dest) { 112; CHECK-LABEL: f12: 113; CHECK-DAG: mvhi 0(%r2), 0 114; CHECK-DAG: mvi 4(%r2), 0 115; CHECK: br %r14 116 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 5, i32 1, i1 false) 117 ret void 118} 119 120; 6 bytes, i32 version. 121define void @f13(i8 *%dest) { 122; CHECK-LABEL: f13: 123; CHECK-DAG: mvhi 0(%r2), 0 124; CHECK-DAG: mvhhi 4(%r2), 0 125; CHECK: br %r14 126 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 6, i32 1, i1 false) 127 ret void 128} 129 130; 6 bytes, i64 version. 131define void @f14(i8 *%dest) { 132; CHECK-LABEL: f14: 133; CHECK-DAG: mvhi 0(%r2), 0 134; CHECK-DAG: mvhhi 4(%r2), 0 135; CHECK: br %r14 136 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 6, i32 1, i1 false) 137 ret void 138} 139 140; 7 bytes, i32 version. 141define void @f15(i8 *%dest) { 142; CHECK-LABEL: f15: 143; CHECK: xc 0(7,%r2), 0(%r2) 144; CHECK: br %r14 145 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 7, i32 1, i1 false) 146 ret void 147} 148 149; 7 bytes, i64 version. 150define void @f16(i8 *%dest) { 151; CHECK-LABEL: f16: 152; CHECK: xc 0(7,%r2), 0(%r2) 153; CHECK: br %r14 154 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 7, i32 1, i1 false) 155 ret void 156} 157 158; 8 bytes, i32 version. 159define void @f17(i8 *%dest) { 160; CHECK-LABEL: f17: 161; CHECK: mvghi 0(%r2), 0 162; CHECK: br %r14 163 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 8, i32 1, i1 false) 164 ret void 165} 166 167; 8 bytes, i64 version. 168define void @f18(i8 *%dest) { 169; CHECK-LABEL: f18: 170; CHECK: mvghi 0(%r2), 0 171; CHECK: br %r14 172 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 8, i32 1, i1 false) 173 ret void 174} 175 176; 9 bytes, i32 version. 177define void @f19(i8 *%dest) { 178; CHECK-LABEL: f19: 179; CHECK-DAG: mvghi 0(%r2), 0 180; CHECK-DAG: mvi 8(%r2), 0 181; CHECK: br %r14 182 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 9, i32 1, i1 false) 183 ret void 184} 185 186; 9 bytes, i64 version. 187define void @f20(i8 *%dest) { 188; CHECK-LABEL: f20: 189; CHECK-DAG: mvghi 0(%r2), 0 190; CHECK-DAG: mvi 8(%r2), 0 191; CHECK: br %r14 192 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 9, i32 1, i1 false) 193 ret void 194} 195 196; 10 bytes, i32 version. 197define void @f21(i8 *%dest) { 198; CHECK-LABEL: f21: 199; CHECK-DAG: mvghi 0(%r2), 0 200; CHECK-DAG: mvhhi 8(%r2), 0 201; CHECK: br %r14 202 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 10, i32 1, i1 false) 203 ret void 204} 205 206; 10 bytes, i64 version. 207define void @f22(i8 *%dest) { 208; CHECK-LABEL: f22: 209; CHECK-DAG: mvghi 0(%r2), 0 210; CHECK-DAG: mvhhi 8(%r2), 0 211; CHECK: br %r14 212 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 10, i32 1, i1 false) 213 ret void 214} 215 216; 11 bytes, i32 version. 217define void @f23(i8 *%dest) { 218; CHECK-LABEL: f23: 219; CHECK: xc 0(11,%r2), 0(%r2) 220; CHECK: br %r14 221 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 11, i32 1, i1 false) 222 ret void 223} 224 225; 11 bytes, i64 version. 226define void @f24(i8 *%dest) { 227; CHECK-LABEL: f24: 228; CHECK: xc 0(11,%r2), 0(%r2) 229; CHECK: br %r14 230 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 11, i32 1, i1 false) 231 ret void 232} 233 234; 12 bytes, i32 version. 235define void @f25(i8 *%dest) { 236; CHECK-LABEL: f25: 237; CHECK-DAG: mvghi 0(%r2), 0 238; CHECK-DAG: mvhi 8(%r2), 0 239; CHECK: br %r14 240 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 12, i32 1, i1 false) 241 ret void 242} 243 244; 12 bytes, i64 version. 245define void @f26(i8 *%dest) { 246; CHECK-LABEL: f26: 247; CHECK-DAG: mvghi 0(%r2), 0 248; CHECK-DAG: mvhi 8(%r2), 0 249; CHECK: br %r14 250 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 12, i32 1, i1 false) 251 ret void 252} 253 254; 13 bytes, i32 version. 255define void @f27(i8 *%dest) { 256; CHECK-LABEL: f27: 257; CHECK: xc 0(13,%r2), 0(%r2) 258; CHECK: br %r14 259 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 13, i32 1, i1 false) 260 ret void 261} 262 263; 13 bytes, i64 version. 264define void @f28(i8 *%dest) { 265; CHECK-LABEL: f28: 266; CHECK: xc 0(13,%r2), 0(%r2) 267; CHECK: br %r14 268 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 13, i32 1, i1 false) 269 ret void 270} 271 272; 14 bytes, i32 version. 273define void @f29(i8 *%dest) { 274; CHECK-LABEL: f29: 275; CHECK: xc 0(14,%r2), 0(%r2) 276; CHECK: br %r14 277 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 14, i32 1, i1 false) 278 ret void 279} 280 281; 14 bytes, i64 version. 282define void @f30(i8 *%dest) { 283; CHECK-LABEL: f30: 284; CHECK: xc 0(14,%r2), 0(%r2) 285; CHECK: br %r14 286 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 14, i32 1, i1 false) 287 ret void 288} 289 290; 15 bytes, i32 version. 291define void @f31(i8 *%dest) { 292; CHECK-LABEL: f31: 293; CHECK: xc 0(15,%r2), 0(%r2) 294; CHECK: br %r14 295 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 15, i32 1, i1 false) 296 ret void 297} 298 299; 15 bytes, i64 version. 300define void @f32(i8 *%dest) { 301; CHECK-LABEL: f32: 302; CHECK: xc 0(15,%r2), 0(%r2) 303; CHECK: br %r14 304 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 15, i32 1, i1 false) 305 ret void 306} 307 308; 16 bytes, i32 version. 309define void @f33(i8 *%dest) { 310; CHECK-LABEL: f33: 311; CHECK-DAG: mvghi 0(%r2), 0 312; CHECK-DAG: mvghi 8(%r2), 0 313; CHECK: br %r14 314 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 16, i32 1, i1 false) 315 ret void 316} 317 318; 16 bytes, i64 version. 319define void @f34(i8 *%dest) { 320; CHECK-LABEL: f34: 321; CHECK-DAG: mvghi 0(%r2), 0 322; CHECK-DAG: mvghi 8(%r2), 0 323; CHECK: br %r14 324 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 16, i32 1, i1 false) 325 ret void 326} 327 328; 17 bytes, i32 version. 329define void @f35(i8 *%dest) { 330; CHECK-LABEL: f35: 331; CHECK: xc 0(17,%r2), 0(%r2) 332; CHECK: br %r14 333 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 17, i32 1, i1 false) 334 ret void 335} 336 337; 17 bytes, i64 version. 338define void @f36(i8 *%dest) { 339; CHECK-LABEL: f36: 340; CHECK: xc 0(17,%r2), 0(%r2) 341; CHECK: br %r14 342 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 17, i32 1, i1 false) 343 ret void 344} 345 346; 256 bytes, i32 version. 347define void @f37(i8 *%dest) { 348; CHECK-LABEL: f37: 349; CHECK: xc 0(256,%r2), 0(%r2) 350; CHECK: br %r14 351 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 256, i32 1, i1 false) 352 ret void 353} 354 355; 256 bytes, i64 version. 356define void @f38(i8 *%dest) { 357; CHECK-LABEL: f38: 358; CHECK: xc 0(256,%r2), 0(%r2) 359; CHECK: br %r14 360 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 256, i32 1, i1 false) 361 ret void 362} 363 364; 257 bytes, i32 version. We need two MVCs. 365define void @f39(i8 *%dest) { 366; CHECK-LABEL: f39: 367; CHECK: xc 0(256,%r2), 0(%r2) 368; CHECK: xc 256(1,%r2), 256(%r2) 369; CHECK: br %r14 370 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 257, i32 1, i1 false) 371 ret void 372} 373 374; 257 bytes, i64 version. 375define void @f40(i8 *%dest) { 376; CHECK-LABEL: f40: 377; CHECK: xc 0(256,%r2), 0(%r2) 378; CHECK: xc 256(1,%r2), 256(%r2) 379; CHECK: br %r14 380 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 257, i32 1, i1 false) 381 ret void 382} 383