tenseleyflow/bencch / b763887

Browse files

Handle Os opt level

Authored by espadonne
SHA
b7638875bd1a785e6bee9e7fe6bdf91d955ae3ee
Parents
544a005
Tree
5f2cfba

3 changed files

StatusFile+-
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 {
88
     O1,
99
     O2,
1010
     O3,
11
+    Os,
1112
     Ofast,
1213
 }
1314
 
@@ -18,6 +19,7 @@ impl OptLevel {
1819
             "o1" => Some(Self::O1),
1920
             "o2" => Some(Self::O2),
2021
             "o3" => Some(Self::O3),
22
+            "os" => Some(Self::Os),
2123
             "ofast" => Some(Self::Ofast),
2224
             _ => None,
2325
         }
@@ -29,6 +31,7 @@ impl OptLevel {
2931
             Self::O1 => "-O1",
3032
             Self::O2 => "-O2",
3133
             Self::O3 => "-O3",
34
+            Self::Os => "-Os",
3235
             Self::Ofast => "-Ofast",
3336
         }
3437
     }
@@ -39,6 +42,7 @@ impl OptLevel {
3942
             Self::O1 => "O1",
4043
             Self::O2 => "O2",
4144
             Self::O3 => "O3",
45
+            Self::Os => "Os",
4246
             Self::Ofast => "Ofast",
4347
         }
4448
     }
@@ -246,3 +250,16 @@ pub struct RunCapture {
246250
     pub stdout: String,
247251
     pub stderr: String,
248252
 }
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 {
5555
         OptLevel::O1 => armfortas::driver::OptLevel::O1,
5656
         OptLevel::O2 => armfortas::driver::OptLevel::O2,
5757
         OptLevel::O3 => armfortas::driver::OptLevel::O3,
58
+        OptLevel::Os => armfortas::driver::OptLevel::Os,
5859
         OptLevel::Ofast => armfortas::driver::OptLevel::Ofast,
5960
     }
6061
 }
@@ -65,6 +66,7 @@ fn from_driver_opt_level(opt_level: armfortas::driver::OptLevel) -> OptLevel {
6566
         armfortas::driver::OptLevel::O1 => OptLevel::O1,
6667
         armfortas::driver::OptLevel::O2 => OptLevel::O2,
6768
         armfortas::driver::OptLevel::O3 => OptLevel::O3,
69
+        armfortas::driver::OptLevel::Os => OptLevel::Os,
6870
         armfortas::driver::OptLevel::Ofast => OptLevel::Ofast,
6971
     }
7072
 }
@@ -159,3 +161,15 @@ pub mod test_support {
159161
     pub use armfortas::ir::verify::verify_module;
160162
     pub use armfortas::lexer::{Position, Span};
161163
 }
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> {
12021202
     Ok(levels.into_iter().collect())
12031203
 }
12041204
 
1205
-fn all_opt_levels() -> [OptLevel; 5] {
1205
+fn all_opt_levels() -> [OptLevel; 6] {
12061206
     [
12071207
         OptLevel::O0,
12081208
         OptLevel::O1,
12091209
         OptLevel::O2,
12101210
         OptLevel::O3,
1211
+        OptLevel::Os,
12111212
         OptLevel::Ofast,
12121213
     ]
12131214
 }
@@ -4946,6 +4947,21 @@ end
49464947
         let _ = fs::remove_file(&root);
49474948
     }
49484949
 
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
+
49494965
     #[test]
49504966
     fn parses_consistency_checks() {
49514967
         let root = std::env::temp_dir().join("afs_tests_consistency_spec.afs");