-
Notifications
You must be signed in to change notification settings - Fork 908
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Consider boxing Error
in wgsl parser.
#4452
Comments
Here are size profiles of before: https://share.firefox.dev/3p6Jzol |
A fun fact revealed by this is that around 5% of |
Interesting! Any explanation there? I'd expect |
0x1001513d9: mov rcx, qword ptr [r15] naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x1001513dc: mov rdx, qword ptr [r15 + 8] naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x1001513e0: mov r10, qword ptr [r15 + 0x28] naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x1001513e4: mov r11, qword ptr [r15 + 0x30] naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x1001513e8: mov rbx, qword ptr [r15 + 0x38] naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x1001513ec: mov r8, qword ptr [r15 + 0x10] naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x1001513f0: mov r9, qword ptr [r15 + 0x40] naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x1001513f4: mov rsi, qword ptr [r15 + 0x48] naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x1001513f8: mov rdi, qword ptr [r15 + 0x50] naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x1001513fc: mov qword ptr [rbp - 0x90], rcx naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x100151403: mov qword ptr [rbp - 0x88], rdx naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x10015140a: mov qword ptr [rbp - 0x80], rax naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x10015140e: mov qword ptr [rbp - 0x78], r10 naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x100151412: mov qword ptr [rbp - 0x70], r11 naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x100151416: mov qword ptr [rbp - 0x68], rbx naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x10015141a: mov qword ptr [rbp - 0x60], r8 naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x10015141e: mov qword ptr [rbp - 0x58], rsi naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x100151422: mov qword ptr [rbp - 0x50], rdi naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x100151426: mov qword ptr [rbp - 0x48], r9 naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x10015142a: mov qword ptr [rbp - 0x40], r12 naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x10015142e: lea rax, [rbp - 0x170] naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x100151435: mov qword ptr [rbp - 0x38], rax naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x100151439: mov rbx, r12 naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c
0x10015143c: lea r12, [rbp - 0x90] naga::front::wgsl::StatementContext::as_expression::h6d151787295027fb naga::front::wgsl::Parser::parse_statement::h9263f31b2d3df89c I haven't tried to see what's preventing the moves from being elided, but it doesn't look like it'd necessarily be easy for the compiler to do because it's not just plain memcpy. |
so much for trying to limit the amount of data we pass in... we could try just passing |
It looks like
Error
is 80 bytes on x86-64 which will make theResult<>
returned from a lot of the lexing functions pretty big. A prototype of this reduced the size of naga::front::wgsl::Parser::parse from 24.2KiB to 21.9KiB. Unfortunately, because of rust-lang/rust#46607 the savings is not as much as it could be because every call to Box::new() ends up with an inlined test for a null return from _rust_alloc.The text was updated successfully, but these errors were encountered: