Clang Project

clang_source_code/test/CodeGen/zvector2.c
1// 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
195