Handle Os opt level
- SHA
b7638875bd1a785e6bee9e7fe6bdf91d955ae3ee- Parents
-
544a005 - Tree
5f2cfba
b763887
b7638875bd1a785e6bee9e7fe6bdf91d955ae3ee544a005
5f2cfba| Status | File | + | - |
|---|---|---|---|
| M |
bench-core/src/lib.rs
|
17 | 0 |
| M |
bench/src/compiler.rs
|
14 | 0 |
| M |
bench/src/lib.rs
|
17 | 1 |
bench-core/src/lib.rsmodified@@ -8,6 +8,7 @@ pub enum OptLevel { | |||
| 8 | O1, | 8 | O1, |
| 9 | O2, | 9 | O2, |
| 10 | O3, | 10 | O3, |
| 11 | + Os, | ||
| 11 | Ofast, | 12 | Ofast, |
| 12 | } | 13 | } |
| 13 | 14 | ||
@@ -18,6 +19,7 @@ impl OptLevel { | |||
| 18 | "o1" => Some(Self::O1), | 19 | "o1" => Some(Self::O1), |
| 19 | "o2" => Some(Self::O2), | 20 | "o2" => Some(Self::O2), |
| 20 | "o3" => Some(Self::O3), | 21 | "o3" => Some(Self::O3), |
| 22 | + "os" => Some(Self::Os), | ||
| 21 | "ofast" => Some(Self::Ofast), | 23 | "ofast" => Some(Self::Ofast), |
| 22 | _ => None, | 24 | _ => None, |
| 23 | } | 25 | } |
@@ -29,6 +31,7 @@ impl OptLevel { | |||
| 29 | Self::O1 => "-O1", | 31 | Self::O1 => "-O1", |
| 30 | Self::O2 => "-O2", | 32 | Self::O2 => "-O2", |
| 31 | Self::O3 => "-O3", | 33 | Self::O3 => "-O3", |
| 34 | + Self::Os => "-Os", | ||
| 32 | Self::Ofast => "-Ofast", | 35 | Self::Ofast => "-Ofast", |
| 33 | } | 36 | } |
| 34 | } | 37 | } |
@@ -39,6 +42,7 @@ impl OptLevel { | |||
| 39 | Self::O1 => "O1", | 42 | Self::O1 => "O1", |
| 40 | Self::O2 => "O2", | 43 | Self::O2 => "O2", |
| 41 | Self::O3 => "O3", | 44 | Self::O3 => "O3", |
| 45 | + Self::Os => "Os", | ||
| 42 | Self::Ofast => "Ofast", | 46 | Self::Ofast => "Ofast", |
| 43 | } | 47 | } |
| 44 | } | 48 | } |
@@ -246,3 +250,16 @@ pub struct RunCapture { | |||
| 246 | pub stdout: String, | 250 | pub stdout: String, |
| 247 | pub stderr: String, | 251 | pub stderr: String, |
| 248 | } | 252 | } |
| 253 | + | ||
| 254 | +#[cfg(test)] | ||
| 255 | +mod tests { | ||
| 256 | + use super::OptLevel; | ||
| 257 | + | ||
| 258 | + #[test] | ||
| 259 | + fn opt_level_parses_and_renders_os() { | ||
| 260 | + assert_eq!(OptLevel::parse_flag("Os"), Some(OptLevel::Os)); | ||
| 261 | + assert_eq!(OptLevel::parse_flag("os"), Some(OptLevel::Os)); | ||
| 262 | + assert_eq!(OptLevel::Os.as_flag(), "-Os"); | ||
| 263 | + assert_eq!(OptLevel::Os.as_str(), "Os"); | ||
| 264 | + } | ||
| 265 | +} | ||
bench/src/compiler.rsmodified@@ -55,6 +55,7 @@ fn into_driver_opt_level(opt_level: OptLevel) -> armfortas::driver::OptLevel { | |||
| 55 | OptLevel::O1 => armfortas::driver::OptLevel::O1, | 55 | OptLevel::O1 => armfortas::driver::OptLevel::O1, |
| 56 | OptLevel::O2 => armfortas::driver::OptLevel::O2, | 56 | OptLevel::O2 => armfortas::driver::OptLevel::O2, |
| 57 | OptLevel::O3 => armfortas::driver::OptLevel::O3, | 57 | OptLevel::O3 => armfortas::driver::OptLevel::O3, |
| 58 | + OptLevel::Os => armfortas::driver::OptLevel::Os, | ||
| 58 | OptLevel::Ofast => armfortas::driver::OptLevel::Ofast, | 59 | OptLevel::Ofast => armfortas::driver::OptLevel::Ofast, |
| 59 | } | 60 | } |
| 60 | } | 61 | } |
@@ -65,6 +66,7 @@ fn from_driver_opt_level(opt_level: armfortas::driver::OptLevel) -> OptLevel { | |||
| 65 | armfortas::driver::OptLevel::O1 => OptLevel::O1, | 66 | armfortas::driver::OptLevel::O1 => OptLevel::O1, |
| 66 | armfortas::driver::OptLevel::O2 => OptLevel::O2, | 67 | armfortas::driver::OptLevel::O2 => OptLevel::O2, |
| 67 | armfortas::driver::OptLevel::O3 => OptLevel::O3, | 68 | armfortas::driver::OptLevel::O3 => OptLevel::O3, |
| 69 | + armfortas::driver::OptLevel::Os => OptLevel::Os, | ||
| 68 | armfortas::driver::OptLevel::Ofast => OptLevel::Ofast, | 70 | armfortas::driver::OptLevel::Ofast => OptLevel::Ofast, |
| 69 | } | 71 | } |
| 70 | } | 72 | } |
@@ -159,3 +161,15 @@ pub mod test_support { | |||
| 159 | pub use armfortas::ir::verify::verify_module; | 161 | pub use armfortas::ir::verify::verify_module; |
| 160 | pub use armfortas::lexer::{Position, Span}; | 162 | pub use armfortas::lexer::{Position, Span}; |
| 161 | } | 163 | } |
| 164 | + | ||
| 165 | +#[cfg(test)] | ||
| 166 | +mod tests { | ||
| 167 | + use super::{from_driver_opt_level, into_driver_opt_level, OptLevel}; | ||
| 168 | + | ||
| 169 | + #[test] | ||
| 170 | + fn driver_opt_level_round_trips_os() { | ||
| 171 | + let driver = into_driver_opt_level(OptLevel::Os); | ||
| 172 | + assert_eq!(driver, armfortas::driver::OptLevel::Os); | ||
| 173 | + assert_eq!(from_driver_opt_level(driver), OptLevel::Os); | ||
| 174 | + } | ||
| 175 | +} | ||
bench/src/lib.rsmodified@@ -1202,12 +1202,13 @@ fn parse_opt_level_list(raw: &str) -> Result<Vec<OptLevel>, String> { | |||
| 1202 | Ok(levels.into_iter().collect()) | 1202 | Ok(levels.into_iter().collect()) |
| 1203 | } | 1203 | } |
| 1204 | 1204 | ||
| 1205 | -fn all_opt_levels() -> [OptLevel; 5] { | 1205 | +fn all_opt_levels() -> [OptLevel; 6] { |
| 1206 | [ | 1206 | [ |
| 1207 | OptLevel::O0, | 1207 | OptLevel::O0, |
| 1208 | OptLevel::O1, | 1208 | OptLevel::O1, |
| 1209 | OptLevel::O2, | 1209 | OptLevel::O2, |
| 1210 | OptLevel::O3, | 1210 | OptLevel::O3, |
| 1211 | + OptLevel::Os, | ||
| 1211 | OptLevel::Ofast, | 1212 | OptLevel::Ofast, |
| 1212 | ] | 1213 | ] |
| 1213 | } | 1214 | } |
@@ -4946,6 +4947,21 @@ end | |||
| 4946 | let _ = fs::remove_file(&root); | 4947 | let _ = fs::remove_file(&root); |
| 4947 | } | 4948 | } |
| 4948 | 4949 | ||
| 4950 | + #[test] | ||
| 4951 | + fn parses_all_opt_levels_including_os() { | ||
| 4952 | + assert_eq!( | ||
| 4953 | + parse_opt_level_list("all").unwrap(), | ||
| 4954 | + vec![ | ||
| 4955 | + OptLevel::O0, | ||
| 4956 | + OptLevel::O1, | ||
| 4957 | + OptLevel::O2, | ||
| 4958 | + OptLevel::O3, | ||
| 4959 | + OptLevel::Os, | ||
| 4960 | + OptLevel::Ofast, | ||
| 4961 | + ] | ||
| 4962 | + ); | ||
| 4963 | + } | ||
| 4964 | + | ||
| 4949 | #[test] | 4965 | #[test] |
| 4950 | fn parses_consistency_checks() { | 4966 | fn parses_consistency_checks() { |
| 4951 | let root = std::env::temp_dir().join("afs_tests_consistency_spec.afs"); | 4967 | let root = std::env::temp_dir().join("afs_tests_consistency_spec.afs"); |