[llvm] c2e6bcb - [llvm-objdump] Prevent variable locations to overlap short comments

Igor Kudrin via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 28 00:27:17 PDT 2021


Author: Igor Kudrin
Date: 2021-06-28T14:25:21+07:00
New Revision: c2e6bcb494c12b138283272e2e0932e13627898e

URL: https://github.com/llvm/llvm-project/commit/c2e6bcb494c12b138283272e2e0932e13627898e
DIFF: https://github.com/llvm/llvm-project/commit/c2e6bcb494c12b138283272e2e0932e13627898e.diff

LOG: [llvm-objdump] Prevent variable locations to overlap short comments

For now, the source variable locations are printed at about the same
space as the comments for disassembled code, which can make some ranges
for variables disappear if a line contains comments, for example:

                                        ┠─ bar = W1
0:  add x0, x2, #2, lsl #12     // =8192┃
4:  add z31.d, z31.d, #65280    // =0xff00
8:  nop                                 ┻

The patch shifts the report a bit to allow printing comments up to
approximately 16 characters without interferences.

Differential Revision: https://reviews.llvm.org/D104700

Added: 
    

Modified: 
    llvm/docs/CommandGuide/llvm-objdump.rst
    llvm/test/tools/llvm-objdump/ELF/AArch64/disassemble-print-comments.s
    llvm/test/tools/llvm-objdump/ELF/ARM/debug-vars-dwarf4.s
    llvm/test/tools/llvm-objdump/ELF/ARM/debug-vars-wide-chars.s
    llvm/test/tools/llvm-objdump/X86/disassemble-print-comments.s
    llvm/tools/llvm-objdump/llvm-objdump.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/docs/CommandGuide/llvm-objdump.rst b/llvm/docs/CommandGuide/llvm-objdump.rst
index 860d84303c9db..28ac7e4abbc42 100644
--- a/llvm/docs/CommandGuide/llvm-objdump.rst
+++ b/llvm/docs/CommandGuide/llvm-objdump.rst
@@ -132,7 +132,7 @@ OPTIONS
 .. option:: --debug-vars-indent=<width>
 
   Distance to indent the source-level variable display, relative to the start
-  of the disassembly. Defaults to 40 characters.
+  of the disassembly. Defaults to 52 characters.
 
 .. option:: -j, --section=<section1[,section2,...]>
 

diff  --git a/llvm/test/tools/llvm-objdump/ELF/AArch64/disassemble-print-comments.s b/llvm/test/tools/llvm-objdump/ELF/AArch64/disassemble-print-comments.s
index 81bafe58816c8..b417486a3c66a 100644
--- a/llvm/test/tools/llvm-objdump/ELF/AArch64/disassemble-print-comments.s
+++ b/llvm/test/tools/llvm-objdump/ELF/AArch64/disassemble-print-comments.s
@@ -7,7 +7,63 @@
 # CHECK-NEXT:        0:   add x0, x2, #2, lsl #12    // =8192
 # CHECK-NEXT:        4:   add z31.d, z31.d, #65280   // =0xff00
 
+## Check that comments and locations of variables can be printed together.
+# RUN: llvm-objdump -d --mattr=+sve --debug-vars --no-show-raw-insn %t | \
+# RUN:   FileCheck %s --check-prefix=DBGVARS
+
+# DBGVARS:      0000000000000000 <foo>:
+# DBGVARS-NEXT:                                                     ┠─ bar = W1
+# DBGVARS-NEXT:        0:   add x0, x2, #2, lsl #12    // =8192     ┃
+# DBGVARS-NEXT:        4:   add z31.d, z31.d, #65280   // =0xff00   ┻
+
     .text
 foo:
     add x0, x2, 8192
     add z31.d, z31.d, #65280
