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