1*9880d681SAndroid Build Coastguard Worker; Test memset in cases where the set value is a constant other than 0 and -1. 2*9880d681SAndroid Build Coastguard Worker; 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.memset.p0i8.i32(i8 *nocapture, i8, i32, i32, i1) nounwind 6*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.memset.p0i8.i64(i8 *nocapture, i8, i64, i32, i1) nounwind 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker; No bytes, i32 version. 9*9880d681SAndroid Build Coastguard Workerdefine void @f1(i8 *%dest) { 10*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1: 11*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r2 12*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 13*9880d681SAndroid Build Coastguard Worker call void @llvm.memset.p0i8.i32(i8 *%dest, i8 128, i32 0, i32 1, i1 false) 14*9880d681SAndroid Build Coastguard Worker ret void 15*9880d681SAndroid Build Coastguard Worker} 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker; No bytes, i64 version. 18*9880d681SAndroid Build Coastguard Workerdefine void @f2(i8 *%dest) { 19*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2: 20*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r2 21*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 22*9880d681SAndroid Build Coastguard Worker call void @llvm.memset.p0i8.i64(i8 *%dest, i8 128, i64 0, i32 1, i1 false) 23*9880d681SAndroid Build Coastguard Worker ret void 24*9880d681SAndroid Build Coastguard Worker} 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker; 1 byte, i32 version. 27*9880d681SAndroid Build Coastguard Workerdefine void @f3(i8 *%dest) { 28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3: 29*9880d681SAndroid Build Coastguard Worker; CHECK: mvi 0(%r2), 128 30*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 31*9880d681SAndroid Build Coastguard Worker call void @llvm.memset.p0i8.i32(i8 *%dest, i8 128, i32 1, i32 1, i1 false) 32*9880d681SAndroid Build Coastguard Worker ret void 33*9880d681SAndroid Build Coastguard Worker} 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Worker; 1 byte, i64 version. 36*9880d681SAndroid Build Coastguard Workerdefine void @f4(i8 *%dest) { 37*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4: 38*9880d681SAndroid Build Coastguard Worker; CHECK: mvi 0(%r2), 128 39*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 40*9880d681SAndroid Build Coastguard Worker call void @llvm.memset.p0i8.i64(i8 *%dest, i8 128, i64 1, i32 1, i1 false) 41*9880d681SAndroid Build Coastguard Worker ret void 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker; 2 bytes, i32 version. 45*9880d681SAndroid Build Coastguard Workerdefine void @f5(i8 *%dest) { 46*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f5: 47*9880d681SAndroid Build Coastguard Worker; CHECK: mvhhi 0(%r2), -32640 48*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 49*9880d681SAndroid Build Coastguard Worker call void @llvm.memset.p0i8.i32(i8 *%dest, i8 128, i32 2, i32 1, i1 false) 50*9880d681SAndroid Build Coastguard Worker ret void 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker; 2 bytes, i64 version. 54*9880d681SAndroid Build Coastguard Workerdefine void @f6(i8 *%dest) { 55*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f6: 56*9880d681SAndroid Build Coastguard Worker; CHECK: mvhhi 0(%r2), -32640 57*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 58*9880d681SAndroid Build Coastguard Worker call void @llvm.memset.p0i8.i64(i8 *%dest, i8 128, i64 2, i32 1, i1 false) 59*9880d681SAndroid Build Coastguard Worker ret void 60*9880d681SAndroid Build Coastguard Worker} 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Worker; 3 bytes, i32 version. 63*9880d681SAndroid Build Coastguard Workerdefine void @f7(i8 *%dest) { 64*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f7: 65*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: mvhhi 0(%r2), -32640 66*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: mvi 2(%r2), 128 67*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 68*9880d681SAndroid Build Coastguard Worker call void @llvm.memset.p0i8.i32(i8 *%dest, i8 128, i32 3, i32 1, i1 false) 69*9880d681SAndroid Build Coastguard Worker ret void 70*9880d681SAndroid Build Coastguard Worker} 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Worker; 3 bytes, i64 version. 73*9880d681SAndroid Build Coastguard Workerdefine void @f8(i8 *%dest) { 74*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f8: 75*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: mvhhi 0(%r2), -32640 76*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: mvi 2(%r2), 128 77*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 78*9880d681SAndroid Build Coastguard Worker call void @llvm.memset.p0i8.i64(i8 *%dest, i8 128, i64 3, i32 1, i1 false) 79*9880d681SAndroid Build Coastguard Worker ret void 80*9880d681SAndroid Build Coastguard Worker} 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Worker; 4 bytes, i32 version. 83*9880d681SAndroid Build Coastguard Workerdefine void @f9(i8 *%dest) { 84*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f9: 85*9880d681SAndroid Build Coastguard Worker; CHECK: iilf [[REG:%r[0-5]]], 2155905152 86*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 87*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 88*9880d681SAndroid Build Coastguard Worker call void @llvm.memset.p0i8.i32(i8 *%dest, i8 128, i32 4, i32 1, i1 false) 89*9880d681SAndroid Build Coastguard Worker ret void 90*9880d681SAndroid Build Coastguard Worker} 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Worker; 4 bytes, i64 version. 93*9880d681SAndroid Build Coastguard Workerdefine void @f10(i8 *%dest) { 94*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f10: 95*9880d681SAndroid Build Coastguard Worker; CHECK: iilf [[REG:%r[0-5]]], 2155905152 96*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 97*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 98*9880d681SAndroid Build Coastguard Worker call void @llvm.memset.p0i8.i64(i8 *%dest, i8 128, i64 4, i32 1, i1 false) 99*9880d681SAndroid Build Coastguard Worker ret void 100*9880d681SAndroid Build Coastguard Worker} 101*9880d681SAndroid Build Coastguard Worker 102*9880d681SAndroid Build Coastguard Worker; 5 bytes, i32 version. 103*9880d681SAndroid Build Coastguard Workerdefine void @f11(i8 *%dest) { 104*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f11: 105*9880d681SAndroid Build Coastguard Worker; CHECK: mvi 0(%r2), 128 106*9880d681SAndroid Build Coastguard Worker; CHECK: mvc 1(4,%r2), 0(%r2) 107*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 108*9880d681SAndroid Build Coastguard Worker call void @llvm.memset.p0i8.i32(i8 *%dest, i8 128, i32 5, i32 1, i1 false) 109*9880d681SAndroid Build Coastguard Worker ret void 110*9880d681SAndroid Build Coastguard Worker} 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Worker; 5 bytes, i64 version. 113*9880d681SAndroid Build Coastguard Workerdefine void @f12(i8 *%dest) { 114*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f12: 115*9880d681SAndroid Build Coastguard Worker; CHECK: mvi 0(%r2), 128 116*9880d681SAndroid Build Coastguard Worker; CHECK: mvc 1(4,%r2), 0(%r2) 117*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 118*9880d681SAndroid Build Coastguard Worker call void @llvm.memset.p0i8.i64(i8 *%dest, i8 128, i64 5, i32 1, i1 false) 119*9880d681SAndroid Build Coastguard Worker ret void 120*9880d681SAndroid Build Coastguard Worker} 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Worker; 257 bytes, i32 version. 123*9880d681SAndroid Build Coastguard Workerdefine void @f13(i8 *%dest) { 124*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f13: 125*9880d681SAndroid Build Coastguard Worker; CHECK: mvi 0(%r2), 128 126*9880d681SAndroid Build Coastguard Worker; CHECK: mvc 1(256,%r2), 0(%r2) 127*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 128*9880d681SAndroid Build Coastguard Worker call void @llvm.memset.p0i8.i32(i8 *%dest, i8 128, i32 257, i32 1, i1 false) 129*9880d681SAndroid Build Coastguard Worker ret void 130*9880d681SAndroid Build Coastguard Worker} 131*9880d681SAndroid Build Coastguard Worker 132*9880d681SAndroid Build Coastguard Worker; 257 bytes, i64 version. 133*9880d681SAndroid Build Coastguard Workerdefine void @f14(i8 *%dest) { 134*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f14: 135*9880d681SAndroid Build Coastguard Worker; CHECK: mvi 0(%r2), 128 136*9880d681SAndroid Build Coastguard Worker; CHECK: mvc 1(256,%r2), 0(%r2) 137*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 138*9880d681SAndroid Build Coastguard Worker call void @llvm.memset.p0i8.i64(i8 *%dest, i8 128, i64 257, i32 1, i1 false) 139*9880d681SAndroid Build Coastguard Worker ret void 140*9880d681SAndroid Build Coastguard Worker} 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Worker; 258 bytes, i32 version. We need two MVCs. 143*9880d681SAndroid Build Coastguard Workerdefine void @f15(i8 *%dest) { 144*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f15: 145*9880d681SAndroid Build Coastguard Worker; CHECK: mvi 0(%r2), 128 146*9880d681SAndroid Build Coastguard Worker; CHECK: mvc 1(256,%r2), 0(%r2) 147*9880d681SAndroid Build Coastguard Worker; CHECK: mvc 257(1,%r2), 256(%r2) 148*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 149*9880d681SAndroid Build Coastguard Worker call void @llvm.memset.p0i8.i32(i8 *%dest, i8 128, i32 258, i32 1, i1 false) 150*9880d681SAndroid Build Coastguard Worker ret void 151*9880d681SAndroid Build Coastguard Worker} 152*9880d681SAndroid Build Coastguard Worker 153*9880d681SAndroid Build Coastguard Worker; 258 bytes, i64 version. 154*9880d681SAndroid Build Coastguard Workerdefine void @f16(i8 *%dest) { 155*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f16: 156*9880d681SAndroid Build Coastguard Worker; CHECK: mvi 0(%r2), 128 157*9880d681SAndroid Build Coastguard Worker; CHECK: mvc 1(256,%r2), 0(%r2) 158*9880d681SAndroid Build Coastguard Worker; CHECK: mvc 257(1,%r2), 256(%r2) 159*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 160*9880d681SAndroid Build Coastguard Worker call void @llvm.memset.p0i8.i64(i8 *%dest, i8 128, i64 258, i32 1, i1 false) 161*9880d681SAndroid Build Coastguard Worker ret void 162*9880d681SAndroid Build Coastguard Worker} 163