+.LFooEnd:
+
+    .section .debug_abbrev,"", at progbits
+    .uleb128 1                      // Abbreviation Code
+    .uleb128 0x11                   // DW_TAG_compile_unit
+    .byte 1                         // DW_CHILDREN_yes
+    .byte 0                         // EOM(1)
+    .byte 0                         // EOM(2)
+    .uleb128 2                      // Abbreviation Code
+    .uleb128 0x2e                   // DW_TAG_subprogram
+    .byte 1                         // DW_CHILDREN_yes
+    .uleb128 0x11                   // DW_AT_low_pc
+    .uleb128 0x01                   // DW_FORM_addr
+    .uleb128 0x12                   // DW_AT_high_pc
+    .uleb128 0x06                   // DW_FORM_data4
+    .byte 0                         // EOM(1)
+    .byte 0                         // EOM(2)
+    .uleb128 3                      // Abbreviation Code
+    .uleb128 0x34                   // DW_TAG_variable
+    .byte 0                         // DW_CHILDREN_no
+    .uleb128 0x02                   // DW_AT_location
+    .uleb128 0x18                   // DW_FORM_exprloc
+    .uleb128 0x03                   // DW_AT_name
+    .uleb128 0x08                   // DW_FORM_string
+    .byte 0                         // EOM(1)
+    .byte 0                         // EOM(2)
+    .byte 0                         // EOM(3)
+
+    .section .debug_info,"", at progbits
+    .long .LCuEnd-.LCuBegin         // Length of Unit
+.LCuBegin:
+    .short 4                        // DWARF version number
+    .long .debug_abbrev             // Offset Into Abbrev. Section
+    .byte 8                         // Address Size
+    .uleb128 1                      // Abbrev [1] DW_TAG_compile_unit
+    .uleb128 2                      // Abbrev [2] DW_TAG_subprogram
+    .quad foo                       // DW_AT_low_pc
+    .long .LFooEnd-foo              // DW_AT_high_pc
+    .uleb128 3                      // Abbrev [3] DW_TAG_variable
+    .byte .LLocEnd-.LLocBegin       // DW_AT_location
+.LLocBegin:
+    .byte 0x51                      // DW_OP_reg1
+.LLocEnd:
+    .asciz "bar"                    // DW_FORM_string
+    .byte 0                         // End Of Children Mark
+    .byte 0                         // End Of Children Mark
+.LCuEnd:

diff  --git a/llvm/test/tools/llvm-objdump/ELF/ARM/debug-vars-dwarf4.s b/llvm/test/tools/llvm-objdump/ELF/ARM/debug-vars-dwarf4.s
index bf0c7bd52feb4..43a30aeaca6fb 100644
--- a/llvm/test/tools/llvm-objdump/ELF/ARM/debug-vars-dwarf4.s
+++ b/llvm/test/tools/llvm-objdump/ELF/ARM/debug-vars-dwarf4.s
@@ -12,10 +12,10 @@
 # RUN:     llvm-objdump - -d --debug-vars | \
 # RUN:     FileCheck %s --check-prefix=RAW --strict-whitespace
 
-## Check that passing the default value for --debug-vars-indent (40) makes no
+## Check that passing the default value for --debug-vars-indent (52) makes no
 ## change to the output.
 # RUN: llvm-mc -triple armv8a--none-eabi < %s -filetype=obj | \
-# RUN:     llvm-objdump - -d --debug-vars --debug-vars-indent=40 | \
+# RUN:     llvm-objdump - -d --debug-vars --debug-vars-indent=52 | \
 # RUN:     FileCheck %s --check-prefix=RAW --strict-whitespace
 
 # RUN: llvm-mc -triple armv8a--none-eabi < %s -filetype=obj | \
@@ -50,19 +50,19 @@
 ## 8-byte tab stop, so these might not look aligned in a text editor.
 
 # RAW: 00000000 <foo>:
