@@ -18,13 +18,13 @@ type FunctionMap = FxHashMap<Word, usize>;
18
18
pub fn inline ( sess : & Session , module : & mut Module ) -> super :: Result < ( ) > {
19
19
let ( disallowed_argument_types, disallowed_return_types) =
20
20
compute_disallowed_argument_and_return_types ( module) ;
21
- let mut to_delete: Vec < _ > = module
21
+ let to_delete: Vec < _ > = module
22
22
. functions
23
23
. iter ( )
24
24
. map ( |f| should_inline ( & disallowed_argument_types, & disallowed_return_types, f) )
25
25
. collect ( ) ;
26
26
// This algorithm gets real sad if there's recursion - but, good news, SPIR-V bans recursion
27
- let postorder = compute_function_postorder ( sess, module, & mut to_delete) ?;
27
+ let postorder = compute_function_postorder ( sess, module, & to_delete) ?;
28
28
let functions = module
29
29
. functions
30
30
. iter ( )
@@ -76,7 +76,7 @@ pub fn inline(sess: &Session, module: &mut Module) -> super::Result<()> {
76
76
fn compute_function_postorder (
77
77
sess : & Session ,
78
78
module : & Module ,
79
- to_delete : & mut [ bool ] ,
79
+ to_delete : & [ bool ] ,
80
80
) -> super :: Result < Vec < usize > > {
81
81
let func_to_index: FxHashMap < Word , usize > = module
82
82
. functions
@@ -93,18 +93,12 @@ fn compute_function_postorder(
93
93
Discovered ,
94
94
/// DFS returned.
95
95
Finished ,
96
- /// Not visited, entry point.
97
- Entry ,
98
96
}
99
97
let mut states = vec ! [ NodeState :: NotVisited ; module. functions. len( ) ] ;
100
- for opep in module. entry_points . iter ( ) {
101
- let func_id = opep. operands [ 1 ] . unwrap_id_ref ( ) ;
102
- states[ func_to_index[ & func_id] ] = NodeState :: Entry ;
103
- }
104
98
let mut has_recursion = false ;
105
99
let mut postorder = vec ! [ ] ;
106
100
for index in 0 ..module. functions . len ( ) {
107
- if NodeState :: Entry == states[ index] {
101
+ if NodeState :: NotVisited == states[ index ] && !to_delete [ index] {
108
102
visit (
109
103
sess,
110
104
module,
@@ -117,12 +111,6 @@ fn compute_function_postorder(
117
111
}
118
112
}
119
113
120
- for index in 0 ..module. functions . len ( ) {
121
- if NodeState :: NotVisited == states[ index] {
122
- to_delete[ index] = true ;
123
- }
124
- }
125
-
126
114
fn visit (
127
115
sess : & Session ,
128
116
module : & Module ,
@@ -148,7 +136,7 @@ fn compute_function_postorder(
148
136
* has_recursion = true ;
149
137
break ;
150
138
}
151
- NodeState :: NotVisited | NodeState :: Entry => {
139
+ NodeState :: NotVisited => {
152
140
visit (
153
141
sess,
154
142
module,
0 commit comments