1; Test memsets that set all bits. 2; 3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s 4 5declare void @llvm.memset.p0i8.i32(i8 *nocapture, i8, i32, i1) nounwind 6declare void @llvm.memset.p0i8.i64(i8 *nocapture, i8, i64, 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 -1, i32 0, 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 -1, i64 0, 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), 255 30; CHECK: br %r14 31 call void @llvm.memset.p0i8.i32(i8* %dest, i8 -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), 255 39; CHECK: br %r14 40 call void @llvm.memset.p0i8.i64(i8* %dest, i8 -1, i64 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), -1 48; CHECK: br %r14 49 call void @llvm.memset.p0i8.i32(i8* %dest, i8 -1, i32 2, 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), -1 57; CHECK: br %r14 58 call void @llvm.memset.p0i8.i64(i8* %dest, i8 -1, i64 2, 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), -1 66; CHECK-DAG: mvi 2(%r2), 255 67; CHECK: br %r14 68 call void @llvm.memset.p0i8.i32(i8* %dest, i8 -1, i32 3, 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), -1 76; CHECK-DAG: mvi 2(%r2), 255 77; CHECK: br %r14 78 call void @llvm.memset.p0i8.i64(i8* %dest, i8 -1, i64 3, 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), -1 86; CHECK: br %r14 87 call void @llvm.memset.p0i8.i32(i8* %dest, i8 -1, i32 4, 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), -1 95; CHECK: br %r14 96 call void @llvm.memset.p0i8.i64(i8* %dest, i8 -1, i64 4, 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), -1 104; CHECK-DAG: mvi 4(%r2), 255 105; CHECK: br %r14 106 call void @llvm.memset.p0i8.i32(i8* %dest, i8 -1, i32 5, 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), -1 114; CHECK-DAG: mvi 4(%r2), 255 115; CHECK: br %r14 116 call void @llvm.memset.p0i8.i64(i8* %dest, i8 -1, i64 5, 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), -1 124; CHECK-DAG: mvhhi 4(%r2), -1 125; CHECK: br %r14 126 call void @llvm.memset.p0i8.i32(i8* %dest, i8 -1, i32 6, 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), -1 134; CHECK-DAG: mvhhi 4(%r2), -1 135; CHECK: br %r14 136 call void @llvm.memset.p0i8.i64(i8* %dest, i8 -1, i64 6, i1 false) 137 ret void 138} 139 140; 7 bytes, i32 version. 141define void @f15(i8* %dest) { 142; CHECK-LABEL: f15: 143; CHECK: mvi 0(%r2), 255 144; CHECK: mvc 1(6,%r2), 0(%r2) 145; CHECK: br %r14 146 call void @llvm.memset.p0i8.i32(i8* %dest, i8 -1, i32 7, i1 false) 147 ret void 148} 149 150; 7 bytes, i64 version. 151define void @f16(i8* %dest) { 152; CHECK-LABEL: f16: 153; CHECK: mvi 0(%r2), 255 154; CHECK: mvc 1(6,%r2), 0(%r2) 155; CHECK: br %r14 156 call void @llvm.memset.p0i8.i64(i8* %dest, i8 -1, i64 7, i1 false) 157 ret void 158} 159 160; 8 bytes, i32 version. 161define void @f17(i8* %dest) { 162; CHECK-LABEL: f17: 163; CHECK: mvghi 0(%r2), -1 164; CHECK: br %r14 165 call void @llvm.memset.p0i8.i32(i8* %dest, i8 -1, i32 8, i1 false) 166 ret void 167} 168 169; 8 bytes, i64 version. 170define void @f18(i8* %dest) { 171; CHECK-LABEL: f18: 172; CHECK: mvghi 0(%r2), -1 173; CHECK: br %r14 174 call void @llvm.memset.p0i8.i64(i8* %dest, i8 -1, i64 8, i1 false) 175 ret void 176} 177 178; 9 bytes, i32 version. 179define void @f19(i8* %dest) { 180; CHECK-LABEL: f19: 181; CHECK-DAG: mvghi 0(%r2), -1 182; CHECK-DAG: mvi 8(%r2), 255 183; CHECK: br %r14 184 call void @llvm.memset.p0i8.i32(i8* %dest, i8 -1, i32 9, i1 false) 185 ret void 186} 187 188; 9 bytes, i64 version. 189define void @f20(i8* %dest) { 190; CHECK-LABEL: f20: 191; CHECK-DAG: mvghi 0(%r2), -1 192; CHECK-DAG: mvi 8(%r2), 255 193; CHECK: br %r14 194 call void @llvm.memset.p0i8.i64(i8* %dest, i8 -1, i64 9, i1 false) 195 ret void 196} 197 198; 10 bytes, i32 version. 199define void @f21(i8* %dest) { 200; CHECK-LABEL: f21: 201; CHECK-DAG: mvghi 0(%r2), -1 202; CHECK-DAG: mvhhi 8(%r2), -1 203; CHECK: br %r14 204 call void @llvm.memset.p0i8.i32(i8* %dest, i8 -1, i32 10, i1 false) 205 ret void 206} 207 208; 10 bytes, i64 version. 209define void @f22(i8* %dest) { 210; CHECK-LABEL: f22: 211; CHECK-DAG: mvghi 0(%r2), -1 212; CHECK-DAG: mvhhi 8(%r2), -1 213; CHECK: br %r14 214 call void @llvm.memset.p0i8.i64(i8* %dest, i8 -1, i64 10, i1 false) 215 ret void 216} 217 218; 11 bytes, i32 version. 219define void @f23(i8* %dest) { 220; CHECK-LABEL: f23: 221; CHECK: mvi 0(%r2), 255 222; CHECK: mvc 1(10,%r2), 0(%r2) 223; CHECK: br %r14 224 call void @llvm.memset.p0i8.i32(i8* %dest, i8 -1, i32 11, i1 false) 225 ret void 226} 227 228; 11 bytes, i64 version. 229define void @f24(i8* %dest) { 230; CHECK-LABEL: f24: 231; CHECK: mvi 0(%r2), 255 232; CHECK: mvc 1(10,%r2), 0(%r2) 233; CHECK: br %r14 234 call void @llvm.memset.p0i8.i64(i8* %dest, i8 -1, i64 11, i1 false) 235 ret void 236} 237 238; 12 bytes, i32 version. 239define void @f25(i8* %dest) { 240; CHECK-LABEL: f25: 241; CHECK-DAG: mvghi 0(%r2), -1 242; CHECK-DAG: mvhi 8(%r2), -1 243; CHECK: br %r14 244 call void @llvm.memset.p0i8.i32(i8* %dest, i8 -1, i32 12, i1 false) 245 ret void 246} 247 248; 12 bytes, i64 version. 249define void @f26(i8* %dest) { 250; CHECK-LABEL: f26: 251; CHECK-DAG: mvghi 0(%r2), -1 252; CHECK-DAG: mvhi 8(%r2), -1 253; CHECK: br %r14 254 call void @llvm.memset.p0i8.i64(i8* %dest, i8 -1, i64 12, i1 false) 255 ret void 256} 257 258; 13 bytes, i32 version. 259define void @f27(i8* %dest) { 260; CHECK-LABEL: f27: 261; CHECK: mvi 0(%r2), 255 262; CHECK: mvc 1(12,%r2), 0(%r2) 263; CHECK: br %r14 264 call void @llvm.memset.p0i8.i32(i8* %dest, i8 -1, i32 13, i1 false) 265 ret void 266} 267 268; 13 bytes, i64 version. 269define void @f28(i8* %dest) { 270; CHECK-LABEL: f28: 271; CHECK: mvi 0(%r2), 255 272; CHECK: mvc 1(12,%r2), 0(%r2) 273; CHECK: br %r14 274 call void @llvm.memset.p0i8.i64(i8* %dest, i8 -1, i64 13, i1 false) 275 ret void 276} 277 278; 14 bytes, i32 version. 279define void @f29(i8* %dest) { 280; CHECK-LABEL: f29: 281; CHECK: mvi 0(%r2), 255 282; CHECK: mvc 1(13,%r2), 0(%r2) 283; CHECK: br %r14 284 call void @llvm.memset.p0i8.i32(i8* %dest, i8 -1, i32 14, i1 false) 285 ret void 286} 287 288; 14 bytes, i64 version. 289define void @f30(i8* %dest) { 290; CHECK-LABEL: f30: 291; CHECK: mvi 0(%r2), 255 292; CHECK: mvc 1(13,%r2), 0(%r2) 293; CHECK: br %r14 294 call void @llvm.memset.p0i8.i64(i8* %dest, i8 -1, i64 14, i1 false) 295 ret void 296} 297 298; 15 bytes, i32 version. 299define void @f31(i8* %dest) { 300; CHECK-LABEL: f31: 301; CHECK: mvi 0(%r2), 255 302; CHECK: mvc 1(14,%r2), 0(%r2) 303; CHECK: br %r14 304 call void @llvm.memset.p0i8.i32(i8* %dest, i8 -1, i32 15, i1 false) 305 ret void 306} 307 308; 15 bytes, i64 version. 309define void @f32(i8* %dest) { 310; CHECK-LABEL: f32: 311; CHECK: mvi 0(%r2), 255 312; CHECK: mvc 1(14,%r2), 0(%r2) 313; CHECK: br %r14 314 call void @llvm.memset.p0i8.i64(i8* %dest, i8 -1, i64 15, i1 false) 315 ret void 316} 317 318; 16 bytes, i32 version. 319define void @f33(i8* %dest) { 320; CHECK-LABEL: f33: 321; CHECK-DAG: mvghi 0(%r2), -1 322; CHECK-DAG: mvghi 8(%r2), -1 323; CHECK: br %r14 324 call void @llvm.memset.p0i8.i32(i8* %dest, i8 -1, i32 16, i1 false) 325 ret void 326} 327 328; 16 bytes, i64 version. 329define void @f34(i8* %dest) { 330; CHECK-LABEL: f34: 331; CHECK-DAG: mvghi 0(%r2), -1 332; CHECK-DAG: mvghi 8(%r2), -1 333; CHECK: br %r14 334 call void @llvm.memset.p0i8.i64(i8* %dest, i8 -1, i64 16, i1 false) 335 ret void 336} 337 338; 17 bytes, i32 version. 339define void @f35(i8* %dest) { 340; CHECK-LABEL: f35: 341; CHECK: mvi 0(%r2), 255 342; CHECK: mvc 1(16,%r2), 0(%r2) 343; CHECK: br %r14 344 call void @llvm.memset.p0i8.i32(i8* %dest, i8 -1, i32 17, i1 false) 345 ret void 346} 347 348; 17 bytes, i64 version. 349define void @f36(i8* %dest) { 350; CHECK-LABEL: f36: 351; CHECK: mvi 0(%r2), 255 352; CHECK: mvc 1(16,%r2), 0(%r2) 353; CHECK: br %r14 354 call void @llvm.memset.p0i8.i64(i8* %dest, i8 -1, i64 17, i1 false) 355 ret void 356} 357 358; 257 bytes, i32 version. 359define void @f37(i8* %dest) { 360; CHECK-LABEL: f37: 361; CHECK: mvi 0(%r2), 255 362; CHECK: mvc 1(256,%r2), 0(%r2) 363; CHECK: br %r14 364 call void @llvm.memset.p0i8.i32(i8* %dest, i8 -1, i32 257, i1 false) 365 ret void 366} 367 368; 257 bytes, i64 version. 369define void @f38(i8* %dest) { 370; CHECK-LABEL: f38: 371; CHECK: mvi 0(%r2), 255 372; CHECK: mvc 1(256,%r2), 0(%r2) 373; CHECK: br %r14 374 call void @llvm.memset.p0i8.i64(i8* %dest, i8 -1, i64 257, i1 false) 375 ret void 376} 377 378; 258 bytes, i32 version. We need two MVCs. 379define void @f39(i8* %dest) { 380; CHECK-LABEL: f39: 381; CHECK: mvi 0(%r2), 255 382; CHECK: mvc 1(256,%r2), 0(%r2) 383; CHECK: mvc 257(1,%r2), 256(%r2) 384; CHECK: br %r14 385 call void @llvm.memset.p0i8.i32(i8* %dest, i8 -1, i32 258, i1 false) 386 ret void 387} 388 389; 258 bytes, i64 version. 390define void @f40(i8* %dest) { 391; CHECK-LABEL: f40: 392; CHECK: mvi 0(%r2), 255 393; CHECK: mvc 1(256,%r2), 0(%r2) 394; CHECK: mvc 257(1,%r2), 256(%r2) 395; CHECK: br %r14 396 call void @llvm.memset.p0i8.i64(i8* %dest, i8 -1, i64 258, i1 false) 397 ret void 398} 399