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 {
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");