-# RAW-NEXT:                                                                 ┠─ a = R0 
-# RAW-NEXT:                                                                 ┃ ┠─ b = R1 
-# RAW-NEXT:                                                                 ┃ ┃ ┠─ c = R2 
-# RAW-NEXT:                                                                 ┃ ┃ ┃ ┌─ x = R0 
-# RAW-NEXT:        0: 00 00 81 e0  	add	r0, r1, r0                      ┻ ┃ ┃ ╈   
-# RAW-NEXT:                                                                 ┌─ y = R0 
-# RAW-NEXT:        4: 02 00 80 e0  	add	r0, r0, r2                      ╈ ┃ ┃ ┻   
-# RAW-NEXT:        8: 1e ff 2f e1  	bx	lr                              ┻ ┻ ┻     
+# RAW-NEXT:                                                                             ┠─ a = R0 
+# RAW-NEXT:                                                                             ┃ ┠─ b = R1 
+# RAW-NEXT:                                                                             ┃ ┃ ┠─ c = R2 
+# RAW-NEXT:                                                                             ┃ ┃ ┃ ┌─ x = R0 
+# RAW-NEXT:        0: 00 00 81 e0  	add	r0, r1, r0                                  ┻ ┃ ┃ ╈   
+# RAW-NEXT:                                                                             ┌─ y = R0 
+# RAW-NEXT:        4: 02 00 80 e0  	add	r0, r0, r2                                  ╈ ┃ ┃ ┻   
+# RAW-NEXT:        8: 1e ff 2f e1  	bx	lr                                          ┻ ┻ ┻     
 # RAW-EMPTY:
 # RAW-NEXT: 0000000c <bar>:
-# RAW-NEXT:                                                                 ┠─ a = R0 
-# RAW-NEXT:        c: 01 00 80 e2  	add	r0, r0, #1                      ┃         
-# RAW-NEXT:       10: 1e ff 2f e1  	bx	lr                              ┻         
+# RAW-NEXT:                                                                             ┠─ a = R0 
+# RAW-NEXT:        c: 01 00 80 e2  	add	r0, r0, #1                                  ┃         
+# RAW-NEXT:       10: 1e ff 2f e1  	bx	lr                                          ┻         
 
 
 # INDENT: 00000000 <foo>:
@@ -81,70 +81,70 @@
 # INDENT-NEXT:       10: 1e ff 2f e1  	bx	lr                    ┻         
 
 # NO-RAW: 00000000 <foo>:
-# NO-RAW-NEXT:                                                         ┠─ a = R0
-# NO-RAW-NEXT:                                                         ┃ ┠─ b = R1
-# NO-RAW-NEXT:                                                         ┃ ┃ ┠─ c = R2
-# NO-RAW-NEXT:                                                         ┃ ┃ ┃ ┌─ x = R0
-# NO-RAW-NEXT:        0:      	add	r0, r1, r0                      ┻ ┃ ┃ ╈
-# NO-RAW-NEXT:                                                         ┌─ y = R0
-# NO-RAW-NEXT:        4:      	add	r0, r0, r2                      ╈ ┃ ┃ ┻
-# NO-RAW-NEXT:        8:      	bx	lr                              ┻ ┻ ┻
+# NO-RAW-NEXT:                                                                     ┠─ a = R0
+# NO-RAW-NEXT:                                                                     ┃ ┠─ b = R1
+# NO-RAW-NEXT:                                                                     ┃ ┃ ┠─ c = R2
+# NO-RAW-NEXT:                                                                     ┃ ┃ ┃ ┌─ x = R0
+# NO-RAW-NEXT:        0:      	add	r0, r1, r0                                  ┻ ┃ ┃ ╈
+# NO-RAW-NEXT:                                                                     ┌─ y = R0
+# NO-RAW-NEXT:        4:      	add	r0, r0, r2                                  ╈ ┃ ┃ ┻
+# NO-RAW-NEXT:        8:      	bx	lr                                          ┻ ┻ ┻
 # NO-RAW-EMPTY:
 # NO-RAW-NEXT: 0000000c <bar>:
-# NO-RAW-NEXT:                                                         ┠─ a = R0
-# NO-RAW-NEXT:        c:      	add	r0, r0, #1                      ┃
-# NO-RAW-NEXT:       10:      	bx	lr                              ┻
+# NO-RAW-NEXT:                                                                     ┠─ a = R0
+# NO-RAW-NEXT:        c:      	add	r0, r0, #1                                  ┃
+# NO-RAW-NEXT:       10:      	bx	lr                                          ┻
 
 # LINE-NUMS: 00000000 <foo>:
 # LINE-NUMS-NEXT: ; foo():
