1*9880d681SAndroid Build Coastguard Worker; Test vector replicates, v2i64 version. 2*9880d681SAndroid Build Coastguard Worker; 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; Test a byte-granularity replicate with the lowest useful value. 6*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f1() { 7*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1: 8*9880d681SAndroid Build Coastguard Worker; CHECK: vrepib %v24, 1 9*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 10*9880d681SAndroid Build Coastguard Worker ret <2 x i64> <i64 72340172838076673, i64 72340172838076673> 11*9880d681SAndroid Build Coastguard Worker} 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker; Test a byte-granularity replicate with an arbitrary value. 14*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f2() { 15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2: 16*9880d681SAndroid Build Coastguard Worker; CHECK: vrepib %v24, -55 17*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 18*9880d681SAndroid Build Coastguard Worker ret <2 x i64> <i64 -3906369333256140343, i64 -3906369333256140343> 19*9880d681SAndroid Build Coastguard Worker} 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker; Test a byte-granularity replicate with the highest useful value. 22*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f3() { 23*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3: 24*9880d681SAndroid Build Coastguard Worker; CHECK: vrepib %v24, -2 25*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 26*9880d681SAndroid Build Coastguard Worker ret <2 x i64> <i64 -72340172838076674, i64 -72340172838076674> 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Worker; Test a halfword-granularity replicate with the lowest useful value. 30*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f4() { 31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4: 32*9880d681SAndroid Build Coastguard Worker; CHECK: vrepih %v24, 1 33*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 34*9880d681SAndroid Build Coastguard Worker ret <2 x i64> <i64 281479271743489, i64 281479271743489> 35*9880d681SAndroid Build Coastguard Worker} 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker; Test a halfword-granularity replicate with an arbitrary value. 38*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f5() { 39*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f5: 40*9880d681SAndroid Build Coastguard Worker; CHECK: vrepih %v24, 25650 41*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 42*9880d681SAndroid Build Coastguard Worker ret <2 x i64> <i64 7219943320220492850, i64 7219943320220492850> 43*9880d681SAndroid Build Coastguard Worker} 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker; Test a halfword-granularity replicate with the highest useful value. 46*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f6() { 47*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f6: 48*9880d681SAndroid Build Coastguard Worker; CHECK: vrepih %v24, -2 49*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 50*9880d681SAndroid Build Coastguard Worker ret <2 x i64> <i64 -281479271743490, i64 -281479271743490> 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker; Test a word-granularity replicate with the lowest useful positive value. 54*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f7() { 55*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f7: 56*9880d681SAndroid Build Coastguard Worker; CHECK: vrepif %v24, 1 57*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 58*9880d681SAndroid Build Coastguard Worker ret <2 x i64> <i64 4294967297, i64 4294967297> 59*9880d681SAndroid Build Coastguard Worker} 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Worker; Test a word-granularity replicate with the highest in-range value. 62*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f8() { 63*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f8: 64*9880d681SAndroid Build Coastguard Worker; CHECK: vrepif %v24, 32767 65*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 66*9880d681SAndroid Build Coastguard Worker ret <2 x i64> <i64 140733193420799, i64 140733193420799> 67*9880d681SAndroid Build Coastguard Worker} 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Worker; Test a word-granularity replicate with the next highest value. 70*9880d681SAndroid Build Coastguard Worker; This cannot use VREPIF. 71*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f9() { 72*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f9: 73*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vrepif 74*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 75*9880d681SAndroid Build Coastguard Worker ret <2 x i64> <i64 140737488388096, i64 140737488388096> 76*9880d681SAndroid Build Coastguard Worker} 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Worker; Test a word-granularity replicate with the lowest in-range value. 79*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f10() { 80*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f10: 81*9880d681SAndroid Build Coastguard Worker; CHECK: vrepif %v24, -32768 82*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 83*9880d681SAndroid Build Coastguard Worker ret <2 x i64> <i64 -140733193420800, i64 -140733193420800> 84*9880d681SAndroid Build Coastguard Worker} 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Worker; Test a word-granularity replicate with the next lowest value. 87*9880d681SAndroid Build Coastguard Worker; This cannot use VREPIF. 88*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f11() { 89*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f11: 90*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vrepif 91*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 92*9880d681SAndroid Build Coastguard Worker ret <2 x i64> <i64 -140737488388097, i64 -140737488388097> 93*9880d681SAndroid Build Coastguard Worker} 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Worker; Test a word-granularity replicate with the highest useful negative value. 96*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f12() { 97*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f12: 98*9880d681SAndroid Build Coastguard Worker; CHECK: vrepif %v24, -2 99*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 100*9880d681SAndroid Build Coastguard Worker ret <2 x i64> <i64 -4294967298, i64 -4294967298> 101*9880d681SAndroid Build Coastguard Worker} 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Worker; Test a doubleword-granularity replicate with the lowest useful positive 104*9880d681SAndroid Build Coastguard Worker; value. 105*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f13() { 106*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f13: 107*9880d681SAndroid Build Coastguard Worker; CHECK: vrepig %v24, 1 108*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 109*9880d681SAndroid Build Coastguard Worker ret <2 x i64> <i64 1, i64 1> 110*9880d681SAndroid Build Coastguard Worker} 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Worker; Test a doubleword-granularity replicate with the highest in-range value. 113*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f14() { 114*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f14: 115*9880d681SAndroid Build Coastguard Worker; CHECK: vrepig %v24, 32767 116*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 117*9880d681SAndroid Build Coastguard Worker ret <2 x i64> <i64 32767, i64 32767> 118*9880d681SAndroid Build Coastguard Worker} 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Worker; Test a doubleword-granularity replicate with the next highest value. 121*9880d681SAndroid Build Coastguard Worker; This cannot use VREPIG. 122*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f15() { 123*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f15: 124*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vrepig 125*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 126*9880d681SAndroid Build Coastguard Worker ret <2 x i64> <i64 32768, i64 32768> 127*9880d681SAndroid Build Coastguard Worker} 128*9880d681SAndroid Build Coastguard Worker 129*9880d681SAndroid Build Coastguard Worker; Test a doubleword-granularity replicate with the lowest in-range value. 130*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f16() { 131*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f16: 132*9880d681SAndroid Build Coastguard Worker; CHECK: vrepig %v24, -32768 133*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 134*9880d681SAndroid Build Coastguard Worker ret <2 x i64> <i64 -32768, i64 -32768> 135*9880d681SAndroid Build Coastguard Worker} 136*9880d681SAndroid Build Coastguard Worker 137*9880d681SAndroid Build Coastguard Worker; Test a doubleword-granularity replicate with the next lowest value. 138*9880d681SAndroid Build Coastguard Worker; This cannot use VREPIG. 139*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f17() { 140*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f17: 141*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vrepig 142*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 143*9880d681SAndroid Build Coastguard Worker ret <2 x i64> <i64 -32769, i64 -32769> 144*9880d681SAndroid Build Coastguard Worker} 145*9880d681SAndroid Build Coastguard Worker 146*9880d681SAndroid Build Coastguard Worker; Test a doubleword-granularity replicate with the highest useful negative 147*9880d681SAndroid Build Coastguard Worker; value. 148*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f18() { 149*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f18: 150*9880d681SAndroid Build Coastguard Worker; CHECK: vrepig %v24, -2 151*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 152*9880d681SAndroid Build Coastguard Worker ret <2 x i64> <i64 -2, i64 -2> 153*9880d681SAndroid Build Coastguard Worker} 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Worker; Repeat f14 with undefs optimistically treated as 32767. 156*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f19() { 157*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f19: 158*9880d681SAndroid Build Coastguard Worker; CHECK: vrepig %v24, 32767 159*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 160*9880d681SAndroid Build Coastguard Worker ret <2 x i64> <i64 undef, i64 32767> 161*9880d681SAndroid Build Coastguard Worker} 162*9880d681SAndroid Build Coastguard Worker 163*9880d681SAndroid Build Coastguard Worker; Repeat f18 with undefs optimistically treated as -2. 164*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f20() { 165*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f20: 166*9880d681SAndroid Build Coastguard Worker; CHECK: vrepig %v24, -2 167*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 168*9880d681SAndroid Build Coastguard Worker ret <2 x i64> <i64 undef, i64 -2> 169*9880d681SAndroid Build Coastguard Worker} 170