blob: 909b3fd7650f93606a31106c1d9685bbea1d88a5 [file] [log] [blame]
Ulrich Weigand76976a72017-07-17 17:46:47 +00001// RUN: %clang_cc1 -triple s390x-linux-gnu -target-cpu z14 -fzvector \
2// RUN: -O -emit-llvm -o - -W -Wall -Werror %s | FileCheck %s
3
4volatile vector float ff, ff2;
5volatile vector bool int bi;
6
7void 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
15void 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
23void test_neg (void)
24{
25// CHECK-LABEL: test_neg
26// CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2
27// CHECK: %{{.*}} = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, [[VAL]]
28 ff = -ff2;
29}
30
31void 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
39void 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
47void 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
55void 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
63void 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
72void 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
81void 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
90void 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
99void 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
108void 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
117void 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
126void 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
135void 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
145void 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
155void 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
165void 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
175void 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
185void 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