-# LINE-NUMS-NEXT: ; SRC_COMPDIR{{[\\/]}}debug.c:2                                 ┠─ a = R0
-# LINE-NUMS-NEXT:                                                         ┃ ┠─ b = R1
-# LINE-NUMS-NEXT:                                                         ┃ ┃ ┠─ c = R2
-# LINE-NUMS-NEXT:                                                         ┃ ┃ ┃ ┌─ x = R0
-# LINE-NUMS-NEXT:        0:      	add	r0, r1, r0                      ┻ ┃ ┃ ╈
-# LINE-NUMS-NEXT: ; SRC_COMPDIR{{[\\/]}}debug.c:3                                 ┌─ y = R0
-# LINE-NUMS-NEXT:        4:      	add	r0, r0, r2                      ╈ ┃ ┃ ┻
-# LINE-NUMS-NEXT: ; SRC_COMPDIR{{[\\/]}}debug.c:4                                 ┃ ┃ ┃
-# LINE-NUMS-NEXT:        8:      	bx	lr                              ┻ ┻ ┻
+# LINE-NUMS-NEXT: ; SRC_COMPDIR{{[\\/]}}debug.c:2                                             ┠─ a = R0
+# LINE-NUMS-NEXT:                                                                     ┃ ┠─ b = R1
+# LINE-NUMS-NEXT:                                                                     ┃ ┃ ┠─ c = R2
+# LINE-NUMS-NEXT:                                                                     ┃ ┃ ┃ ┌─ x = R0
+# LINE-NUMS-NEXT:        0:      	add	r0, r1, r0                                  ┻ ┃ ┃ ╈
+# LINE-NUMS-NEXT: ; SRC_COMPDIR{{[\\/]}}debug.c:3                                             ┌─ y = R0
+# LINE-NUMS-NEXT:        4:      	add	r0, r0, r2                                  ╈ ┃ ┃ ┻
+# LINE-NUMS-NEXT: ; SRC_COMPDIR{{[\\/]}}debug.c:4                                             ┃ ┃ ┃
+# LINE-NUMS-NEXT:        8:      	bx	lr                                          ┻ ┻ ┻
 # LINE-NUMS-EMPTY:
 # LINE-NUMS-NEXT: 0000000c <bar>:
 # LINE-NUMS-NEXT: ; bar():
-# LINE-NUMS-NEXT: ; SRC_COMPDIR{{[\\/]}}debug.c:8                                 ┠─ a = R0
-# LINE-NUMS-NEXT:        c:      	add	r0, r0, #1                      ┃
-# LINE-NUMS-NEXT: ; SRC_COMPDIR{{[\\/]}}debug.c:9                                 ┃
-# LINE-NUMS-NEXT:       10:      	bx	lr                              ┻
+# LINE-NUMS-NEXT: ; SRC_COMPDIR{{[\\/]}}debug.c:8                                             ┠─ a = R0
+# LINE-NUMS-NEXT:        c:      	add	r0, r0, #1                                  ┃
+# LINE-NUMS-NEXT: ; SRC_COMPDIR{{[\\/]}}debug.c:9                                             ┃
+# LINE-NUMS-NEXT:       10:      	bx	lr                                          ┻
 
 # SOURCE: 00000000 <foo>:
-# SOURCE-NEXT: ;   int x = a + b;                                      ┠─ a = R0
-# SOURCE-NEXT:                                                         ┃ ┠─ b = R1
-# SOURCE-NEXT:                                                         ┃ ┃ ┠─ c = R2
-# SOURCE-NEXT:                                                         ┃ ┃ ┃ ┌─ x = R0
-# SOURCE-NEXT:        0:      	add	r0, r1, r0                      ┻ ┃ ┃ ╈
-# SOURCE-NEXT: ;   int y = x + c;                                      ┌─ y = R0
-# SOURCE-NEXT:        4:      	add	r0, r0, r2                      ╈ ┃ ┃ ┻
-# SOURCE-NEXT: ;   return y;                                           ┃ ┃ ┃
-# SOURCE-NEXT:        8:      	bx	lr                              ┻ ┻ ┻
+# SOURCE-NEXT: ;   int x = a + b;                                                  ┠─ a = R0
+# SOURCE-NEXT:                                                                     ┃ ┠─ b = R1
+# SOURCE-NEXT:                                                                     ┃ ┃ ┠─ c = R2
+# SOURCE-NEXT:                                                                     ┃ ┃ ┃ ┌─ x = R0
+# SOURCE-NEXT:        0:      	add	r0, r1, r0                                  ┻ ┃ ┃ ╈
+# SOURCE-NEXT: ;   int y = x + c;                                                  ┌─ y = R0
+# SOURCE-NEXT:        4:      	add	r0, r0, r2                                  ╈ ┃ ┃ ┻
+# SOURCE-NEXT: ;   return y;                                                       ┃ ┃ ┃
+# SOURCE-NEXT:        8:      	bx	lr                                          ┻ ┻ ┻
 # SOURCE-EMPTY:
 # SOURCE-NEXT: 0000000c <bar>:
