about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMadhav Madhusoodanan <f20200049@pilani.bits-pilani.ac.in>2025-03-27 22:36:52 +0400
committerAmanieu d'Antras <amanieu@gmail.com>2025-05-27 23:27:38 +0000
commitc862432cfd17bbbe1a2855f1e8b422c3bf4d97e1 (patch)
treea023142af18584a5dccff82dc75bc8c1688284c8
parent17277d71e8366623b0e15688403cfc1936c0fd0b (diff)
downloadrust-c862432cfd17bbbe1a2855f1e8b422c3bf4d97e1.tar.gz
rust-c862432cfd17bbbe1a2855f1e8b422c3bf4d97e1.zip
chore: code consolidation
-rw-r--r--library/stdarch/crates/intrinsic-test/src/arm/argument.rs3
-rw-r--r--library/stdarch/crates/intrinsic-test/src/arm/config.rs3
-rw-r--r--library/stdarch/crates/intrinsic-test/src/arm/functions.rs9
-rw-r--r--library/stdarch/crates/intrinsic-test/src/arm/intrinsic.rs6
-rw-r--r--library/stdarch/crates/intrinsic-test/src/arm/json_parser.rs8
-rw-r--r--library/stdarch/crates/intrinsic-test/src/arm/mod.rs4
-rw-r--r--library/stdarch/crates/intrinsic-test/src/common/cli.rs101
-rw-r--r--library/stdarch/crates/intrinsic-test/src/common/compare.rs30
-rw-r--r--library/stdarch/crates/intrinsic-test/src/common/gen_c.rs2
-rw-r--r--library/stdarch/crates/intrinsic-test/src/common/gen_rust.rs6
-rw-r--r--library/stdarch/crates/intrinsic-test/src/common/mod.rs13
-rw-r--r--library/stdarch/crates/intrinsic-test/src/common/supporting_test.rs10
-rw-r--r--library/stdarch/crates/intrinsic-test/src/common/types.rs108
-rw-r--r--library/stdarch/crates/intrinsic-test/src/main.rs4
14 files changed, 145 insertions, 162 deletions
diff --git a/library/stdarch/crates/intrinsic-test/src/arm/argument.rs b/library/stdarch/crates/intrinsic-test/src/arm/argument.rs
index adc93da37f4..e354ba765a7 100644
--- a/library/stdarch/crates/intrinsic-test/src/arm/argument.rs
+++ b/library/stdarch/crates/intrinsic-test/src/arm/argument.rs
@@ -1,9 +1,8 @@
-use std::ops::Range;
-
 use super::format::Indentation;
 use super::json_parser::ArgPrep;
 use super::types::{IntrinsicType, TypeKind};
 use crate::common::types::Language;
+use std::ops::Range;
 
 /// An argument for the intrinsic.
 #[derive(Debug, PartialEq, Clone)]
diff --git a/library/stdarch/crates/intrinsic-test/src/arm/config.rs b/library/stdarch/crates/intrinsic-test/src/arm/config.rs
index 8f7467e3a73..6faaf57d6c9 100644
--- a/library/stdarch/crates/intrinsic-test/src/arm/config.rs
+++ b/library/stdarch/crates/intrinsic-test/src/arm/config.rs
@@ -8,8 +8,7 @@ pub fn build_notices(line_prefix: &str) -> String {
     )
 }
 
