@@ -381,6 +381,17 @@ static void jl_encode_value_(jl_ircode_state *s, jl_value_t *v, int as_literal)
381381 }
382382}
383383
384+ static jl_code_info_flags_t code_info_flags (uint8_t pure , uint8_t propagate_inbounds , uint8_t inlineable , uint8_t inferred , uint8_t constprop )
385+ {
386+ jl_code_info_flags_t flags ;
387+ flags .bits .pure = pure ;
388+ flags .bits .propagate_inbounds = propagate_inbounds ;
389+ flags .bits .inlineable = inlineable ;
390+ flags .bits .inferred = inferred ;
391+ flags .bits .constprop = constprop ;
392+ return flags ;
393+ }
394+
384395// --- decoding ---
385396
386397static jl_value_t * jl_decode_value (jl_ircode_state * s ) JL_GC_DISABLED ;
@@ -702,12 +713,8 @@ JL_DLLEXPORT jl_array_t *jl_compress_ir(jl_method_t *m, jl_code_info_t *code)
702713 jl_current_task -> ptls
703714 };
704715
705- uint8_t flags = (code -> aggressive_constprop << 4 )
706- | (code -> inferred << 3 )
707- | (code -> inlineable << 2 )
708- | (code -> propagate_inbounds << 1 )
709- | (code -> pure << 0 );
710- write_uint8 (s .s , flags );
716+ jl_code_info_flags_t flags = code_info_flags (code -> pure , code -> propagate_inbounds , code -> inlineable , code -> inferred , code -> constprop );
717+ write_uint8 (s .s , flags .packed );
711718
712719 size_t nslots = jl_array_len (code -> slotflags );
713720 assert (nslots >= m -> nargs && nslots < INT32_MAX ); // required by generated functions
@@ -787,12 +794,13 @@ JL_DLLEXPORT jl_code_info_t *jl_uncompress_ir(jl_method_t *m, jl_code_instance_t
787794 };
788795
789796 jl_code_info_t * code = jl_new_code_info_uninit ();
790- uint8_t flags = read_uint8 (s .s );
791- code -> aggressive_constprop = !!(flags & (1 << 4 ));
792- code -> inferred = !!(flags & (1 << 3 ));
793- code -> inlineable = !!(flags & (1 << 2 ));
794- code -> propagate_inbounds = !!(flags & (1 << 1 ));
795- code -> pure = !!(flags & (1 << 0 ));
797+ jl_code_info_flags_t flags ;
798+ flags .packed = read_uint8 (s .s );
799+ code -> constprop = flags .bits .constprop ;
800+ code -> inferred = flags .bits .inferred ;
801+ code -> inlineable = flags .bits .inlineable ;
802+ code -> propagate_inbounds = flags .bits .propagate_inbounds ;
803+ code -> pure = flags .bits .pure ;
796804
797805 size_t nslots = read_int32 (& src );
798806 code -> slotflags = jl_alloc_array_1d (jl_array_uint8_type , nslots );
@@ -847,26 +855,29 @@ JL_DLLEXPORT uint8_t jl_ir_flag_inferred(jl_array_t *data)
847855 if (jl_is_code_info (data ))
848856 return ((jl_code_info_t * )data )-> inferred ;
849857 assert (jl_typeis (data , jl_array_uint8_type ));
850- uint8_t flags = ((uint8_t * )data -> data )[0 ];
851- return !!(flags & (1 << 3 ));
858+ jl_code_info_flags_t flags ;
859+ flags .packed = ((uint8_t * )data -> data )[0 ];
860+ return flags .bits .inferred ;
852861}
853862
854863JL_DLLEXPORT uint8_t jl_ir_flag_inlineable (jl_array_t * data )
855864{
856865 if (jl_is_code_info (data ))
857866 return ((jl_code_info_t * )data )-> inlineable ;
858867 assert (jl_typeis (data , jl_array_uint8_type ));
859- uint8_t flags = ((uint8_t * )data -> data )[0 ];
860- return !!(flags & (1 << 2 ));
868+ jl_code_info_flags_t flags ;
869+ flags .packed = ((uint8_t * )data -> data )[0 ];
870+ return flags .bits .inlineable ;
861871}
862872
863873JL_DLLEXPORT uint8_t jl_ir_flag_pure (jl_array_t * data )
864874{
865875 if (jl_is_code_info (data ))
866876 return ((jl_code_info_t * )data )-> pure ;
867877 assert (jl_typeis (data , jl_array_uint8_type ));
868- uint8_t flags = ((uint8_t * )data -> data )[0 ];
869- return !!(flags & (1 << 0 ));
878+ jl_code_info_flags_t flags ;
879+ flags .packed = ((uint8_t * )data -> data )[0 ];
880+ return flags .bits .pure ;
870881}
871882
872883JL_DLLEXPORT jl_value_t * jl_compress_argnames (jl_array_t * syms )
0 commit comments