https://bugs.llvm.org/show_bug.cgi?id=51110

            Bug ID: 51110
           Summary: Emitted binary code changes when -g is enabled at -O3
                    with -flto
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Loop Optimizer
          Assignee: unassignedb...@nondot.org
          Reporter: tlw...@uwaterloo.ca
                CC: llvm-bugs@lists.llvm.org

The .text section for the following program (transformed_program.c) changes
after toggling the -g flag.

$ cat transformed_program0.c
int printf(const char *, ...);
long a[8];
long *b;
long c[7];
int(d)(int l) { return 0; }
int main() {
  long *e = &c[6], *f = &a[2];
  b = e;
  int g = f != e, h = d(g);
  *b = 7;
i:;
  int k = h < 8;
  if (!k)
    goto j;
  printf("%d\n", (int)a[h]);
  h = h + 1;
  goto i;
j:;
}
$ 
$ clang-trunk -v
clang version 13.0.0 (https://github.com/llvm/llvm-project.git
9cfec72ffeec242783b70e792c50bd163dcf9dbb)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/cnsun/usr/bin
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/10
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/10
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Candidate multilib: x32;@mx32
Selected multilib: .;@m64
$
$ clang-trunk -flto -O3 -w transformed_program0.c ; objdump --disassemble a.out
> "no-g.txt"
$ clang-trunk -g -flto -O3 -w transformed_program0.c ; objdump --disassemble
a.out > "g.txt"
$ diff no-g.txt g.txt
40,41c40,41
<   401053:     49 c7 c0 20 12 40 00    mov    $0x401220,%r8
<   40105a:     48 c7 c1 b0 11 40 00    mov    $0x4011b0,%rcx
---
>   401053:     49 c7 c0 40 12 40 00    mov    $0x401240,%r8
>   40105a:     48 c7 c1 d0 11 40 00    mov    $0x4011d0,%rcx
113,144c113,136
<   401131:     bf 04 20 40 00          mov    $0x402004,%edi
<   401136:     31 f6                   xor    %esi,%esi
<   401138:     31 c0                   xor    %eax,%eax
<   40113a:     e8 f1 fe ff ff          callq  401030 <printf@plt>
<   40113f:     bf 04 20 40 00          mov    $0x402004,%edi
<   401144:     31 f6                   xor    %esi,%esi
<   401146:     31 c0                   xor    %eax,%eax
<   401148:     e8 e3 fe ff ff          callq  401030 <printf@plt>
<   40114d:     bf 04 20 40 00          mov    $0x402004,%edi
<   401152:     31 f6                   xor    %esi,%esi
<   401154:     31 c0                   xor    %eax,%eax
<   401156:     e8 d5 fe ff ff          callq  401030 <printf@plt>
<   40115b:     bf 04 20 40 00          mov    $0x402004,%edi
<   401160:     31 f6                   xor    %esi,%esi
<   401162:     31 c0                   xor    %eax,%eax
<   401164:     e8 c7 fe ff ff          callq  401030 <printf@plt>
<   401169:     bf 04 20 40 00          mov    $0x402004,%edi
<   40116e:     31 f6                   xor    %esi,%esi
<   401170:     31 c0                   xor    %eax,%eax
<   401172:     e8 b9 fe ff ff          callq  401030 <printf@plt>
<   401177:     bf 04 20 40 00          mov    $0x402004,%edi
<   40117c:     31 f6                   xor    %esi,%esi
<   40117e:     31 c0                   xor    %eax,%eax
<   401180:     e8 ab fe ff ff          callq  401030 <printf@plt>
<   401185:     bf 04 20 40 00          mov    $0x402004,%edi
<   40118a:     31 f6                   xor    %esi,%esi
<   40118c:     31 c0                   xor    %eax,%eax
<   40118e:     e8 9d fe ff ff          callq  401030 <printf@plt>
<   401193:     bf 04 20 40 00          mov    $0x402004,%edi
<   401198:     31 f6                   xor    %esi,%esi
<   40119a:     31 c0                   xor    %eax,%eax
<   40119c:     e8 8f fe ff ff          callq  401030 <printf@plt>
---
>   401131:     48 c7 05 34 2f 00 00    movq   $0x7,0x2f34(%rip)        # 
> 404070 <c+0x30>
>   401138:     07 00 00 00
>   40113c:     8b 35 3e 2f 00 00       mov    0x2f3e(%rip),%esi        # 
> 404080 <a>
>   401142:     bf 04 20 40 00          mov    $0x402004,%edi
>   401147:     31 c0                   xor    %eax,%eax
>   401149:     e8 e2 fe ff ff          callq  401030 <printf@plt>
>   40114e:     8b 35 34 2f 00 00       mov    0x2f34(%rip),%esi        # 
> 404088 <a+0x8>
>   401154:     bf 04 20 40 00          mov    $0x402004,%edi
>   401159:     31 c0                   xor    %eax,%eax
>   40115b:     e8 d0 fe ff ff          callq  401030 <printf@plt>
>   401160:     8b 35 2a 2f 00 00       mov    0x2f2a(%rip),%esi        # 
> 404090 <a+0x10>
>   401166:     bf 04 20 40 00          mov    $0x402004,%edi
>   40116b:     31 c0                   xor    %eax,%eax
>   40116d:     e8 be fe ff ff          callq  401030 <printf@plt>
>   401172:     8b 35 20 2f 00 00       mov    0x2f20(%rip),%esi        # 
> 404098 <a+0x18>
>   401178:     bf 04 20 40 00          mov    $0x402004,%edi
>   40117d:     31 c0                   xor    %eax,%eax
>   40117f:     e8 ac fe ff ff          callq  401030 <printf@plt>
>   401184:     8b 35 16 2f 00 00       mov    0x2f16(%rip),%esi        # 
> 4040a0 <a+0x20>
>   40118a:     bf 04 20 40 00          mov    $0x402004,%edi
>   40118f:     31 c0                   xor    %eax,%eax
>   401191:     e8 9a fe ff ff          callq  401030 <printf@plt>
>   401196:     8b 35 0c 2f 00 00       mov    0x2f0c(%rip),%esi        # 
> 4040a8 <a+0x28>
>   40119c:     bf 04 20 40 00          mov    $0x402004,%edi
146,192c138,191
<   4011a3:     59                      pop    %rcx
<   4011a4:     c3                      retq
<   4011a5:     66 2e 0f 1f 84 00 00    nopw   %cs:0x0(%rax,%rax,1)
<   4011ac:     00 00 00
<   4011af:     90                      nop
<
< 00000000004011b0 <__libc_csu_init>:
<   4011b0:     f3 0f 1e fa             endbr64
<   4011b4:     41 57                   push   %r15
<   4011b6:     4c 8d 3d 53 2c 00 00    lea    0x2c53(%rip),%r15        #
403e10 <__frame_dummy_init_array_entry>
<   4011bd:     41 56                   push   %r14
<   4011bf:     49 89 d6                mov    %rdx,%r14
<   4011c2:     41 55                   push   %r13
<   4011c4:     49 89 f5                mov    %rsi,%r13
<   4011c7:     41 54                   push   %r12
<   4011c9:     41 89 fc                mov    %edi,%r12d
<   4011cc:     55                      push   %rbp
<   4011cd:     48 8d 2d 44 2c 00 00    lea    0x2c44(%rip),%rbp        #
403e18 <__do_global_dtors_aux_fini_array_entry>
<   4011d4:     53                      push   %rbx
<   4011d5:     4c 29 fd                sub    %r15,%rbp
<   4011d8:     48 83 ec 08             sub    $0x8,%rsp
<   4011dc:     e8 1f fe ff ff          callq  401000 <_init>
<   4011e1:     48 c1 fd 03             sar    $0x3,%rbp
<   4011e5:     74 1f                   je     401206 <__libc_csu_init+0x56>
<   4011e7:     31 db                   xor    %ebx,%ebx
<   4011e9:     0f 1f 80 00 00 00 00    nopl   0x0(%rax)
<   4011f0:     4c 89 f2                mov    %r14,%rdx
<   4011f3:     4c 89 ee                mov    %r13,%rsi
<   4011f6:     44 89 e7                mov    %r12d,%edi
<   4011f9:     41 ff 14 df             callq  *(%r15,%rbx,8)
<   4011fd:     48 83 c3 01             add    $0x1,%rbx
<   401201:     48 39 dd                cmp    %rbx,%rbp
<   401204:     75 ea                   jne    4011f0 <__libc_csu_init+0x40>
<   401206:     48 83 c4 08             add    $0x8,%rsp
<   40120a:     5b                      pop    %rbx
<   40120b:     5d                      pop    %rbp
<   40120c:     41 5c                   pop    %r12
<   40120e:     41 5d                   pop    %r13
<   401210:     41 5e                   pop    %r14
<   401212:     41 5f                   pop    %r15
<   401214:     c3                      retq
<   401215:     66 66 2e 0f 1f 84 00    data16 nopw %cs:0x0(%rax,%rax,1)
<   40121c:     00 00 00 00
<
< 0000000000401220 <__libc_csu_fini>:
<   401220:     f3 0f 1e fa             endbr64
<   401224:     c3                      retq
---
>   4011a3:     e8 88 fe ff ff          callq  401030 <printf@plt>
>   4011a8:     8b 35 02 2f 00 00       mov    0x2f02(%rip),%esi        # 
> 4040b0 <a+0x30>
>   4011ae:     bf 04 20 40 00          mov    $0x402004,%edi
>   4011b3:     31 c0                   xor    %eax,%eax
>   4011b5:     e8 76 fe ff ff          callq  401030 <printf@plt>
>   4011ba:     8b 35 f8 2e 00 00       mov    0x2ef8(%rip),%esi        # 
> 4040b8 <a+0x38>
>   4011c0:     bf 04 20 40 00          mov    $0x402004,%edi
>   4011c5:     31 c0                   xor    %eax,%eax
>   4011c7:     e8 64 fe ff ff          callq  401030 <printf@plt>
>   4011cc:     31 c0                   xor    %eax,%eax
>   4011ce:     59                      pop    %rcx
>   4011cf:     c3                      retq
>
> 00000000004011d0 <__libc_csu_init>:
>   4011d0:     f3 0f 1e fa             endbr64
>   4011d4:     41 57                   push   %r15
>   4011d6:     4c 8d 3d 33 2c 00 00    lea    0x2c33(%rip),%r15        # 
> 403e10 <__frame_dummy_init_array_entry>
>   4011dd:     41 56                   push   %r14
>   4011df:     49 89 d6                mov    %rdx,%r14
>   4011e2:     41 55                   push   %r13
>   4011e4:     49 89 f5                mov    %rsi,%r13
>   4011e7:     41 54                   push   %r12
>   4011e9:     41 89 fc                mov    %edi,%r12d
>   4011ec:     55                      push   %rbp
>   4011ed:     48 8d 2d 24 2c 00 00    lea    0x2c24(%rip),%rbp        # 
> 403e18 <__do_global_dtors_aux_fini_array_entry>
>   4011f4:     53                      push   %rbx
>   4011f5:     4c 29 fd                sub    %r15,%rbp
>   4011f8:     48 83 ec 08             sub    $0x8,%rsp
>   4011fc:     e8 ff fd ff ff          callq  401000 <_init>
>   401201:     48 c1 fd 03             sar    $0x3,%rbp
>   401205:     74 1f                   je     401226 <__libc_csu_init+0x56>
>   401207:     31 db                   xor    %ebx,%ebx
>   401209:     0f 1f 80 00 00 00 00    nopl   0x0(%rax)
>   401210:     4c 89 f2                mov    %r14,%rdx
>   401213:     4c 89 ee                mov    %r13,%rsi
>   401216:     44 89 e7                mov    %r12d,%edi
>   401219:     41 ff 14 df             callq  *(%r15,%rbx,8)
>   40121d:     48 83 c3 01             add    $0x1,%rbx
>   401221:     48 39 dd                cmp    %rbx,%rbp
>   401224:     75 ea                   jne    401210 <__libc_csu_init+0x40>
>   401226:     48 83 c4 08             add    $0x8,%rsp
>   40122a:     5b                      pop    %rbx
>   40122b:     5d                      pop    %rbp
>   40122c:     41 5c                   pop    %r12
>   40122e:     41 5d                   pop    %r13
>   401230:     41 5e                   pop    %r14
>   401232:     41 5f                   pop    %r15
>   401234:     c3                      retq
>   401235:     66 66 2e 0f 1f 84 00    data16 nopw %cs:0x0(%rax,%rax,1)
>   40123c:     00 00 00 00
>
> 0000000000401240 <__libc_csu_fini>:
>   401240:     f3 0f 1e fa             endbr64
>   401244:     c3                      retq
196,200c195,199
< 0000000000401228 <_fini>:
<   401228:     f3 0f 1e fa             endbr64
<   40122c:     48 83 ec 08             sub    $0x8,%rsp
<   401230:     48 83 c4 08             add    $0x8,%rsp
<   401234:     c3                      retq
---
> 0000000000401248 <_fini>:
>   401248:     f3 0f 1e fa             endbr64
>   40124c:     48 83 ec 08             sub    $0x8,%rsp
>   401250:     48 83 c4 08             add    $0x8,%rsp
>   401254:     c3                      retq

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to