-# SOURCE-NEXT: ;   a++;                                                ┠─ a = R0
-# SOURCE-NEXT:        c:      	add	r0, r0, #1                      ┃
-# SOURCE-NEXT: ;   return a;                                           ┃
-# SOURCE-NEXT:       10:      	bx	lr                              ┻
+# SOURCE-NEXT: ;   a++;                                                            ┠─ a = R0
+# SOURCE-NEXT:        c:      	add	r0, r0, #1                                  ┃
+# SOURCE-NEXT: ;   return a;                                                       ┃
+# SOURCE-NEXT:       10:      	bx	lr                                          ┻
 
 # ASCII: 00000000 <foo>:
-# ASCII-NEXT:                                                                 |- a = R0 
-# ASCII-NEXT:                                                                 | |- b = R1 
-# ASCII-NEXT:                                                                 | | |- c = R2 
-# ASCII-NEXT:                                                                 | | | /- x = R0 
-# ASCII-NEXT:        0: 00 00 81 e0  	add	r0, r1, r0                      v | | ^   
-# ASCII-NEXT:                                                                 /- y = R0 
-# ASCII-NEXT:        4: 02 00 80 e0  	add	r0, r0, r2                      ^ | | v   
-# ASCII-NEXT:        8: 1e ff 2f e1  	bx	lr                              v v v     
+# ASCII-NEXT:                                                                             |- a = R0 
+# ASCII-NEXT:                                                                             | |- b = R1 
+# ASCII-NEXT:                                                                             | | |- c = R2 
+# ASCII-NEXT:                                                                             | | | /- x = R0 
+# ASCII-NEXT:        0: 00 00 81 e0  	add	r0, r1, r0                                  v | | ^   
+# ASCII-NEXT:                                                                             /- y = R0 
+# ASCII-NEXT:        4: 02 00 80 e0  	add	r0, r0, r2                                  ^ | | v   
+# ASCII-NEXT:        8: 1e ff 2f e1  	bx	lr                                          v v v     
 # ASCII-EMPTY:
 # ASCII-NEXT: 0000000c <bar>:
-# ASCII-NEXT:                                                                 |- a = R0 
-# ASCII-NEXT:        c: 01 00 80 e2  	add	r0, r0, #1                      |         
-# ASCII-NEXT:       10: 1e ff 2f e1  	bx	lr                              v         
+# ASCII-NEXT:                                                                             |- a = R0 
+# ASCII-NEXT:        c: 01 00 80 e2  	add	r0, r0, #1                                  |         
+# ASCII-NEXT:       10: 1e ff 2f e1  	bx	lr                                          v         
 
 	.text
 	.syntax unified

diff  --git a/llvm/test/tools/llvm-objdump/ELF/ARM/debug-vars-wide-chars.s b/llvm/test/tools/llvm-objdump/ELF/ARM/debug-vars-wide-chars.s
index 2573dc63513e2..2cee8593da96d 100644
--- a/llvm/test/tools/llvm-objdump/ELF/ARM/debug-vars-wide-chars.s
+++ b/llvm/test/tools/llvm-objdump/ELF/ARM/debug-vars-wide-chars.s
@@ -13,9 +13,9 @@
 ## characters.
 
 # CHECK: 00000000 <foo>:
-# CHECK-NEXT: ;   return *喵;                                                 ┠─ 喵 = R0
-# CHECK-NEXT:        0: 00 00 90 e5  	ldr	r0, [r0]                        ┻   
-# CHECK-NEXT:        4: 1e ff 2f e1  	bx	lr                                  
+# CHECK-NEXT: ;   return *喵;                                                             ┠─ 喵 = R0
+# CHECK-NEXT:        0: 00 00 90 e5  	ldr	r0, [r0]                                    ┻   
+# CHECK-NEXT:        4: 1e ff 2f e1  	bx	lr                                              
 
 	.text
 	.syntax unified

