https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119455

            Bug ID: 119455
           Summary: gcobol: needs optimization for direct assignments
                    (don't call into runtime)
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: cobol
          Assignee: unassigned at gcc dot gnu.org
          Reporter: simonsobisch at gnu dot org
  Target Milestone: ---

Sample program:

~~~
         PROGRAM-ID. STRMOV.
         DATA DIVISION.
         WORKING-STORAGE SECTION.
         77 dat  pic x.
         PROCEDURE DIVISION.
         move 'a' to dat
         STOP RUN.
~~~

This program has a single byte data field and assigns a single-byte.
While this assignment can easily be "inlined", it currently uses a call into
libgcobol.

To reproduce:

~~~
gcobol -g STRMOV.cob
gdb -batch -ex "set disassemble-next-line on" -ex "b STRMOV.cob:6" -ex run
a.out 
~~~

Result:

~~~
Breakpoint 1, strmov () at STRMOV.cob:6
6                move 'a' to dat
=> 0x0000000000401572 <strmov+723>:     48 c7 85 20 ff ff ff 00 00 00 00       
movq   $0x0,-0xe0(%rbp)
   0x000000000040157d <strmov+734>:     48 c7 85 18 ff ff ff 00 00 00 00       
movq   $0x0,-0xe8(%rbp)
   0x0000000000401588 <strmov+745>:     48 8b 85 18 ff ff ff    mov   
-0xe8(%rbp),%rax
   0x000000000040158f <strmov+752>:     41 b9 01 00 00 00       mov   
$0x1,%r9d
   0x0000000000401595 <strmov+758>:     41 b8 36 17 40 00       mov   
$0x401736,%r8d
   0x000000000040159b <strmov+764>:     b9 07 00 00 00  mov    $0x7,%ecx
   0x00000000004015a0 <strmov+769>:     ba 01 00 00 00  mov    $0x1,%edx
   0x00000000004015a5 <strmov+774>:     48 89 c6        mov    %rax,%rsi
   0x00000000004015a8 <strmov+777>:     bf a0 21 60 00  mov    $0x6021a0,%edi
   0x00000000004015ad <strmov+782>:     e8 0e fa ff ff  callq  0x400fc0
<__gg__move_literala@plt>
~~~

Reply via email to