Skip to content

Commit 2701ae6

Browse files
committed
Upgrade intrinsic-test tool to use clang 13
1 parent acee401 commit 2701ae6

File tree

5 files changed

+83
-150
lines changed

5 files changed

+83
-150
lines changed

ci/docker/aarch64-unknown-linux-gnu/Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM ubuntu:20.04
1+
FROM ubuntu:21.10
22
RUN apt-get update && apt-get install -y --no-install-recommends \
33
gcc \
44
g++ \
@@ -10,7 +10,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
1010
qemu-user \
1111
make \
1212
file \
13-
clang-12 \
13+
clang-13 \
1414
lld
1515

1616
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc \

ci/run-docker.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ run() {
2525
--env NORUN \
2626
--env RUSTFLAGS \
2727
--env STDARCH_TEST_NORUN \
28-
--volume "$(dirname "$(dirname "$(command -v cargo)")")":/cargo \
28+
--volume "${HOME}/.cargo":/cargo \
2929
--volume "$(rustc --print sysroot)":/rust:ro \
3030
--volume "$(pwd)":/checkout:ro \
3131
--volume "$(pwd)"/target:/checkout/target \

ci/run.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ esac
122122

123123
if [ "${TARGET}" = "aarch64-unknown-linux-gnu" ]; then
124124
export CPPFLAGS="-fuse-ld=lld -I/usr/aarch64-linux-gnu/include/ -I/usr/aarch64-linux-gnu/include/c++/9/aarch64-linux-gnu/"
125-
cargo run ${INTRINSIC_TEST} --release --bin intrinsic-test -- crates/intrinsic-test/acle/tools/intrinsic_db/advsimd.csv --runner "${CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER}" --cppcompiler "clang++-12" --skip crates/intrinsic-test/missing.txt
125+
cargo run ${INTRINSIC_TEST} --release --bin intrinsic-test -- crates/intrinsic-test/acle/tools/intrinsic_db/advsimd.csv --runner "${CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER}" --cppcompiler "clang++-13" --skip crates/intrinsic-test/missing.txt
126126
fi
127127

128128
if [ "$NORUN" != "1" ] && [ "$NOSTD" != 1 ]; then

crates/intrinsic-test/missing.txt

Lines changed: 66 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,109 +1,59 @@
1-
vmmlaq_s32
2-
vmmlaq_u32
1+
# Not implemented in stdarch yet
2+
vbfdot_f32
3+
vbfdot_lane_f32
4+
vbfdot_laneq_f32
5+
vbfdotq_f32
6+
vbfdotq_lane_f32
7+
vbfdotq_laneq_f32
8+
vbfmlalbq_f32
9+
vbfmlalbq_lane_f32
10+
vbfmlalbq_laneq_f32
11+
vbfmlaltq_f32
12+
vbfmlaltq_lane_f32
13+
vbfmlaltq_laneq_f32
14+
vbfmmlaq_f32
15+
vcmla_f64
16+
vcmla_lane_f64
17+
vcmla_laneq_f64
18+
vcmlaq_lane_f64
19+
vcmlaq_laneq_f64
20+
vcmlaq_rot180_lane_f64
21+
vcmlaq_rot180_laneq_f64
22+
vcmlaq_rot270_lane_f64
23+
vcmlaq_rot270_laneq_f64
24+
vcmlaq_rot90_lane_f64
25+
vcmlaq_rot90_laneq_f64
26+
vcmla_rot180_f64
27+
vcmla_rot180_lane_f64
28+
vcmla_rot180_laneq_f64
29+
vcmla_rot270_f64
30+
vcmla_rot270_lane_f64
31+
vcmla_rot270_laneq_f64
32+
vcmla_rot90_f64
33+
vcmla_rot90_lane_f64
34+
vcmla_rot90_laneq_f64
35+
vsudot_laneq_s32
36+
vsudot_lane_s32
37+
vsudotq_laneq_s32
38+
vsudotq_lane_s32
39+
vusdot_laneq_s32
40+
vusdot_lane_s32
41+
vusdotq_laneq_s32
42+
vusdotq_lane_s32
43+
vusdotq_s32
44+
vusdot_s32
45+
46+
# Missing from both Clang and stdarch
347
vrnd32x_f64
448
vrnd32xq_f64
549
vrnd32z_f64
650
vrnd32zq_f64
751
vrnd64x_f64
52+
vrnd64xq_f64
853
vrnd64z_f64
954
vrnd64zq_f64
10-
vsm3partw1q_u32
11-
vsm3partw2q_u32
12-
vsm3tt1bq_u32
13-
vsm3tt2aq_u32
14-
vsm3tt2bq_u32
15-
vsm4ekeyq_u32
16-
vsm4eq_u32
17-
vsudot_lane_s32
18-
vsudot_laneq_s32
19-
vsudotq_lane_s32
20-
vsudotq_laneq_s32
21-
vusdot_lane_s32
22-
vusdot_laneq_s32
23-
vusdot_s32
24-
vusdotq_lane_s32
25-
vusdotq_laneq_s32
26-
vusdotq_s32
27-
vcls_u16
28-
vcls_u32
29-
vcls_u8
30-
vclsq_u16
31-
vclsq_u32
32-
vclsq_u8
33-
vcreate_s16
34-
vcreate_u16
35-
vpaddq_s64
36-
vpaddq_u64
37-
vqshlu_n_s16
38-
vqshlu_n_s32
39-
vqshlu_n_s64
40-
vqshlu_n_s8
41-
vqshlub_n_s8
42-
vqshlud_n_s64
43-
vqshluh_n_s16
44-
vqshluq_n_s16
45-
vqshluq_n_s32
46-
vqshluq_n_s64
47-
vqshluq_n_s8
48-
vqshlus_n_s32
49-
vrax1q_u64
50-
vreinterpretq_p128_f32
51-
vreinterpretq_p128_f64
52-
vreinterpretq_p128_p16
53-
vreinterpretq_p128_p8
54-
vreinterpretq_p128_s16
55-
vreinterpretq_p128_s32
56-
vreinterpretq_p128_s64
57-
vreinterpretq_p128_s8
58-
vreinterpretq_p128_u16
59-
vreinterpretq_p128_u32
60-
vreinterpretq_p128_u64
61-
vreinterpretq_p128_u8
62-
vrnd32x_f32
63-
vrnd32xq_f32
64-
vrnd32z_f32
65-
vrnd32zq_f32
66-
vrnd64x_f32
67-
vrnd64xq_f32
68-
vrnd64xq_f64
69-
vrnd64z_f32
70-
vrnd64zq_f32
71-
vsha512h2q_u64
72-
vsha512hq_u64
73-
vsha512su0q_u64
74-
vsha512su1q_u64
75-
vslid_n_s64
76-
vslid_n_u64
77-
vsm3ss1q_u32
78-
vsm3tt1aq_u32
79-
vsrid_n_s64
80-
vsrid_n_u64
81-
vusmmlaq_s32
82-
vxarq_u64
83-
vadd_p16
84-
vadd_p64
85-
vadd_p8
86-
vaddq_p16
87-
vaddq_p64
88-
vaddq_p8
89-
vbcaxq_s16
90-
vbcaxq_s32
91-
vbcaxq_s64
92-
vbcaxq_s8
93-
vbcaxq_u16
94-
vbcaxq_u32
95-
vbcaxq_u64
96-
vbcaxq_u8
97-
veor3q_s16
98-
veor3q_s32
99-
veor3q_s64
100-
veor3q_s8
101-
veor3q_u16
102-
veor3q_u32
103-
veor3q_u64
104-
veor3q_u8
105-
vshld_s64
106-
vshld_u64
55+
56+
# Takes too long to compile tests
10757
vcopyq_laneq_u8
10858
vcopyq_laneq_s8
10959
vcopyq_laneq_p8
@@ -113,3 +63,20 @@ vcopyq_lane_p8
11363
vcopy_laneq_u8
11464
vcopy_laneq_s8
11565
vcopy_laneq_p8
66+
vcopy_lane_u8
67+
vcopy_lane_s8
68+
vcopy_lane_p8
69+
70+
# QEMU 6.0 doesn't support these instructions
71+
vmmlaq_s32
72+
vmmlaq_u32
73+
vsm3partw1q_u32
74+
vsm3partw2q_u32
75+
vsm3ss1q_u32
76+
vsm3tt1aq_u32
77+
vsm3tt1bq_u32
78+
vsm3tt2aq_u32
79+
vsm3tt2bq_u32
80+
vsm4ekeyq_u32
81+
vsm4eq_u32
82+
vusmmlaq_s32

crates/intrinsic-test/src/main.rs

Lines changed: 13 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,7 @@ pub enum Language {
3131

3232
fn gen_code_c(intrinsic: &Intrinsic, constraints: &[&Argument], name: String) -> String {
3333
if let Some((current, constraints)) = constraints.split_last() {
34-
let range = current
35-
.constraints
36-
.iter()
37-
.map(|c| c.to_range())
38-
.flat_map(|r| r.into_iter());
34+
let range = current.constraints.iter().map(|c| c.to_range()).flat_map(|r| r.into_iter());
3935

4036
range
4137
.map(|i| {
@@ -52,19 +48,12 @@ fn gen_code_c(intrinsic: &Intrinsic, constraints: &[&Argument], name: String) ->
5248
})
5349
.collect()
5450
} else {
55-
(1..20)
56-
.map(|idx| intrinsic.generate_pass_c(idx, &name))
57-
.collect::<Vec<_>>()
58-
.join("\n")
51+
(1..20).map(|idx| intrinsic.generate_pass_c(idx, &name)).collect::<Vec<_>>().join("\n")
5952
}
6053
}
6154

6255
fn generate_c_program(header_files: &[&str], intrinsic: &Intrinsic) -> String {
63-
let constraints = intrinsic
64-
.arguments
65-
.iter()
66-
.filter(|i| i.has_constraint())
67-
.collect_vec();
56+
let constraints = intrinsic.arguments.iter().filter(|i| i.has_constraint()).collect_vec();
6857

6958
format!(
7059
r#"{header_files}
@@ -105,11 +94,7 @@ int main(int argc, char **argv) {{
10594

10695
fn gen_code_rust(intrinsic: &Intrinsic, constraints: &[&Argument], name: String) -> String {
10796
if let Some((current, constraints)) = constraints.split_last() {
108-
let range = current
109-
.constraints
110-
.iter()
111-
.map(|c| c.to_range())
112-
.flat_map(|r| r.into_iter());
97+
let range = current.constraints.iter().map(|c| c.to_range()).flat_map(|r| r.into_iter());
11398

11499
range
115100
.map(|i| {
@@ -126,19 +111,12 @@ fn gen_code_rust(intrinsic: &Intrinsic, constraints: &[&Argument], name: String)
126111
})
127112
.collect()
128113
} else {
129-
(1..20)
130-
.map(|idx| intrinsic.generate_pass_rust(idx, &name))
131-
.collect::<Vec<_>>()
132-
.join("\n")
114+
(1..20).map(|idx| intrinsic.generate_pass_rust(idx, &name)).collect::<Vec<_>>().join("\n")
133115
}
134116
}
135117

136118
fn generate_rust_program(intrinsic: &Intrinsic) -> String {
137-
let constraints = intrinsic
138-
.arguments
139-
.iter()
140-
.filter(|i| i.has_constraint())
141-
.collect_vec();
119+
let constraints = intrinsic.arguments.iter().filter(|i| i.has_constraint()).collect_vec();
142120

143121
format!(
144122
r#"#![feature(simd_ffi)]
@@ -320,15 +298,13 @@ fn main() {
320298
.get_matches();
321299

322300
let filename = matches.value_of("INPUT").unwrap();
323-
let toolchain = matches
324-
.value_of("TOOLCHAIN")
325-
.map_or("".into(), |t| format!("+{}", t));
301+
let toolchain = matches.value_of("TOOLCHAIN").map_or("".into(), |t| format!("+{}", t));
326302

327303
let cpp_compiler = matches.value_of("CPPCOMPILER").unwrap();
328304
let c_runner = matches.value_of("RUNNER").unwrap_or("");
329305
let skip = if let Some(filename) = matches.value_of("SKIP") {
330306
let data = std::fs::read_to_string(&filename).expect("Failed to open file");
331-
data.lines().map(String::from).collect_vec()
307+
data.lines().map(str::trim).filter(|s| !s.contains('#')).map(String::from).collect_vec()
332308
} else {
333309
Default::default()
334310
};
@@ -343,9 +319,7 @@ fn main() {
343319
.filter(|i| !(i.results.kind() == TypeKind::Float && i.results.inner_size() == 16))
344320
.filter(|i| !i.arguments.iter().any(|a| a.ty.kind() == TypeKind::BFloat))
345321
.filter(|i| {
346-
!i.arguments
347-
.iter()
348-
.any(|a| a.ty.kind() == TypeKind::Float && a.ty.inner_size() == 16)
322+
!i.arguments.iter().any(|a| a.ty.kind() == TypeKind::Float && a.ty.inner_size() == 16)
349323
})
350324
// Skip pointers for now, we would probably need to look at the return
351325
// type to work out how many elements we need to point to.
@@ -408,23 +382,15 @@ fn compare_outputs(intrinsics: &Vec<Intrinsic>, toolchain: &str, runner: &str) -
408382
}
409383

410384
if !rust.status.success() {
411-
error!(
412-
"Failed to run rust program for intrinsic {}",
413-
intrinsic.name
414-
);
385+
error!("Failed to run rust program for intrinsic {}", intrinsic.name);
415386
return Some(FailureReason::RunRust(intrinsic.name.clone()));
416387
}
417388

418389
info!("Comparing intrinsic: {}", intrinsic.name);
419390

420-
let c = std::str::from_utf8(&c.stdout)
421-
.unwrap()
422-
.to_lowercase()
423-
.replace("-nan", "nan");
424-
let rust = std::str::from_utf8(&rust.stdout)
425-
.unwrap()
426-
.to_lowercase()
427-
.replace("-nan", "nan");
391+
let c = std::str::from_utf8(&c.stdout).unwrap().to_lowercase().replace("-nan", "nan");
392+
let rust =
393+
std::str::from_utf8(&rust.stdout).unwrap().to_lowercase().replace("-nan", "nan");
428394

429395
if c == rust {
430396
None

0 commit comments

Comments
 (0)