-pub const POLY128_OSTREAM_DEF: &str = 
-r#"std::ostream& operator<<(std::ostream& os, poly128_t value) {
+pub const POLY128_OSTREAM_DEF: &str = r#"std::ostream& operator<<(std::ostream& os, poly128_t value) {
     std::stringstream temp;
     do {
       int n = value % 10;
diff --git a/library/stdarch/crates/intrinsic-test/src/arm/functions.rs b/library/stdarch/crates/intrinsic-test/src/arm/functions.rs
index 995a9ae941a..a529f37aac2 100644
--- a/library/stdarch/crates/intrinsic-test/src/arm/functions.rs
+++ b/library/stdarch/crates/intrinsic-test/src/arm/functions.rs
@@ -1,13 +1,12 @@
-use itertools::Itertools;
-use rayon::prelude::*;
-use std::io::Write;
-
 use super::argument::Argument;
 use super::config::{AARCH_CONFIGURATIONS, POLY128_OSTREAM_DEF, build_notices};
 use super::format::Indentation;
 use super::intrinsic::Intrinsic;
 use crate::common::gen_c::{compile_c, create_c_files, generate_c_program};
 use crate::common::gen_rust::{compile_rust, create_rust_files, generate_rust_program};
+use itertools::Itertools;
+use rayon::prelude::*;
+use std::io::Write;
 
 // The number of times each intrinsic will be called.
 const PASSES: u32 = 20;
@@ -156,7 +155,7 @@ fn compile_c_arm(
     cxx_toolchain_dir: Option<&str>,
 ) -> bool {
     let compiler_commands = intrinsics_name_list.iter().map(|intrinsic_name|{
-        let c_filename = format!(r#"c_programs/{}.cpp"#, intrinsic_name);
+        let c_filename = format!(r#"c_programs/{intrinsic_name}.cpp"#);
         let flags = std::env::var("CPPFLAGS").unwrap_or("".into());
         let arch_flags = if target.contains("v7") {
             "-march=armv8.6-a+crypto+crc+dotprod+fp16"
diff --git a/library/stdarch/crates/intrinsic-test/src/arm/intrinsic.rs b/library/stdarch/crates/intrinsic-test/src/arm/intrinsic.rs
index a650707f4db..e9275072a98 100644
--- a/library/stdarch/crates/intrinsic-test/src/arm/intrinsic.rs
+++ b/library/stdarch/crates/intrinsic-test/src/arm/intrinsic.rs
@@ -1,8 +1,7 @@
+use super::argument::ArgumentList;
 use super::format::Indentation;
 use super::types::{IntrinsicType, TypeKind};
 
-use super::argument::ArgumentList;
-
 /// An intrinsic
 #[derive(Debug, PartialEq, Clone)]
 pub struct Intrinsic {
@@ -82,8 +81,6 @@ impl Intrinsic {
                 String::from("")
             },
             close = if self.results.is_simd() { ")" } else { "" },
-            lanes = lanes,
-            additional = additional,
         )
     }
 
@@ -146,7 +143,6 @@ impl Intrinsic {
             intrinsic_call = self.name,
             const = constraints,
             args = self.arguments.as_call_param_rust(),
-            additional = additional,
         )
     }
 }
diff --git a/library/stdarch/crates/intrinsic-test/src/arm/json_parser.rs b/library/stdarch/crates/intrinsic-test/src/arm/json_parser.rs
index 32bb10e6f69..630af311d19 100644
--- a/library/stdarch/crates/intrinsic-test/src/arm/json_parser.rs
+++ b/library/stdarch/crates/intrinsic-test/src/arm/json_parser.rs
@@ -1,11 +1,9 @@
-use std::collections::HashMap;
-use std::path::Path;
-
-use serde::Deserialize;
-
 use super::argument::{Argument, ArgumentList};
 use super::intrinsic::Intrinsic;
 use super::types::IntrinsicType;
+use serde::Deserialize;
+use std::collections::HashMap;
+use std::path::Path;
 
 #[derive(Deserialize, Debug)]
 #[serde(deny_unknown_fields)]
diff --git a/library/stdarch/crates/intrinsic-test/src/arm/mod.rs b/library/stdarch/crates/intrinsic-test/src/arm/mod.rs
index 3f2a346daa1..69c3d864d87 100644
--- a/library/stdarch/crates/intrinsic-test/src/arm/mod.rs
+++ b/library/stdarch/crates/intrinsic-test/src/arm/mod.rs
@@ -6,9 +6,9 @@ mod intrinsic;
 mod json_parser;
 mod types;
 
-use crate::common::cli::ProcessedCli;
+use crate::common::SupportedArchitectureTest;
 use crate::common::compare::compare_outputs;
-use crate::common::supporting_test::SupportedArchitectureTest;
+use crate::common::types::ProcessedCli;
 use functions::{build_c, build_rust};
 use intrinsic::Intrinsic;
 use json_parser::get_neon_intrinsics;
diff --git a/library/stdarch/crates/intrinsic-test/src/common/cli.rs b/library/stdarch/crates/intrinsic-test/src/common/cli.rs
deleted file mode 100644
index baa21961e16..00000000000
--- a/library/stdarch/crates/intrinsic-test/src/common/cli.rs
+++ /dev/null
@@ -1,101 +0,0 @@
-use itertools::Itertools;
-use std::path::PathBuf;
-
-/// Intrinsic test tool
-#[derive(clap::Parser)]
-#[command(
-    name = "Intrinsic test tool",
-    about = "Generates Rust and C programs for intrinsics and compares the output"
-)]
-pub struct Cli {
-    /// The input file containing the intrinsics
-    pub input: PathBuf,
-
-    /// The rust toolchain to use for building the rust code
-    #[arg(long)]
-    pub toolchain: Option<String>,
-
-    /// The C++ compiler to use for compiling the c++ code
-    #[arg(long, default_value_t = String::from("clang++"))]
-    pub cppcompiler: String,
-
-    /// Run the C programs under emulation with this command
-    #[arg(long)]
-    pub runner: Option<String>,
-
-    /// Filename for a list of intrinsics to skip (one per line)
-    #[arg(long)]
-    pub skip: Option<PathBuf>,
-
-    /// Regenerate test programs, but don't build or run them
-    #[arg(long)]
-    pub generate_only: bool,
-
-    /// Pass a target the test suite
-    #[arg(long, default_value_t = String::from("aarch64-unknown-linux-gnu"))]
-    pub target: String,
-
-    /// Set the linker
-    #[arg(long)]
-    pub linker: Option<String>,
-
-    /// Set the sysroot for the C++ compiler
-    #[arg(long)]
-    pub cxx_toolchain_dir: Option<String>,
-}
-
-pub struct ProcessedCli {
-    pub filename: PathBuf,
-    pub toolchain: Option<String>,
-    pub cpp_compiler: Option<String>,
-    pub c_runner: String,
-    pub target: String,
-    pub linker: Option<String>,
-    pub cxx_toolchain_dir: Option<String>,
-    pub skip: Vec<String>,
-}
-
-impl ProcessedCli {
-    pub fn new(cli_options: Cli) -> Self {
-        let filename = cli_options.input;
-        let c_runner = cli_options.runner.unwrap_or_default();
-        let target = cli_options.target;
-        let linker = cli_options.linker;
-        let cxx_toolchain_dir = cli_options.cxx_toolchain_dir;
-
-        let skip = if let Some(filename) = cli_options.skip {
-            let data = std::fs::read_to_string(&filename).expect("Failed to open file");
-            data.lines()
-                .map(str::trim)
-                .filter(|s| !s.contains('#'))
-                .map(String::from)
-                .collect_vec()
-        } else {
-            Default::default()
-        };
-
-        let (toolchain, cpp_compiler) = if cli_options.generate_only {
-            (None, None)
-        } else {
-            (
-                Some(
-                    cli_options
-                        .toolchain
-                        .map_or_else(String::new, |t| format!("+{t}")),
-                ),
-                Some(cli_options.cppcompiler),
-            )
-        };
-
-        Self {
-            toolchain: toolchain,
-            cpp_compiler: cpp_compiler,
-            c_runner: c_runner,
-            target: target,
-            linker: linker,
-            cxx_toolchain_dir: cxx_toolchain_dir,
-            skip: skip,
-            filename: filename,
-        }
-    }
-}
diff --git a/library/stdarch/crates/intrinsic-test/src/common/compare.rs b/library/stdarch/crates/intrinsic-test/src/common/compare.rs
index 4ff319be8cb..a8ed5b4f40c 100644
--- a/library/stdarch/crates/intrinsic-test/src/common/compare.rs
+++ b/library/stdarch/crates/intrinsic-test/src/common/compare.rs
@@ -1,12 +1,7 @@
+use super::types::FailureReason;
 use rayon::prelude::*;
 use std::process::Command;
 
-enum FailureReason {
-    RunC(String),
-    RunRust(String),
-    Difference(String, String, String),
-}
-
 pub fn compare_outputs(
     intrinsic_name_list: &Vec<String>,
     toolchain: &str,
@@ -18,11 +13,7 @@ pub fn compare_outputs(
         .filter_map(|intrinsic_name| {
             let c = Command::new("sh")
                 .arg("-c")
-                .arg(format!(
-                    "{runner} ./c_programs/{intrinsic_name}",
-                    runner = runner,
-                    intrinsic_name = intrinsic_name,
-                ))
+                .arg(format!("{runner} ./c_programs/{intrinsic_name}"))
                 .output();
 
             let rust = if target != "aarch64_be-unknown-linux-gnu" {
@@ -31,9 +22,6 @@ pub fn compare_outputs(
                     .arg("-c")
                     .arg(format!(
                         "cargo {toolchain} run --target {target} --bin {intrinsic_name} --release",
-                        intrinsic_name = intrinsic_name,
-                        toolchain = toolchain,
-                        target = target
                     ))
                     .env("RUSTFLAGS", "-Cdebuginfo=0")
                     .output()
@@ -42,9 +30,6 @@ pub fn compare_outputs(
                     .arg("-c")
                     .arg(format!(
                         "{runner} ./rust_programs/target/{target}/release/{intrinsic_name}",
-                        runner = runner,
-                        target = target,
-                        intrinsic_name = intrinsic_name,
                     ))
                     .output()
             };
@@ -55,14 +40,19 @@ pub fn compare_outputs(
             };
 
             if !c.status.success() {
-                error!("Failed to run C program for intrinsic {}", intrinsic_name);
+                error!(
+                    "Failed to run C program for intrinsic {intrinsic_name}\nstdout: {stdout}\nstderr: {stderr}",
+                    stdout = std::str::from_utf8(&c.stdout).unwrap_or(""),
+                    stderr = std::str::from_utf8(&c.stderr).unwrap_or(""),
+                );
                 return Some(FailureReason::RunC(intrinsic_name.clone()));
             }
 
             if !rust.status.success() {
                 error!(
-                    "Failed to run rust program for intrinsic {}",
-                    intrinsic_name
+                    "Failed to run Rust program for intrinsic {intrinsic_name}\nstdout: {stdout}\nstderr: {stderr}",
+                    stdout = std::str::from_utf8(&rust.stdout).unwrap_or(""),
+                    stderr = std::str::from_utf8(&rust.stderr).unwrap_or(""),
                 );
                 return Some(FailureReason::RunRust(intrinsic_name.clone()));
             }
diff --git a/library/stdarch/crates/intrinsic-test/src/common/gen_c.rs b/library/stdarch/crates/intrinsic-test/src/common/gen_c.rs
index 58ab5823ef7..b58b68ff617 100644
--- a/library/stdarch/crates/intrinsic-test/src/common/gen_c.rs
+++ b/library/stdarch/crates/intrinsic-test/src/common/gen_c.rs
@@ -83,7 +83,7 @@ pub fn create_c_files(identifiers: &Vec<String>) -> BTreeMap<&String, File> {
     identifiers
         .par_iter()
         .map(|identifier| {
-            let c_filename = format!(r#"c_programs/{}.cpp"#, identifier);
+            let c_filename = format!(r#"c_programs/{identifier}.cpp"#);
             let file = File::create(&c_filename).unwrap();
 
             (identifier, file)
diff --git a/library/stdarch/crates/intrinsic-test/src/common/gen_rust.rs b/library/stdarch/crates/intrinsic-test/src/common/gen_rust.rs
index e405ab4e640..00186359f19 100644
--- a/library/stdarch/crates/intrinsic-test/src/common/gen_rust.rs
+++ b/library/stdarch/crates/intrinsic-test/src/common/gen_rust.rs
@@ -78,11 +78,7 @@ path = "{binary}/main.rs""#,
     /* If there has been a linker explicitly set from the command line then
      * we want to set it via setting it in the RUSTFLAGS*/
 
-    let cargo_command = format!(
-        "cargo {toolchain} build --target {target} --release",
-        toolchain = toolchain,
-        target = target
-    );
+    let cargo_command = format!("cargo {toolchain} build --target {target} --release");
 
     let mut command = Command::new("sh");
     command
diff --git a/library/stdarch/crates/intrinsic-test/src/common/mod.rs b/library/stdarch/crates/intrinsic-test/src/common/mod.rs
index 13b2854f2e3..b4e6a16a4e8 100644
--- a/library/stdarch/crates/intrinsic-test/src/common/mod.rs
+++ b/library/stdarch/crates/intrinsic-test/src/common/mod.rs
@@ -1,7 +1,16 @@
-pub mod cli;
+use crate::common::types::ProcessedCli;
+
 pub mod compare;
 pub mod gen_c;
 pub mod gen_rust;
-pub mod supporting_test;
 pub mod types;
 pub mod values;
+
+/// Architectures must support this trait
+/// to be successfully tested.
+pub trait SupportedArchitectureTest {
+    fn create(cli_options: ProcessedCli) -> Self;
+    fn build_c_file(&self) -> bool;
+    fn build_rust_file(&self) -> bool;
+    fn compare_outputs(&self) -> bool;
+}
diff --git a/library/stdarch/crates/intrinsic-test/src/common/supporting_test.rs b/library/stdarch/crates/intrinsic-test/src/common/supporting_test.rs
deleted file mode 100644
index 92d71d89df2..00000000000
--- a/library/stdarch/crates/intrinsic-test/src/common/supporting_test.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-use crate::common::cli::ProcessedCli;
-
-/// Architectures must support this trait
-/// to be successfully tested.
-pub trait SupportedArchitectureTest {
-    fn create(cli_options: ProcessedCli) -> Self;
-    fn build_c_file(&self) -> bool;
-    fn build_rust_file(&self) -> bool;
-    fn compare_outputs(&self) -> bool;
-}
diff --git a/library/stdarch/crates/intrinsic-test/src/common/types.rs b/library/stdarch/crates/intrinsic-test/src/common/types.rs
index 8b3b46818e8..53bda97df47 100644
--- a/library/stdarch/crates/intrinsic-test/src/common/types.rs
+++ b/library/stdarch/crates/intrinsic-test/src/common/types.rs
@@ -1,5 +1,113 @@
+use itertools::Itertools;
+use std::path::PathBuf;
+
 #[derive(Debug, PartialEq)]
 pub enum Language {
     Rust,
     C,
 }
+
+pub enum FailureReason {
+    RunC(String),
+    RunRust(String),
+    Difference(String, String, String),
+}
+
+/// Intrinsic test tool
+#[derive(clap::Parser)]
+#[command(
+    name = "Intrinsic test tool",
+    about = "Generates Rust and C programs for intrinsics and compares the output"
+)]
+pub struct Cli {
+    /// The input file containing the intrinsics
+    pub input: PathBuf,
+
+    /// The rust toolchain to use for building the rust code
+    #[arg(long)]
+    pub toolchain: Option<String>,
+
+    /// The C++ compiler to use for compiling the c++ code
+    #[arg(long, default_value_t = String::from("clang++"))]
+    pub cppcompiler: String,
+
+    /// Run the C programs under emulation with this command
+    #[arg(long)]
+    pub runner: Option<String>,
+
+    /// Filename for a list of intrinsics to skip (one per line)
+    #[arg(long)]
+    pub skip: Option<PathBuf>,
+
+    /// Regenerate test programs, but don't build or run them
+    #[arg(long)]
+    pub generate_only: bool,
+
+    /// Pass a target the test suite
+    #[arg(long, default_value_t = String::from("aarch64-unknown-linux-gnu"))]
+    pub target: String,
+
+    /// Set the linker
+    #[arg(long)]
+    pub linker: Option<String>,
+
+    /// Set the sysroot for the C++ compiler
+    #[arg(long)]
+    pub cxx_toolchain_dir: Option<String>,
+}
+
+pub struct ProcessedCli {
+    pub filename: PathBuf,
+    pub toolchain: Option<String>,
+    pub cpp_compiler: Option<String>,
+    pub c_runner: String,
+    pub target: String,
+    pub linker: Option<String>,
+    pub cxx_toolchain_dir: Option<String>,
+    pub skip: Vec<String>,
+}
+
+impl ProcessedCli {
+    pub fn new(cli_options: Cli) -> Self {
+        let filename = cli_options.input;
+        let c_runner = cli_options.runner.unwrap_or_default();
+        let target = cli_options.target;
+        let linker = cli_options.linker;
+        let cxx_toolchain_dir = cli_options.cxx_toolchain_dir;
+
+        let skip = if let Some(filename) = cli_options.skip {
+            let data = std::fs::read_to_string(&filename).expect("Failed to open file");
+            data.lines()
+                .map(str::trim)
+                .filter(|s| !s.contains('#'))
+                .map(String::from)
+                .collect_vec()
+        } else {
+            Default::default()
+        };
+
+        let (toolchain, cpp_compiler) = if cli_options.generate_only {
+            (None, None)
+        } else {
+            (
+                Some(
+                    cli_options
+                        .toolchain
+                        .map_or_else(String::new, |t| format!("+{t}")),
+                ),
+                Some(cli_options.cppcompiler),
+            )
+        };
+
+        Self {
+            toolchain: toolchain,
+            cpp_compiler: cpp_compiler,
+            c_runner: c_runner,
+            target: target,
+            linker: linker,
+            cxx_toolchain_dir: cxx_toolchain_dir,
+            skip: skip,
+            filename: filename,
+        }
+    }
+}
diff --git a/library/stdarch/crates/intrinsic-test/src/main.rs b/library/stdarch/crates/intrinsic-test/src/main.rs
index 0bb8035b253..1234e2b5583 100644
--- a/library/stdarch/crates/intrinsic-test/src/main.rs
+++ b/library/stdarch/crates/intrinsic-test/src/main.rs
@@ -6,8 +6,8 @@ mod arm;
 mod common;
 
 use arm::ArmTestProcessor;
-use common::cli::{Cli, ProcessedCli};
-use common::supporting_test::SupportedArchitectureTest;
+use common::SupportedArchitectureTest;
+use common::types::{Cli, ProcessedCli};
 
 fn main() {
     pretty_env_logger::init();