File: builtins-systemz-zvector3-constrained.c

package info (click to toggle)
llvm-toolchain-15 1%3A15.0.6-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,554,644 kB
  • sloc: cpp: 5,922,452; ansic: 1,012,136; asm: 674,362; python: 191,568; objc: 73,855; f90: 42,327; lisp: 31,913; pascal: 11,973; javascript: 10,144; sh: 9,421; perl: 7,447; ml: 5,527; awk: 3,523; makefile: 2,520; xml: 885; cs: 573; fortran: 567
file content (109 lines) | stat: -rw-r--r-- 3,447 bytes parent folder | download | duplicates (21)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// REQUIRES: systemz-registered-target
// RUN: %clang_cc1 -target-cpu z15 -triple s390x-linux-gnu \
// RUN: -O2 -fzvector -flax-vector-conversions=none \
// RUN: -ffp-exception-behavior=strict \
// RUN: -Wall -Wno-unused -Werror -emit-llvm %s -o - | FileCheck %s
// RUN: %clang_cc1 -target-cpu z15 -triple s390x-linux-gnu \
// RUN: -O2 -fzvector -flax-vector-conversions=none \
// RUN: -ffp-exception-behavior=strict \
// RUN: -Wall -Wno-unused -Werror -S %s -o - | FileCheck %s --check-prefix=CHECK-ASM

#include <vecintrin.h>

volatile vector signed int vsi;
volatile vector signed long long vsl;
volatile vector unsigned int vui;
volatile vector unsigned long long vul;
volatile vector float vf;
volatile vector double vd;

volatile float f;
volatile double d;

const float * volatile cptrf;
const double * volatile cptrd;

float * volatile ptrf;
double * volatile ptrd;

volatile int idx;

void test_core(void) {
  // CHECK-ASM-LABEL: test_core
  vector float vf2;
  vector double vd2;

  vf += vec_revb(vec_xl(idx, cptrf));
  // CHECK-ASM: vlbrf
  vd += vec_revb(vec_xl(idx, cptrd));
  // CHECK-ASM: vlbrg

  vec_xst(vec_revb(vf), idx, ptrf);
  // CHECK-ASM: vstbrf
  vec_xst(vec_revb(vd), idx, ptrd);
  // CHECK-ASM: vstbrg

  vf += vec_revb(vec_insert_and_zero(cptrf));
  // CHECK-ASM: vllebrzf
  vd += vec_revb(vec_insert_and_zero(cptrd));
  // CHECK-ASM: vllebrzg

  vf += vec_revb(vec_splats(f));
  // CHECK-ASM: vlbrrepf
  vd += vec_revb(vec_splats(d));
  // CHECK-ASM: vlbrrepg

  vf2 = vf;
  vf += vec_revb(vec_insert(f, vec_revb(vf2), 0));
  // CHECK-ASM: vlebrf
  vd2 = vd;
  vd += vec_revb(vec_insert(d, vec_revb(vd2), 0));
  // CHECK-ASM: vlebrg

  f = vec_extract(vec_revb(vf), 0);
  // CHECK-ASM: vstebrf
  d = vec_extract(vec_revb(vd), 0);
  // CHECK-ASM: vstebrg

  vf += vec_reve(vec_xl(idx, cptrf));
  // CHECK-ASM: vlerf
  vd += vec_reve(vec_xl(idx, cptrd));
  // CHECK-ASM: vlerg

  vec_xst(vec_reve(vf), idx, ptrf);
  // CHECK-ASM: vsterf
  vec_xst(vec_reve(vd), idx, ptrd);
  // CHECK-ASM: vsterg
}

void test_float(void) {
  // CHECK-ASM-LABEL: test_float

  vd = vec_double(vsl);
  // CHECK: call <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64> %{{.*}}, metadata !{{.*}})
  // CHECK-ASM: vcdgb
  vd = vec_double(vul);
  // CHECK: call <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64> %{{.*}}, metadata !{{.*}})
  // CHECK-ASM: vcdlgb
  vf = vec_float(vsi);
  // CHECK: call <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32> %{{.*}}, metadata !{{.*}})
  // CHECK-ASM: vcefb
  vf = vec_float(vui);
  // CHECK: call <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32> %{{.*}}, metadata !{{.*}})
  // CHECK-ASM: vcelfb

  vsl = vec_signed(vd);
  // CHECK: call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64(<2 x double> %{{.*}}, metadata !{{.*}})
  // CHECK-ASM: vcgdb
  vsi = vec_signed(vf);
  // CHECK: call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(<4 x float> %{{.*}}, metadata !{{.*}})
  // CHECK-ASM: vcfeb
  vul = vec_unsigned(vd);
  // CHECK: call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64(<2 x double> %{{.*}}, metadata !{{.*}})
  // CHECK-ASM: vclgdb
  vui = vec_unsigned(vf);
  // xHECK: fptoui <4 x float> %{{.*}} to <4 x i32>
  // CHECK: call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(<4 x float> %{{.*}}, metadata !{{.*}})
  // CHECK-ASM: vclfeb
}