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 | 8 | O1, |
| 9 | 9 | O2, |
| 10 | 10 | O3, |
| 11 | + Os, | |
| 11 | 12 | Ofast, |
| 12 | 13 | } |
| 13 | 14 | |
@@ -18,6 +19,7 @@ impl OptLevel { | ||
| 18 | 19 | "o1" => Some(Self::O1), |
| 19 | 20 | "o2" => Some(Self::O2), |
| 20 | 21 | "o3" => Some(Self::O3), |
| 22 | + "os" => Some(Self::Os), | |
| 21 | 23 | "ofast" => Some(Self::Ofast), |
| 22 | 24 | _ => None, |
| 23 | 25 | } |
@@ -29,6 +31,7 @@ impl OptLevel { | ||
| 29 | 31 | Self::O1 => "-O1", |
| 30 | 32 | Self::O2 => "-O2", |
| 31 | 33 | Self::O3 => "-O3", |
| 34 | + Self::Os => "-Os", | |
| 32 | 35 | Self::Ofast => "-Ofast", |
| 33 | 36 | } |
| 34 | 37 | } |
@@ -39,6 +42,7 @@ impl OptLevel { | ||
| 39 | 42 | Self::O1 => "O1", |
| 40 | 43 | Self::O2 => "O2", |
| 41 | 44 | Self::O3 => "O3", |
| 45 | + Self::Os => "Os", | |
| 42 | 46 | Self::Ofast => "Ofast", |
| 43 | 47 | } |
| 44 | 48 | } |
@@ -246,3 +250,16 @@ pub struct RunCapture { | ||
| 246 | 250 | pub stdout: String, |
| 247 | 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 | 55 | OptLevel::O1 => armfortas::driver::OptLevel::O1, |
| 56 | 56 | OptLevel::O2 => armfortas::driver::OptLevel::O2, |
| 57 | 57 | OptLevel::O3 => armfortas::driver::OptLevel::O3, |
| 58 | + OptLevel::Os => armfortas::driver::OptLevel::Os, | |
| 58 | 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 | 66 | armfortas::driver::OptLevel::O1 => OptLevel::O1, |
| 66 | 67 | armfortas::driver::OptLevel::O2 => OptLevel::O2, |
| 67 | 68 | armfortas::driver::OptLevel::O3 => OptLevel::O3, |
| 69 | + armfortas::driver::OptLevel::Os => OptLevel::Os, | |
| 68 | 70 | armfortas::driver::OptLevel::Ofast => OptLevel::Ofast, |
| 69 | 71 | } |
| 70 | 72 | } |
@@ -159,3 +161,15 @@ pub mod test_support { | ||
| 159 | 161 | pub use armfortas::ir::verify::verify_module; |
| 160 | 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 | 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 | 1207 | OptLevel::O0, |
| 1208 | 1208 | OptLevel::O1, |
| 1209 | 1209 | OptLevel::O2, |
| 1210 | 1210 | OptLevel::O3, |
| 1211 | + OptLevel::Os, | |
| 1211 | 1212 | OptLevel::Ofast, |
| 1212 | 1213 | ] |
| 1213 | 1214 | } |
@@ -4946,6 +4947,21 @@ end | ||
| 4946 | 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 | 4965 | #[test] |
| 4950 | 4966 | fn parses_consistency_checks() { |
| 4951 | 4967 | let root = std::env::temp_dir().join("afs_tests_consistency_spec.afs"); |