Skip to content

Commit 5874bec

Browse files
committed
Add llvm 8 coroutine passes
1 parent dd64c40 commit 5874bec

File tree

2 files changed

+49
-12
lines changed

2 files changed

+49
-12
lines changed

src/passes.rs

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ impl<T: PassManagerSubType> PassManager<T> {
435435
/// for each pair of compatible instructions. These heuristics
436436
/// are intended to prevent vectorization in cases where it would
437437
/// not yield a performance increase of the resulting code.
438-
#[llvm_versions(3.6..=6.0)]
438+
#[llvm_versions(3.6..=4.0)]
439439
pub fn add_bb_vectorize_pass(&self) {
440440
use llvm_sys::transforms::vectorize::LLVMAddBBVectorizePass;
441441

@@ -1048,31 +1048,60 @@ impl<T: PassManagerSubType> PassManager<T> {
10481048
}
10491049
}
10501050

1051-
#[llvm_versions(7.0)]
1051+
#[llvm_versions(7.0..=latest)]
10521052
pub fn add_aggressive_inst_combiner_pass(&self) {
1053+
#[cfg(feature = "llvm7-0")]
10531054
use llvm_sys::transforms::scalar::LLVMAddAggressiveInstCombinerPass;
1055+
#[cfg(not(feature = "llvm7-0"))]
1056+
use llvm_sys::transforms::aggressive_instcombine::LLVMAddAggressiveInstCombinerPass;
10541057

10551058
unsafe {
10561059
LLVMAddAggressiveInstCombinerPass(self.pass_manager)
10571060
}
10581061
}
10591062

1063+
#[llvm_versions(7.0..=latest)]
1064+
pub fn add_loop_unroll_and_jam_pass(&self) {
1065+
use llvm_sys::transforms::scalar::LLVMAddLoopUnrollAndJamPass;
1066+
1067+
unsafe {
1068+
LLVMAddLoopUnrollAndJamPass(self.pass_manager)
1069+
}
1070+
}
1071+
10601072
#[llvm_versions(8.0..=latest)]
1061-
pub fn add_aggressive_inst_combiner_pass(&self) {
1062-
use llvm_sys::transforms::aggressive_instcombine::LLVMAddAggressiveInstCombinerPass;
1073+
pub fn add_coroutine_early_pass(&self) {
1074+
use llvm_sys::transforms::coroutine::LLVMAddCoroEarlyPass;
10631075

10641076
unsafe {
1065-
LLVMAddAggressiveInstCombinerPass(self.pass_manager)
1077+
LLVMAddCoroEarlyPass(self.pass_manager)
1078+
}
1079+
}
1080+
1081+
#[llvm_versions(8.0..=latest)]
1082+
pub fn add_coroutine_split_pass(&self) {
1083+
use llvm_sys::transforms::coroutine::LLVMAddCoroSplitPass;
1084+
1085+
unsafe {
1086+
LLVMAddCoroSplitPass(self.pass_manager)
10661087
}
10671088
}
10681089

1090+
#[llvm_versions(8.0..=latest)]
1091+
pub fn add_coroutine_elide_pass(&self) {
1092+
use llvm_sys::transforms::coroutine::LLVMAddCoroElidePass;
10691093

1070-
#[llvm_versions(7.0..=latest)]
1071-
pub fn add_loop_unroll_and_jam_pass(&self) {
1072-
use llvm_sys::transforms::scalar::LLVMAddLoopUnrollAndJamPass;
1094+
unsafe {
1095+
LLVMAddCoroElidePass(self.pass_manager)
1096+
}
1097+
}
1098+
1099+
#[llvm_versions(8.0..=latest)]
1100+
pub fn add_coroutine_cleanup_pass(&self) {
1101+
use llvm_sys::transforms::coroutine::LLVMAddCoroCleanupPass;
10731102

10741103
unsafe {
1075-
LLVMAddLoopUnrollAndJamPass(self.pass_manager)
1104+
LLVMAddCoroCleanupPass(self.pass_manager)
10761105
}
10771106
}
10781107
}

tests/all/test_passes.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ fn test_init_all_passes_for_module() {
2424
pass_manager.add_internalize_pass(true);
2525
pass_manager.add_strip_dead_prototypes_pass();
2626
pass_manager.add_strip_symbol_pass();
27-
#[cfg(any(feature = "llvm3-6", feature = "llvm3-7", feature = "llvm3-8", feature = "llvm3-9", feature = "llvm4-0",
28-
feature = "llvm5-0", feature = "llvm6-0"))]
27+
#[cfg(any(feature = "llvm3-6", feature = "llvm3-7", feature = "llvm3-8", feature = "llvm3-9", feature = "llvm4-0"))]
2928
pass_manager.add_bb_vectorize_pass();
3029
pass_manager.add_loop_vectorize_pass();
3130
pass_manager.add_slp_vectorize_pass();
@@ -82,6 +81,15 @@ fn test_init_all_passes_for_module() {
8281
pass_manager.add_loop_unroll_and_jam_pass();
8382
}
8483

84+
#[cfg(not(any(feature = "llvm3-6", feature = "llvm3-7", feature = "llvm3-8", feature = "llvm3-9",
85+
feature = "llvm4-0", feature = "llvm5-0", feature = "llvm6-0", feature = "llvm7-0")))]
86+
{
87+
pass_manager.add_coroutine_early_pass();
88+
pass_manager.add_coroutine_split_pass();
89+
pass_manager.add_coroutine_elide_pass();
90+
pass_manager.add_coroutine_cleanup_pass();
91+
}
92+
8593
pass_manager.run_on(&module);
8694
}
8795

@@ -123,7 +131,7 @@ fn test_pass_manager_builder() {
123131
assert!(!fn_pass_manager.run_on(&fn_value));
124132

125133
assert!(!fn_pass_manager.finalize());
126-
134+
127135
let module_pass_manager = PassManager::create(());
128136

129137
pass_manager_builder.populate_module_pass_manager(&module_pass_manager);

0 commit comments

Comments
 (0)