1 // RUN: %clang_cc1 -no-opaque-pointers -triple s390x-linux-gnu -target-cpu z14 -fzvector \
2 // RUN: -O -emit-llvm -o - -W -Wall -Werror %s | FileCheck %s
3
4 volatile vector float ff, ff2;
5 volatile vector bool int bi;
6
test_assign(void)7 void test_assign (void)
8 {
9 // CHECK-LABEL: test_assign
10 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
11 // CHECK: store volatile <4 x float> [[VAL]], <4 x float>* @ff
12 ff = ff2;
13 }
14
test_pos(void)15 void test_pos (void)
16 {
17 // CHECK-LABEL: test_pos
18 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
19 // CHECK: store volatile <4 x float> [[VAL]], <4 x float>* @ff
20 ff = +ff2;
21 }
22
test_neg(void)23 void test_neg (void)
24 {
25 // CHECK-LABEL: test_neg
26 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
27 // CHECK: %{{.*}} = fneg <4 x float> [[VAL]]
28 ff = -ff2;
29 }
30
test_preinc(void)31 void test_preinc (void)
32 {
33 // CHECK-LABEL: test_preinc
34 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
35 // CHECK: %{{.*}} = fadd <4 x float> [[VAL]], <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>
36 ++ff2;
37 }
38
test_postinc(void)39 void test_postinc (void)
40 {
41 // CHECK-LABEL: test_postinc
42 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
43 // CHECK: %{{.*}} = fadd <4 x float> [[VAL]], <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>
44 ff2++;
45 }
46
test_predec(void)47 void test_predec (void)
48 {
49 // CHECK-LABEL: test_predec
50 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
51 // CHECK: %{{.*}} = fadd <4 x float> [[VAL]], <float -1.000000e+00, float -1.000000e+00, float -1.000000e+00, float -1.000000e+00>
52 --ff2;
53 }
54
test_postdec(void)55 void test_postdec (void)
56 {
57 // CHECK-LABEL: test_postdec
58 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
59 // CHECK: %{{.*}} = fadd <4 x float> [[VAL]], <float -1.000000e+00, float -1.000000e+00, float -1.000000e+00, float -1.000000e+00>
60 ff2--;
61 }
62
test_add(void)63 void test_add (void)
64 {
65 // CHECK-LABEL: test_add
66 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff
67 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
68 // CHECK: %{{.*}} = fadd <4 x float> [[VAL1]], [[VAL2]]
69 ff = ff + ff2;
70 }
71
test_add_assign(void)72 void test_add_assign (void)
73 {
74 // CHECK-LABEL: test_add_assign
75 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
76 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff
77 // CHECK: %{{.*}} = fadd <4 x float> [[VAL2]], [[VAL1]]
78 ff += ff2;
79 }
80
test_sub(void)81 void test_sub (void)
82 {
83 // CHECK-LABEL: test_sub
84 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff
85 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
86 // CHECK: %{{.*}} = fsub <4 x float> [[VAL1]], [[VAL2]]
87 ff = ff - ff2;
88 }
89
test_sub_assign(void)90 void test_sub_assign (void)
91 {
92 // CHECK-LABEL: test_sub_assign
93 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
94 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff
95 // CHECK: %{{.*}} = fsub <4 x float> [[VAL1]], [[VAL2]]
96 ff -= ff2;
97 }
98
test_mul(void)99 void test_mul (void)
100 {
101 // CHECK-LABEL: test_mul
102 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff
103 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
104 // CHECK: %{{.*}} = fmul <4 x float> [[VAL1]], [[VAL2]]
105 ff = ff * ff2;
106 }
107
test_mul_assign(void)108 void test_mul_assign (void)
109 {
110 // CHECK-LABEL: test_mul_assign
111 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
112 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff
113 // CHECK: %{{.*}} = fmul <4 x float> [[VAL2]], [[VAL1]]
114 ff *= ff2;
115 }
116
test_div(void)117 void test_div (void)
118 {
119 // CHECK-LABEL: test_div
120 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff
121 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
122 // CHECK: %{{.*}} = fdiv <4 x float> [[VAL1]], [[VAL2]]
123 ff = ff / ff2;
124 }
125
test_div_assign(void)126 void test_div_assign (void)
127 {
128 // CHECK-LABEL: test_div_assign
129 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
130 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff
131 // CHECK: %{{.*}} = fdiv <4 x float> [[VAL1]], [[VAL2]]
132 ff /= ff2;
133 }
134
test_cmpeq(void)135 void test_cmpeq (void)
136 {
137 // CHECK-LABEL: test_cmpeq
138 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff
139 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
140 // CHECK: [[CMP:%[^ ]+]] = fcmp oeq <4 x float> [[VAL1]], [[VAL2]]
141 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
142 bi = ff == ff2;
143 }
144
test_cmpne(void)145 void test_cmpne (void)
146 {
147 // CHECK-LABEL: test_cmpne
148 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff
149 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
150 // CHECK: [[CMP:%[^ ]+]] = fcmp une <4 x float> [[VAL1]], [[VAL2]]
151 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
152 bi = ff != ff2;
153 }
154
test_cmpge(void)155 void test_cmpge (void)
156 {
157 // CHECK-LABEL: test_cmpge
158 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff
159 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
160 // CHECK: [[CMP:%[^ ]+]] = fcmp oge <4 x float> [[VAL1]], [[VAL2]]
161 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
162 bi = ff >= ff2;
163 }
164
test_cmpgt(void)165 void test_cmpgt (void)
166 {
167 // CHECK-LABEL: test_cmpgt
168 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff
169 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
170 // CHECK: [[CMP:%[^ ]+]] = fcmp ogt <4 x float> [[VAL1]], [[VAL2]]
171 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
172 bi = ff > ff2;
173 }
174
test_cmple(void)175 void test_cmple (void)
176 {
177 // CHECK-LABEL: test_cmple
178 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff
179 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
180 // CHECK: [[CMP:%[^ ]+]] = fcmp ole <4 x float> [[VAL1]], [[VAL2]]
181 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
182 bi = ff <= ff2;
183 }
184
test_cmplt(void)185 void test_cmplt (void)
186 {
187 // CHECK-LABEL: test_cmplt
188 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff
189 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
190 // CHECK: [[CMP:%[^ ]+]] = fcmp olt <4 x float> [[VAL1]], [[VAL2]]
191 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
192 bi = ff < ff2;
193 }
194
195