rust/compiler
bors 58136ffa92 Auto merge of #108440 - Zoxc:encoder-enum, r=cjgillot
Emit the enum discriminant separately for the Encodable macro

This changes the `Encodable` proc macro to first emit the discriminant with a separate `match` statement, then emit the fields. LLVM can optimize down the first `match` to just a read of the enum discriminant. This avoids generating a `emit_usize` call per variant and enums with no fields now optimize down to just a single `emit_usize` call.

The no variant case is special cased to avoid warnings about unreachable code.

<table><tr><td rowspan="2">Benchmark</td><td colspan="1"><b>Before</b></th><td colspan="2"><b>After</b></th></tr><tr><td align="right">Time</td><td align="right">Time</td><td align="right">%</th></tr><tr><td>🟣 <b>clap</b>:check:unchanged</td><td align="right">0.4676s</td><td align="right">0.4640s</td><td align="right"> -0.78%</td></tr><tr><td>🟣 <b>hyper</b>:check:unchanged</td><td align="right">0.1348s</td><td align="right">0.1338s</td><td align="right"> -0.75%</td></tr><tr><td>🟣 <b>regex</b>:check:unchanged</td><td align="right">0.3370s</td><td align="right">0.3352s</td><td align="right"> -0.54%</td></tr><tr><td>🟣 <b>syn</b>:check:unchanged</td><td align="right">0.6326s</td><td align="right">0.6281s</td><td align="right"> -0.71%</td></tr><tr><td>🟣 <b>syntex_syntax</b>:check:unchanged</td><td align="right">1.8561s</td><td align="right">1.8589s</td><td align="right"> 0.15%</td></tr><tr><td>Total</td><td align="right">3.4282s</td><td align="right">3.4200s</td><td align="right"> -0.24%</td></tr><tr><td>Summary</td><td align="right">1.0000s</td><td align="right">0.9947s</td><td align="right"> -0.53%</td></tr></table>
2023-02-26 21:41:17 +00:00
..
rustc Add a new rustc_driver dylib to rexport rustc_driver_impl 2023-02-02 07:34:41 +01:00
rustc_abi Rollup merge of #107592 - workingjubilee:use-16-bit-enum-on-16-bit-targets, r=WaffleLapkin 2023-02-17 12:39:05 +01:00
rustc_apfloat
rustc_arena
rustc_ast Use ThinVec in a few more AST types. 2023-02-21 11:51:56 +11:00
rustc_ast_lowering Add ErrorGuaranteed to HIR ExprKind::Err 2023-02-25 19:46:36 +00:00
rustc_ast_passes Complete migrating ast_passes to derive diagnostics 2023-02-25 15:19:13 +00:00
rustc_ast_pretty Use ThinVec in various AST types. 2023-02-21 11:51:56 +11:00
rustc_attr errors: generate typed identifiers in each crate 2023-02-22 09:15:53 +00:00
rustc_baked_icu_data update ICU4X to 1.1.0 2023-02-04 22:28:59 +01:00
rustc_borrowck Rename many interner functions. 2023-02-24 07:32:24 +11:00
rustc_builtin_macros Replace parse_[sth]_expr with parse_expr_[sth] function names 2023-02-24 05:12:03 +01:00
rustc_codegen_cranelift Rename many interner functions. 2023-02-24 07:32:24 +11:00
rustc_codegen_gcc Use List::empty() instead of mk_substs(&[]). 2023-02-24 07:33:02 +11:00
rustc_codegen_llvm Use List::empty() instead of mk_substs(&[]). 2023-02-24 07:33:02 +11:00
rustc_codegen_ssa Rename many interner functions. 2023-02-24 07:32:24 +11:00
rustc_const_eval Rename many interner functions. 2023-02-24 07:32:24 +11:00
rustc_data_structures Upgrade ena to 0.14.1. 2023-02-24 08:53:27 +11:00
rustc_driver Remove unneeded extern crate 2023-02-02 07:47:39 +01:00
rustc_driver_impl refactor: statically guarantee that current error codes are documented 2023-02-26 20:12:36 +13:00
rustc_error_codes refactor: statically guarantee that current error codes are documented 2023-02-26 20:12:36 +13:00
rustc_error_messages Handle selecting the default locale better 2023-02-23 01:14:10 +01:00
rustc_errors Rollup merge of #108482 - Ezrashaw:force-error-docs, r=GuillaumeGomez 2023-02-26 12:05:00 +01:00
rustc_expand make "proc macro panicked" translatable 2023-02-24 23:37:10 +02:00
rustc_feature Adjust tracking issue for non_lifetime_binders 2023-02-18 02:42:43 +00:00
rustc_fs_util
rustc_graphviz
rustc_hir Rollup merge of #108484 - Nilstrieb:˂DiagnosticItem˂FromFn˃ as From˂˂LangItemFromFn˃˃˃꞉꞉from, r=cjgillot 2023-02-26 12:05:01 +01:00
rustc_hir_analysis Rollup merge of #108379 - compiler-errors:hir-error-guaranteed, r=cjgillot 2023-02-26 12:04:58 +01:00
rustc_hir_pretty Add ErrorGuaranteed to HIR ExprKind::Err 2023-02-25 19:46:36 +00:00
rustc_hir_typeck Add ErrorGuaranteed to HIR ExprKind::Err 2023-02-25 19:46:36 +00:00
rustc_incremental errors: generate typed identifiers in each crate 2023-02-22 09:15:53 +00:00
rustc_index
rustc_infer Rollup merge of #108424 - megakorre:elaborator_refactor, r=compiler-errors 2023-02-26 12:04:59 +01:00
rustc_interface Rollup merge of #107675 - jsgf:link-directives, r=davidtwco 2023-02-25 11:53:09 -08:00
rustc_lexer Update lexer lifetime test 2023-02-14 23:25:01 +08:00
rustc_lint Rollup merge of #107890 - obeis:mapping-to-unit, r=cjgillot 2023-02-26 00:46:25 +01:00
rustc_lint_defs Add check for invalid \#[macro_export]\ arguments 2023-02-22 21:53:16 +00:00
rustc_llvm Add kernel-address sanitizer support for freestanding targets 2023-02-14 20:54:25 -05:00
rustc_log Rollup merge of #107895 - matthiaskrgr:cl, r=compiler-errors 2023-02-11 17:18:44 +01:00
rustc_macros Emit the enum discriminant separately for the Encodable macro 2023-02-25 01:04:56 +01:00
rustc_metadata Rollup merge of #107675 - jsgf:link-directives, r=davidtwco 2023-02-25 11:53:09 -08:00
rustc_middle Auto merge of #108375 - Zoxc:query-inline, r=cjgillot 2023-02-26 09:44:54 +00:00
rustc_mir_build Add ErrorGuaranteed to HIR ExprKind::Err 2023-02-25 19:46:36 +00:00
rustc_mir_dataflow Auto merge of #108250 - nnethercote:rename-interner-funcs, r=compiler-errors 2023-02-25 13:55:26 +00:00
rustc_mir_transform Auto merge of #108250 - nnethercote:rename-interner-funcs, r=compiler-errors 2023-02-25 13:55:26 +00:00
rustc_monomorphize Rename many interner functions. 2023-02-24 07:32:24 +11:00
rustc_parse Rollup merge of #108418 - est31:parser_function_names, r=Nilstrieb 2023-02-26 12:04:59 +01:00
rustc_parse_format Replace some thens with some then_somes 2023-02-16 15:26:03 +00:00
rustc_passes Rollup merge of #108379 - compiler-errors:hir-error-guaranteed, r=cjgillot 2023-02-26 12:04:58 +01:00
rustc_plugin_impl errors: generate typed identifiers in each crate 2023-02-22 09:15:53 +00:00
rustc_privacy Auto merge of #108324 - notriddle:notriddle/assoc-fn-method, r=compiler-errors,davidtwco,estebank,oli-obk 2023-02-23 00:19:12 +00:00
rustc_query_impl Move ensure_sufficient_stack to try_execute_query callers 2023-02-25 06:11:01 +01:00
rustc_query_system Don't inline try_execute_query 2023-02-25 06:11:02 +01:00
rustc_resolve Auto merge of #108324 - notriddle:notriddle/assoc-fn-method, r=compiler-errors,davidtwco,estebank,oli-obk 2023-02-23 00:19:12 +00:00
rustc_serialize Emit the enum discriminant separately for the Encodable macro 2023-02-25 01:04:56 +01:00
rustc_session Rollup merge of #107675 - jsgf:link-directives, r=davidtwco 2023-02-25 11:53:09 -08:00
rustc_smir
rustc_span Rollup merge of #108484 - Nilstrieb:˂DiagnosticItem˂FromFn˃ as From˂˂LangItemFromFn˃˃˃꞉꞉from, r=cjgillot 2023-02-26 12:05:01 +01:00
rustc_symbol_mangling Rename many interner functions. 2023-02-24 07:32:24 +11:00
rustc_target Auto merge of #106476 - keith:ks/add-sanitizer-support-for-modern-ios-platforms, r=badboy 2023-02-18 05:58:41 +00:00
rustc_trait_selection Rollup merge of #107941 - compiler-errors:str-has-u8-slice-for-auto, r=lcnr 2023-02-26 12:04:57 +01:00
rustc_traits Add mk_canonical_var_infos_from_iter. 2023-02-24 07:33:02 +11:00
rustc_transmute Remove type-traversal trait aliases 2023-02-22 17:04:58 +00:00
rustc_ty_utils Rename many interner functions. 2023-02-24 07:32:24 +11:00
rustc_type_ir make first component of dyn* use pointer layout+type, and adjust DynStar comment 2023-02-18 19:24:55 +00:00