summaryrefslogtreecommitdiff
path: root/src/tools/miropt-test-tools/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/miropt-test-tools/src/lib.rs')
-rw-r--r--src/tools/miropt-test-tools/src/lib.rs19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/tools/miropt-test-tools/src/lib.rs b/src/tools/miropt-test-tools/src/lib.rs
index cfba7d583b1..f86c3ce0afe 100644
--- a/src/tools/miropt-test-tools/src/lib.rs
+++ b/src/tools/miropt-test-tools/src/lib.rs
@@ -4,6 +4,8 @@ pub struct MiroptTestFiles {
pub expected_file: std::path::PathBuf,
pub from_file: String,
pub to_file: Option<String>,
+ /// Vec of passes under test to be dumped
+ pub passes: Vec<String>,
}
pub fn files_for_miropt_test(testfile: &std::path::Path, bit_width: u32) -> Vec<MiroptTestFiles> {
@@ -28,9 +30,11 @@ pub fn files_for_miropt_test(testfile: &std::path::Path, bit_width: u32) -> Vec<
let mut expected_file;
let from_file;
let to_file;
+ let mut passes = Vec::new();
if test_name.ends_with(".diff") {
let trimmed = test_name.trim_end_matches(".diff");
+ passes.push(trimmed.split('.').last().unwrap().to_owned());
let test_against = format!("{}.after.mir", trimmed);
from_file = format!("{}.before.mir", trimmed);
expected_file = format!("{}{}.diff", trimmed, bit_width);
@@ -38,7 +42,14 @@ pub fn files_for_miropt_test(testfile: &std::path::Path, bit_width: u32) -> Vec<
to_file = Some(test_against);
} else if let Some(first_pass) = test_names.next() {
let second_pass = test_names.next().unwrap();
+ if let Some((first_pass_name, _)) = first_pass.split_once('.') {
+ passes.push(first_pass_name.to_owned());
+ }
+ if let Some((second_pass_name, _)) = second_pass.split_once('.') {
+ passes.push(second_pass_name.to_owned());
+ }
assert!(test_names.next().is_none(), "three mir pass names specified for MIR diff");
+
expected_file =
format!("{}{}.{}-{}.diff", test_name, bit_width, first_pass, second_pass);
let second_file = format!("{}.{}.mir", test_name, second_pass);
@@ -51,18 +62,24 @@ pub fn files_for_miropt_test(testfile: &std::path::Path, bit_width: u32) -> Vec<
.next()
.expect("test_name has an invalid extension");
let extension = cap.get(1).unwrap().as_str();
+
expected_file =
format!("{}{}{}", test_name.trim_end_matches(extension), bit_width, extension,);
from_file = test_name.to_string();
assert!(test_names.next().is_none(), "two mir pass names specified for MIR dump");
to_file = None;
+ // the pass name is the third to last string in the test name
+ // this gets pushed into passes
+ passes.push(
+ test_name.split('.').rev().nth(2).expect("invalid test format").to_string(),
+ );
};
if !expected_file.starts_with(&test_crate) {
expected_file = format!("{}.{}", test_crate, expected_file);
}
let expected_file = test_dir.join(expected_file);
- out.push(MiroptTestFiles { expected_file, from_file, to_file });
+ out.push(MiroptTestFiles { expected_file, from_file, to_file, passes });
}
}