[PATCH] D22782: Added 'inline' attribute to __init to inline the basic_string's constructor
Laxman Sole via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 26 15:28:40 PDT 2016
laxmansole added a comment.
In https://reviews.llvm.org/D22782#495436, @mclow.lists wrote:
> Do we have a test for the problem that this is solving?
$ cat foo.cpp
int foo(const std::string name);
int main(){
return foo("bar");
}
$clang++ -S -O3 -fno-exceptions foo.cpp
Assembly output without patch:
_Z3barv: // @_Z3barv
// BB#0: // %entry
sub sp, sp, #64 // =64
adrp x1, .L.str
add x1, x1, :lo12:.L.str
add x0, sp, #8 // =8
orr w2, wzr, #0x3
stp xzr, x19, [sp, #24] // 8-byte Folded Spill
stp x29, x30, [sp, #48] // 8-byte Folded Spill
add x29, sp, #48 // =48
stp xzr, xzr, [sp, #8]
bl _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm
add x0, sp, #8 // =8
bl _Z3fooNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE
and w19, w0, #0x1
add x0, sp, #8 // =8
bl _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev
mov w0, w19
ldp x29, x30, [sp, #48] // 8-byte Folded Reload
ldr x19, [sp, #32] // 8-byte Folded Reload
add sp, sp, #64 // =64
ret
Assembly output with path:
_Z3barv: // @_Z3barv
// BB#0: // %entry
sub sp, sp, #64 // =64
orr w8, wzr, #0x6
mov w9, #114
mov w10, #24930
add x0, sp, #8 // =8
stp xzr, x19, [sp, #24] // 8-byte Folded Spill
stp x29, x30, [sp, #48] // 8-byte Folded Spill
add x29, sp, #48 // =48
stp xzr, xzr, [sp, #8]
strb w8, [sp, #8]
strb w9, [sp, #11]
sturh w10, [sp, #9]
strb wzr, [sp, #12]
bl _Z3fooNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE
and w19, w0, #0x1
add x0, sp, #8 // =8
bl _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev
mov w0, w19
ldp x29, x30, [sp, #48] // 8-byte Folded Reload
ldr x19, [sp, #32] // 8-byte Folded Reload
add sp, sp, #64 // =64
ret
We can see that call to _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm get inlined.
https://reviews.llvm.org/D22782
More information about the cfe-commits
mailing list