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. 6 define <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. 14 define <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. 22 define <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. 30 define <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. 38 define <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. 46 define <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. 54 define <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. 62 define <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. 71 define <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. 79 define <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. 88 define <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. 96 define <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. 105 define <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. 113 define <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. 122 define <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. 130 define <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. 139 define <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. 148 define <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. 156 define <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. 164 define <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