Skip to content
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

Add a separate path for messages with no format arguments #366

Merged
merged 3 commits into from
Dec 9, 2019

Conversation

sfackler
Copy link
Member

This cuts the size of

fn main() {
    log::warn!("hello world");
}

from 95 bytes:

00000000000042f0 <_ZN3foo4main17h91a1e0cbbd2d1746E>:
    42f0:       48 83 ec 38             sub    $0x38,%rsp
    42f4:       48 8d 05 55 dd 02 00    lea    0x2dd55(%rip),%rax        # 32050 <_ZN3log20MAX_LOG_LEVEL_FILTER17h8b54f41fea648f5cE>
    42fb:       48 8b 00                mov    (%rax),%rax
    42fe:       48 83 f8 03             cmp    $0x3,%rax
    4302:       72 47                   jb     434b <_ZN3foo4main17h91a1e0cbbd2d1746E+0x5b>
    4304:       48 8d 05 1d bd 02 00    lea    0x2bd1d(%rip),%rax        # 30028 <anon.7cf0325160a81106a62a3eb77a18e0e0.0.llvm.16433780892884680004+0x30>
    430b:       48 89 44 24 08          mov    %rax,0x8(%rsp)
    4310:       48 c7 44 24 10 01 00    movq   $0x1,0x10(%rsp)
    4317:       00 00
    4319:       48 c7 44 24 18 00 00    movq   $0x0,0x18(%rsp)
    4320:       00 00
    4322:       48 c7 44 24 28 08 00    movq   $0x8,0x28(%rsp)
    4329:       00 00
    432b:       48 c7 44 24 30 00 00    movq   $0x0,0x30(%rsp)
    4332:       00 00
    4334:       48 8d 15 fd bc 02 00    lea    0x2bcfd(%rip),%rdx        # 30038 <anon.7cf0325160a81106a62a3eb77a18e0e0.0.llvm.16433780892884680004+0x40>
    433b:       48 8d 7c 24 08          lea    0x8(%rsp),%rdi
    4340:       be 03 00 00 00          mov    $0x3,%esi
    4345:       ff 15 0d db 02 00       callq  *0x2db0d(%rip)        # 31e58 <_GLOBAL_OFFSET_TABLE_+0x4d8>
    434b:       48 83 c4 38             add    $0x38,%rsp
    434f:       c3                      retq

to 45 bytes:

00000000000042f0 <_ZN3foo4main17h91a1e0cbbd2d1746E>:
    42f0:       48 8d 05 59 dd 02 00    lea    0x2dd59(%rip),%rax        # 32050 <_ZN3log20MAX_LOG_LEVEL_FILTER17h8b54f41fea648f5cE>
    42f7:       48 8b 00                mov    (%rax),%rax
    42fa:       48 83 f8 03             cmp    $0x3,%rax
    42fe:       72 1e                   jb     431e <_ZN3foo4main17h91a1e0cbbd2d1746E+0x2e>
    4300:       48 8d 3d f9 0c 02 00    lea    0x20cf9(%rip),%rdi        # 25000 <_fini+0xe44>
    4307:       48 8d 0d 1a bd 02 00    lea    0x2bd1a(%rip),%rcx        # 30028 <anon.7cf0325160a81106a62a3eb77a18e0e0.0.llvm.16433780892884680004+0x30>
    430e:       be 0b 00 00 00          mov    $0xb,%esi
    4313:       ba 03 00 00 00          mov    $0x3,%edx
    4318:       ff 25 5a d8 02 00       jmpq   *0x2d85a(%rip)        # 31b78 <_GLOBAL_OFFSET_TABLE_+0x1f8>
    431e:       c3                      retq

Closes #365

This cuts the size of

```rust
fn main() {
    log::warn!("hello world");
}
```

from 95 bytes:

