@@ -9,7 +9,7 @@ use rustc_errors::FatalError;
99use rustc_middle:: bug;
1010use rustc_middle:: dep_graph:: WorkProduct ;
1111use rustc_middle:: middle:: dependency_format:: Linkage ;
12- use rustc_session:: config:: { CrateType , Lto , OutputFilenames , OutputType } ;
12+ use rustc_session:: config:: { CrateType , DebugInfo , Lto , OptLevel , OutputFilenames , OutputType } ;
1313use rustc_session:: output:: { check_file_is_writeable, invalid_output_for_target, out_filename} ;
1414use rustc_session:: utils:: NativeLibKind ;
1515use rustc_session:: Session ;
@@ -124,7 +124,8 @@ fn link_exe(
124124
125125 let spv_binary = do_link ( sess, & objects, & rlibs, legalize) ;
126126
127- let spv_binary = if env:: var ( "SPIRV_OPT" ) . is_ok ( ) {
127+ let spv_binary = if sess. opts . optimize != OptLevel :: No || sess. opts . debuginfo == DebugInfo :: None
128+ {
128129 let _timer = sess. timer ( "link_spirv_opt" ) ;
129130 do_spirv_opt ( sess, spv_binary, out_filename)
130131 } else {
@@ -157,10 +158,21 @@ fn do_spirv_opt(sess: &Session, spv_binary: Vec<u32>, filename: &Path) -> Vec<u3
157158
158159 let mut optimizer = opt:: create ( None ) ;
159160
160- optimizer
161- . register_size_passes ( )
162- . register_pass ( opt:: Passes :: EliminateDeadConstant )
163- . register_pass ( opt:: Passes :: StripDebugInfo ) ;
161+ match sess. opts . optimize {
162+ OptLevel :: No => { }
163+ OptLevel :: Less | OptLevel :: Default | OptLevel :: Aggressive => {
164+ optimizer. register_performance_passes ( ) ;
165+ }
166+ OptLevel :: Size | OptLevel :: SizeMin => {
167+ optimizer. register_size_passes ( ) ;
168+ }
169+ }
170+
171+ if sess. opts . debuginfo == DebugInfo :: None {
172+ optimizer
173+ . register_pass ( opt:: Passes :: EliminateDeadConstant )
174+ . register_pass ( opt:: Passes :: StripDebugInfo ) ;
175+ }
164176
165177 let result = optimizer. optimize (
166178 & spv_binary,
0 commit comments