@@ -19,13 +19,13 @@ type FunctionMap = FxHashMap<Word, usize>;
19
19
pub fn inline ( sess : & Session , module : & mut Module ) -> super :: Result < ( ) > {
20
20
let ( disallowed_argument_types, disallowed_return_types) =
21
21
compute_disallowed_argument_and_return_types ( module) ;
22
- let mut to_delete: Vec < _ > = module
22
+ let to_delete: Vec < _ > = module
23
23
. functions
24
24
. iter ( )
25
25
. map ( |f| should_inline ( & disallowed_argument_types, & disallowed_return_types, f) )
26
26
. collect ( ) ;
27
27
// This algorithm gets real sad if there's recursion - but, good news, SPIR-V bans recursion
28
- let postorder = compute_function_postorder ( sess, module, & mut to_delete) ?;
28
+ let postorder = compute_function_postorder ( sess, module, & to_delete) ?;
29
29
let functions = module
30
30
. functions
31
31
. 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 = None ;
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 ,
@@ -147,7 +135,7 @@ fn compute_function_postorder(
147
135
) ) ) ;
148
136
break ;
149
137
}
150
- NodeState :: NotVisited | NodeState :: Entry => {
138
+ NodeState :: NotVisited => {
151
139
visit (
152
140
sess,
153
141
module,
0 commit comments