LLVM Bugzilla is read-only and represents the historical archive of all LLVM issues filled before November 26, 2021. Use github to submit LLVM bugs

Bug 52538 - Emitted binary code changes when -g is enabled at -O1 -m64
Summary: Emitted binary code changes when -g is enabled at -O1 -m64
Status: NEW
Alias: None
Product: libraries
Classification: Unclassified
Component: Common Code Generator Code (show other bugs)
Version: trunk
Hardware: PC All
: P enhancement
Assignee: Unassigned LLVM Bugs
URL:
Keywords:
Depends on:
Blocks: 37728
  Show dependency tree
 
Reported: 2021-11-17 17:56 PST by Theodore Wang
Modified: 2021-11-17 17:56 PST (History)
2 users (show)

See Also:
Fixed By Commit(s):


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Theodore Wang 2021-11-17 17:56:21 PST
The .text section for the following program (transformed_program0_preprocessed.c 
) changes after toggling the -g flag. I think the extra add instruction is the reason why there's a difference.

$ clang-trunk -v
clang version 14.0.0 (https://github.com/llvm/llvm-project.git 82fc4cc60bec6d0eacad7e8575f404dcdf5144c5)
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
$ cat transformed_program0_preprocessed.c
long d, e, h;
int a, g;
int *b;
char c;
long f[];
long(i)(j) { return d && j ? d : d + j; }
short l() {
  char *k = &c;
  a = 1;
  for (;; a++) {
    int m = -9L;
    e = 1;
    for (; e <= 7; e++)
      for (; g <= 7; g++) {
        h = f[g + a];
        if (h)
          return 3;
      }
    *k = i(m) < *b;
  }
}
//void main() {}
$ clang-trunk -w -c -m64 -O1 transformed_program0_preprocessed.c -o a.out
$ objdump --disassemble --section=.text a.out > no_g.txt
$ clang-trunk -w -c -m64 -O1 -g3 transformed_program0_preprocessed.c -o a.out
$ objdump --disassemble --section=.text a.out > g.txt
$ diff no_g.txt g.txt
28,90c28,87
<   37:	4c 8d 04 08          	lea    (%rax,%rcx,1),%r8
<   3b:	49 83 c0 f7          	add    $0xfffffffffffffff7,%r8
<   3f:	41 ba 01 00 00 00    	mov    $0x1,%r10d
<   45:	41 bb 00 00 00 00    	mov    $0x0,%r11d
<   4b:	4c 8b 0d 00 00 00 00 	mov    0x0(%rip),%r9        # 52 <l+0x32>
<   52:	66 2e 0f 1f 84 00 00 	nopw   %cs:0x0(%rax,%rax,1)
<   59:	00 00 00
<   5c:	0f 1f 40 00          	nopl   0x0(%rax)
<   60:	44 89 15 00 00 00 00 	mov    %r10d,0x0(%rip)        # 67 <l+0x47>
<   67:	41 b6 01             	mov    $0x1,%r14b
<   6a:	bf 01 00 00 00       	mov    $0x1,%edi
<   6f:	eb 24                	jmp    95 <l+0x75>
<   71:	66 2e 0f 1f 84 00 00 	nopw   %cs:0x0(%rax,%rax,1)
<   78:	00 00 00
<   7b:	0f 1f 44 00 00       	nopl   0x0(%rax,%rax,1)
<   80:	48 83 ff 07          	cmp    $0x7,%rdi
<   84:	48 8d 47 01          	lea    0x1(%rdi),%rax
<   88:	41 0f 92 c6          	setb   %r14b
<   8c:	48 89 c7             	mov    %rax,%rdi
<   8f:	48 83 f8 08          	cmp    $0x8,%rax
<   93:	74 7d                	je     112 <l+0xf2>
<   95:	48 63 05 00 00 00 00 	movslq 0x0(%rip),%rax        # 9c <l+0x7c>
<   9c:	48 83 f8 07          	cmp    $0x7,%rax
<   a0:	7f de                	jg     80 <l+0x60>
<   a2:	49 8d 34 c3          	lea    (%r11,%rax,8),%rsi
<   a6:	b9 08 00 00 00       	mov    $0x8,%ecx
<   ab:	48 29 c1             	sub    %rax,%rcx
<   ae:	8d 50 01             	lea    0x1(%rax),%edx
<   b1:	31 c0                	xor    %eax,%eax
<   b3:	66 2e 0f 1f 84 00 00 	nopw   %cs:0x0(%rax,%rax,1)
<   ba:	00 00 00
<   bd:	0f 1f 00             	nopl   (%rax)
<   c0:	48 8b 1c c6          	mov    (%rsi,%rax,8),%rbx
<   c4:	48 85 db             	test   %rbx,%rbx
<   c7:	75 27                	jne    f0 <l+0xd0>
<   c9:	8d 2c 02             	lea    (%rdx,%rax,1),%ebp
<   cc:	89 2d 00 00 00 00    	mov    %ebp,0x0(%rip)        # d2 <l+0xb2>
<   d2:	48 83 c0 01          	add    $0x1,%rax
<   d6:	48 39 c1             	cmp    %rax,%rcx
<   d9:	75 e5                	jne    c0 <l+0xa0>
<   db:	48 89 1d 00 00 00 00 	mov    %rbx,0x0(%rip)        # e2 <l+0xc2>
<   e2:	eb 9c                	jmp    80 <l+0x60>
<   e4:	66 2e 0f 1f 84 00 00 	nopw   %cs:0x0(%rax,%rax,1)
<   eb:	00 00 00
<   ee:	66 90                	xchg   %ax,%ax
<   f0:	48 89 3d 00 00 00 00 	mov    %rdi,0x0(%rip)        # f7 <l+0xd7>
<   f7:	48 89 1d 00 00 00 00 	mov    %rbx,0x0(%rip)        # fe <l+0xde>
<   fe:	49 83 c2 01          	add    $0x1,%r10
<  102:	49 83 c3 08          	add    $0x8,%r11
<  106:	41 f6 c6 01          	test   $0x1,%r14b
<  10a:	0f 84 50 ff ff ff    	je     60 <l+0x40>
<  110:	eb 1a                	jmp    12c <l+0x10c>
<  112:	48 c7 05 00 00 00 00 	movq   $0x8,0x0(%rip)        # 11d <l+0xfd>
<  119:	08 00 00 00
<  11d:	49 63 01             	movslq (%r9),%rax
<  120:	49 39 c0             	cmp    %rax,%r8
<  123:	0f 9c 05 00 00 00 00 	setl   0x0(%rip)        # 12a <l+0x10a>
<  12a:	eb d2                	jmp    fe <l+0xde>
<  12c:	66 b8 03 00          	mov    $0x3,%ax
<  130:	5b                   	pop    %rbx
<  131:	41 5e                	pop    %r14
<  133:	5d                   	pop    %rbp
<  134:	c3                   	retq
---
>   37:	4c 8d 44 08 f7       	lea    -0x9(%rax,%rcx,1),%r8
>   3c:	41 ba 01 00 00 00    	mov    $0x1,%r10d
>   42:	41 bb 00 00 00 00    	mov    $0x0,%r11d
>   48:	4c 8b 0d 00 00 00 00 	mov    0x0(%rip),%r9        # 4f <l+0x2f>
>   4f:	90                   	nop
>   50:	44 89 15 00 00 00 00 	mov    %r10d,0x0(%rip)        # 57 <l+0x37>
>   57:	41 b6 01             	mov    $0x1,%r14b
>   5a:	bf 01 00 00 00       	mov    $0x1,%edi
>   5f:	eb 24                	jmp    85 <l+0x65>
>   61:	66 2e 0f 1f 84 00 00 	nopw   %cs:0x0(%rax,%rax,1)
>   68:	00 00 00
>   6b:	0f 1f 44 00 00       	nopl   0x0(%rax,%rax,1)
>   70:	48 83 ff 07          	cmp    $0x7,%rdi
>   74:	48 8d 47 01          	lea    0x1(%rdi),%rax
>   78:	41 0f 92 c6          	setb   %r14b
>   7c:	48 89 c7             	mov    %rax,%rdi
>   7f:	48 83 f8 08          	cmp    $0x8,%rax
>   83:	74 7d                	je     102 <l+0xe2>
>   85:	48 63 05 00 00 00 00 	movslq 0x0(%rip),%rax        # 8c <l+0x6c>
>   8c:	48 83 f8 07          	cmp    $0x7,%rax
>   90:	7f de                	jg     70 <l+0x50>
>   92:	49 8d 34 c3          	lea    (%r11,%rax,8),%rsi
>   96:	b9 08 00 00 00       	mov    $0x8,%ecx
>   9b:	48 29 c1             	sub    %rax,%rcx
>   9e:	8d 50 01             	lea    0x1(%rax),%edx
>   a1:	31 c0                	xor    %eax,%eax
>   a3:	66 2e 0f 1f 84 00 00 	nopw   %cs:0x0(%rax,%rax,1)
>   aa:	00 00 00
>   ad:	0f 1f 00             	nopl   (%rax)
>   b0:	48 8b 1c c6          	mov    (%rsi,%rax,8),%rbx
>   b4:	48 85 db             	test   %rbx,%rbx
>   b7:	75 27                	jne    e0 <l+0xc0>
>   b9:	8d 2c 02             	lea    (%rdx,%rax,1),%ebp
>   bc:	89 2d 00 00 00 00    	mov    %ebp,0x0(%rip)        # c2 <l+0xa2>
>   c2:	48 83 c0 01          	add    $0x1,%rax
>   c6:	48 39 c1             	cmp    %rax,%rcx
>   c9:	75 e5                	jne    b0 <l+0x90>
>   cb:	48 89 1d 00 00 00 00 	mov    %rbx,0x0(%rip)        # d2 <l+0xb2>
>   d2:	eb 9c                	jmp    70 <l+0x50>
>   d4:	66 2e 0f 1f 84 00 00 	nopw   %cs:0x0(%rax,%rax,1)
>   db:	00 00 00
>   de:	66 90                	xchg   %ax,%ax
>   e0:	48 89 3d 00 00 00 00 	mov    %rdi,0x0(%rip)        # e7 <l+0xc7>
>   e7:	48 89 1d 00 00 00 00 	mov    %rbx,0x0(%rip)        # ee <l+0xce>
>   ee:	49 83 c2 01          	add    $0x1,%r10
>   f2:	49 83 c3 08          	add    $0x8,%r11
>   f6:	41 f6 c6 01          	test   $0x1,%r14b
>   fa:	0f 84 50 ff ff ff    	je     50 <l+0x30>
>  100:	eb 1a                	jmp    11c <l+0xfc>
>  102:	48 c7 05 00 00 00 00 	movq   $0x8,0x0(%rip)        # 10d <l+0xed>
>  109:	08 00 00 00
>  10d:	49 63 01             	movslq (%r9),%rax
>  110:	49 39 c0             	cmp    %rax,%r8
>  113:	0f 9c 05 00 00 00 00 	setl   0x0(%rip)        # 11a <l+0xfa>
>  11a:	eb d2                	jmp    ee <l+0xce>
>  11c:	66 b8 03 00          	mov    $0x3,%ax
>  120:	5b                   	pop    %rbx
>  121:	41 5e                	pop    %r14
>  123:	5d                   	pop    %rbp
>  124:	c3                   	retq
$