[SystemZ] Add some generic (floating point support) load instructions.
[oota-llvm.git] / test / CodeGen / SystemZ / vec-const-09.ll
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 }