aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2020-06-19 12:07:33 +0100
committerJonathan Wakely <jwakely@redhat.com>2020-06-19 12:15:43 +0100
commitbafd12cb22e83b7da8946873513a897e48e2900f (patch)
tree09e4f83862b416060ac472d6864086838835c4d5 /gcc/fortran
parent6894d9101e6324972b5b105227f3412a6c46549d (diff)
downloadgcc-bafd12cb22e83b7da8946873513a897e48e2900f.zip
gcc-bafd12cb22e83b7da8946873513a897e48e2900f.tar.gz
gcc-bafd12cb22e83b7da8946873513a897e48e2900f.tar.bz2
libstdc++: Optimize std::optional default constructor
The attached patch changes the code generated for std::optional<std::array<int,1024>>f(){return{};} from movq $0, (%rdi) movq %rdi, %r8 leaq 8(%rdi), %rdi xorl %eax, %eax movq $0, 4084(%rdi) movq %r8, %rcx andq $-8, %rdi subq %rdi, %rcx addl $4100, %ecx shrl $3, %ecx rep stosq movq %r8, %rax or with different tuning subq $8, %rsp movl $4100, %edx xorl %esi, %esi call memset addq $8, %rsp to the much shorter movb $0, 4096(%rdi) movq %rdi, %rax i.e. the same as the nullopt constructor. The constructor was already non-trivial, so we don't lose that. It passes the testsuite without regression, but there is no new testcase to verify the better codegen. libstdc++-v3/ChangeLog: * include/std/optional (optional()): Explicitly define it.
Diffstat (limited to 'gcc/fortran')
0 files changed, 0 insertions, 0 deletions