```asm
00000000000042f0 <_ZN3foo4main17h91a1e0cbbd2d1746E>:
    42f0:       48 83 ec 38             sub    $0x38,%rsp
    42f4:       48 8d 05 55 dd 02 00    lea    0x2dd55(%rip),%rax        # 32050 <_ZN3log20MAX_LOG_LEVEL_FILTER17h8b54f41fea648f5cE>
    42fb:       48 8b 00                mov    (%rax),%rax
    42fe:       48 83 f8 03             cmp    $0x3,%rax
    4302:       72 47                   jb     434b <_ZN3foo4main17h91a1e0cbbd2d1746E+0x5b>
    4304:       48 8d 05 1d bd 02 00    lea    0x2bd1d(%rip),%rax        # 30028 <anon.7cf0325160a81106a62a3eb77a18e0e0.0.llvm.16433780892884680004+0x30>
    430b:       48 89 44 24 08          mov    %rax,0x8(%rsp)
    4310:       48 c7 44 24 10 01 00    movq   $0x1,0x10(%rsp)
    4317:       00 00
    4319:       48 c7 44 24 18 00 00    movq   $0x0,0x18(%rsp)
    4320:       00 00
    4322:       48 c7 44 24 28 08 00    movq   $0x8,0x28(%rsp)
    4329:       00 00
    432b:       48 c7 44 24 30 00 00    movq   $0x0,0x30(%rsp)
    4332:       00 00
    4334:       48 8d 15 fd bc 02 00    lea    0x2bcfd(%rip),%rdx        # 30038 <anon.7cf0325160a81106a62a3eb77a18e0e0.0.llvm.16433780892884680004+0x40>
    433b:       48 8d 7c 24 08          lea    0x8(%rsp),%rdi
    4340:       be 03 00 00 00          mov    $0x3,%esi
    4345:       ff 15 0d db 02 00       callq  *0x2db0d(%rip)        # 31e58 <_GLOBAL_OFFSET_TABLE_+0x4d8>
    434b:       48 83 c4 38             add    $0x38,%rsp
    434f:       c3                      retq
```

to 45 bytes:

```asm
00000000000042f0 <_ZN3foo4main17h91a1e0cbbd2d1746E>:
    42f0:       48 8d 05 59 dd 02 00    lea    0x2dd59(%rip),%rax        # 32050 <_ZN3log20MAX_LOG_LEVEL_FILTER17h8b54f41fea648f5cE>
    42f7:       48 8b 00                mov    (%rax),%rax
    42fa:       48 83 f8 03             cmp    $0x3,%rax
    42fe:       72 1e                   jb     431e <_ZN3foo4main17h91a1e0cbbd2d1746E+0x2e>
    4300:       48 8d 3d f9 0c 02 00    lea    0x20cf9(%rip),%rdi        # 25000 <_fini+0xe44>
    4307:       48 8d 0d 1a bd 02 00    lea    0x2bd1a(%rip),%rcx        # 30028 <anon.7cf0325160a81106a62a3eb77a18e0e0.0.llvm.16433780892884680004+0x30>
    430e:       be 0b 00 00 00          mov    $0xb,%esi
    4313:       ba 03 00 00 00          mov    $0x3,%edx
    4318:       ff 25 5a d8 02 00       jmpq   *0x2d85a(%rip)        # 31b78 <_GLOBAL_OFFSET_TABLE_+0x1f8>
    431e:       c3                      retq
```

Closes rust-lang#365
@sfackler
Copy link
Member Author

r? @KodrAus

@@ -1390,6 +1390,25 @@ pub fn __private_api_log(
);
}

// WARNING: this is not part of the crate's public API and is subject to change at any time
#[doc(hidden)]
pub fn __private_api_log_lit(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is lit a type-o or is lite too long?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's short for literal, not lite.

@sfackler
Copy link
Member Author

sfackler commented Dec 5, 2019

ping @KodrAus

Copy link
Contributor

@KodrAus KodrAus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the ping @sfackler! This looks good to me

@KodrAus
Copy link
Contributor

KodrAus commented Dec 9, 2019

Ah merge conflict with the key-value stuff 😓

I think all we need to do here is move the __private_api_log_lit call to the right spot in the inner macro.

@KodrAus
Copy link
Contributor

KodrAus commented Dec 9, 2019

Thanks @yoshuawuyts for the macro tests! They're paying off already :)

@KodrAus KodrAus merged commit 4597769 into rust-lang:master Dec 9, 2019
@sfackler sfackler deleted the lit-code-size branch August 7, 2020 16:34
EFanZh pushed a commit to EFanZh/log that referenced this pull request Jul 23, 2023
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Félix Saparelli <felix@passcod.name>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Suboptimal code generation for string literal logs
3 participants