@@ -51,6 +51,14 @@ use std::thread;
5151
5252const PRE_LTO_BC_EXT : & str = "pre-lto.bc" ;
5353
54+ /// The kind of bitcode to embed in object files.
55+ #[ derive( PartialEq ) ]
56+ pub enum EmbedBitcode {
57+ None ,
58+ Marker ,
59+ Full ,
60+ }
61+
5462/// Module-specific configuration for `optimize_and_codegen`.
5563pub struct ModuleConfig {
5664 /// Names of additional optimization passes to run.
@@ -93,8 +101,7 @@ pub struct ModuleConfig {
93101 // emscripten's ecc compiler, when used as the linker.
94102 pub obj_is_bitcode : bool ,
95103 pub no_integrated_as : bool ,
96- pub embed_bitcode : bool ,
97- pub embed_bitcode_marker : bool ,
104+ pub embed_bitcode : EmbedBitcode ,
98105}
99106
100107impl ModuleConfig {
@@ -119,8 +126,7 @@ impl ModuleConfig {
119126 emit_asm : false ,
120127 emit_obj : false ,
121128 obj_is_bitcode : false ,
122- embed_bitcode : false ,
123- embed_bitcode_marker : false ,
129+ embed_bitcode : EmbedBitcode :: None ,
124130 no_integrated_as : false ,
125131
126132 verify_llvm_ir : false ,
@@ -143,16 +149,15 @@ impl ModuleConfig {
143149 self . new_llvm_pass_manager = sess. opts . debugging_opts . new_llvm_pass_manager ;
144150 self . obj_is_bitcode =
145151 sess. target . target . options . obj_is_bitcode || sess. opts . cg . linker_plugin_lto . enabled ( ) ;
146- let embed_bitcode =
147- sess. target . target . options . embed_bitcode || sess. opts . debugging_opts . embed_bitcode ;
148- if embed_bitcode {
149- match sess. opts . optimize {
150- config:: OptLevel :: No | config:: OptLevel :: Less => {
151- self . embed_bitcode_marker = embed_bitcode;
152+ self . embed_bitcode =
153+ if sess. target . target . options . embed_bitcode || sess. opts . debugging_opts . embed_bitcode {
154+ match sess. opts . optimize {
155+ config:: OptLevel :: No | config:: OptLevel :: Less => EmbedBitcode :: Marker ,
156+ _ => EmbedBitcode :: Full ,
152157 }
153- _ => self . embed_bitcode = embed_bitcode ,
154- }
155- }
158+ } else {
159+ EmbedBitcode :: None
160+ } ;
156161
157162 // Copy what clang does by turning on loop vectorization at O2 and
158163 // slp vectorization at O3. Otherwise configure other optimization aspects
@@ -188,7 +193,10 @@ impl ModuleConfig {
188193 }
189194
190195 pub fn bitcode_needed ( & self ) -> bool {
191- self . emit_bc || self . obj_is_bitcode || self . emit_bc_compressed || self . embed_bitcode
196+ self . emit_bc
197+ || self . obj_is_bitcode
198+ || self . emit_bc_compressed
199+ || self . embed_bitcode == EmbedBitcode :: Full
192200 }
193201}
194202
0 commit comments