diff  --git a/llvm/test/tools/llvm-objdump/X86/disassemble-print-comments.s b/llvm/test/tools/llvm-objdump/X86/disassemble-print-comments.s
index 7e5c29efaf704..8b4a4ca9ef5b9 100644
--- a/llvm/test/tools/llvm-objdump/X86/disassemble-print-comments.s
+++ b/llvm/test/tools/llvm-objdump/X86/disassemble-print-comments.s
@@ -7,7 +7,63 @@
 # CHECK-NEXT:        0:   nop
 # CHECK-NEXT:        1:   cmpl $305419896, %eax   # imm = 0x12345678
 
+## Check that comments and locations of variables can be printed together.
+# RUN: llvm-objdump -d --debug-vars --no-show-raw-insn %t | \
+# RUN:   FileCheck %s --check-prefix=DBGVARS
+
+# DBGVARS:      0000000000000000 <foo>:
+# DBGVARS-NEXT:                                                         ┠─ bar = RDX
+# DBGVARS-NEXT:        0:   nop                                         ┃
+# DBGVARS-NEXT:        1:   cmpl $305419896, %eax   # imm = 0x12345678  ┻
+
     .text
 foo:
     nop
     cmpl $0x12345678, %eax
+.LFooEnd:
+
+    .section .debug_abbrev,"", at progbits
+    .uleb128 1                      # Abbreviation Code
+    .uleb128 0x11                   # DW_TAG_compile_unit
+    .byte 1                         # DW_CHILDREN_yes
+    .byte 0                         # EOM(1)
+    .byte 0                         # EOM(2)
+    .uleb128 2                      # Abbreviation Code
+    .uleb128 0x2e                   # DW_TAG_subprogram
+    .byte 1                         # DW_CHILDREN_yes
+    .uleb128 0x11                   # DW_AT_low_pc
+    .uleb128 0x01                   # DW_FORM_addr
+    .uleb128 0x12                   # DW_AT_high_pc
+    .uleb128 0x06                   # DW_FORM_data4
+    .byte 0                         # EOM(1)
+    .byte 0                         # EOM(2)
+    .uleb128 3                      # Abbreviation Code
+    .uleb128 0x34                   # DW_TAG_variable
+    .byte 0                         # DW_CHILDREN_no
+    .uleb128 0x02                   # DW_AT_location
+    .uleb128 0x18                   # DW_FORM_exprloc
+    .uleb128 0x03                   # DW_AT_name
+    .uleb128 0x08                   # DW_FORM_string
+    .byte 0                         # EOM(1)
+    .byte 0                         # EOM(2)
+    .byte 0                         # EOM(3)
+
+    .section .debug_info,"", at progbits
+    .long .LCuEnd-.LCuBegin         # Length of Unit
+.LCuBegin:
+    .short 4                        # DWARF version number
+    .long .debug_abbrev             # Offset Into Abbrev. Section
+    .byte 8                         # Address Size
+    .uleb128 1                      # Abbrev [1] DW_TAG_compile_unit
+    .uleb128 2                      # Abbrev [2] DW_TAG_subprogram
+    .quad foo                       # DW_AT_low_pc
+    .long .LFooEnd-foo              # DW_AT_high_pc
+    .uleb128 3                      # Abbrev [3] DW_TAG_variable
+    .byte .LLocEnd-.LLocBegin       # DW_AT_location
+.LLocBegin:
+    .byte 0x51                      # DW_OP_reg1
+.LLocEnd:
+    .asciz "bar"                    # DW_FORM_string
+    .byte 0                         # End Of Children Mark
+    .byte 0                         # End Of Children Mark
+.LCuEnd:

diff  --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index 13e5f68c6d833..0fd388da37713 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -221,7 +221,7 @@ uint32_t objdump::PrefixStrip;
 
 DebugVarsFormat objdump::DbgVariables = DVDisabled;
 
-int objdump::DbgIndent = 40;
+int objdump::DbgIndent = 52;
 
 static StringSet<> DisasmSymbolSet;
 StringSet<> objdump::FoundSectionSet;


        


More information about the llvm-commits mailing list