[PATCH] D135488: [codegen] Display stack layouts in console

Paul Kirth via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 15 19:00:30 PST 2022


paulkirth added a comment.

As a quick test, I hacked the printer pass to generate an output string, and passed that into the remarks emitter. From opt or llc things look as expected. There's some additional output, but its limited.

I see a more serious issue when using it from Clang, as the output is truncated , as in it only printed up to the first stack slot in my test. Its also all bold, which isn't great. I have a feeling that my shortcut is the root cause of the truncation, but I haven't tracked down the issue exactly.

Do any other remarks output complex data like this? From what I can see they tend to be fairly short…

I also thought about printing each line as a remark, but that seems to get noisy pretty fast, since each line would have the `remark <file location>` tag plus an `[-Rpass-analysis=stackframe-printer]` at the end.

Example truncated output (each function should have several lines w/ offset from SP, alignment, and size):

  $ clang -O1 -Rpass-analysis=stackframe-printer llvm/test/CodeGen/X86/stack-frame-printer.ll -c -o /dev/null -mllvm -print-stack-frame                        
  
  remark: <unknown>:0:0: 
  # Stack Layout: stackSizeWarning
   [-Rpass-analysis=stackframe-printer]
  remark: <unknown>:0:0: 
  # Stack Layout: cleanup_array
  Offset            Align     Size      
  [SP-8]      Spill 16        8         
  
   [-Rpass-analysis=stackframe-printer]
  remark: <unknown>:0:0: 
  # Stack Layout: cleanup_result
  Offset            Align     Size      
  [SP-8]      Spill 16        8         
  
   [-Rpass-analysis=stackframe-printer]
  remark: <unknown>:0:0: 
  # Stack Layout: do_work
  Offset            Align     Size      
  [SP-8]      Spill 16        8         
  
   [-Rpass-analysis=stackframe-printer]
  remark: <unknown>:0:0: 
  # Stack Layout: gen_array
  Offset            Align     Size      
  [SP-8]      Spill 16        8         
  
   [-Rpass-analysis=stackframe-printer]
  remark: <unknown>:0:0: 
  # Stack Layout: caller
  Offset            Align     Size      
  [SP-8]      Spill 16        8         
  
   [-Rpass-analysis=stackframe-printer]

Output from llc (which looks more or less as expected):

  $ llc -mcpu=corei7 -O1 -print-stack-frame -pass-remarks-analysis=stackframe-printer < llvm/test/CodeGen/X86/stack-frame-printer.ll 2>&1 >/dev/null
  
  remark: <unknown>:0:0: 
  # Stack Layout: stackSizeWarning
  Offset            Align     Size      
  [SP-88]           16        80        
      buffer @ frame-diags.c:30
  [SP-168]          16        80        
      buffer2 @ frame-diags.c:33
  
  
  remark: <unknown>:0:0: 
  # Stack Layout: cleanup_array
  Offset            Align     Size      
  [SP-8]      Spill 16        8         
  [SP-16]           8         8         
      a @ dot.c:13
  
  
  remark: <unknown>:0:0: 
  # Stack Layout: cleanup_result
  Offset            Align     Size      
  [SP-8]      Spill 16        8         
  [SP-16]           8         8         
      res @ dot.c:21
  
  
  remark: <unknown>:0:0: 
  # Stack Layout: do_work
  Offset            Align     Size      
  [SP-8]      Spill 16        8         
  [SP-12]           4         4         
      i @ dot.c:55
  [SP-24]           8         8         
      AB @ dot.c:38
  [SP-28]           4         4         
      len @ dot.c:37
  [SP-32]           4         4         
  [SP-40]           8         8         
      out @ dot.c:32
  [SP-48]           8         8         
      B @ dot.c:32
  [SP-56]           8         8         
      A @ dot.c:32
  [SP-60]           4         4         
      sum @ dot.c:54
  
  
  remark: <unknown>:0:0: 
  # Stack Layout: gen_array
  Offset            Align     Size      
  [SP-8]      Spill 16        8         
  [SP-12]           4         4         
      i @ dot.c:69
  [SP-16]           4         4         
      size @ dot.c:62
  [SP-24]           8         8         
      res @ dot.c:65
  [SP-32]           8         8         
  
  
  remark: <unknown>:0:0: 
  # Stack Layout: caller
  Offset            Align     Size      
  [SP-8]      Spill 16        8         
  [SP-12]           4         4         
      ret @ dot.c:81
  [SP-16]           4         4         
  [SP-24]           8         8         
      res @ dot.c:80
  [SP-32]           8         8         
      B @ dot.c:79
  [SP-40]           8         8         
      A @ dot.c:78
  [SP-44]           4         4         
      err @ dot.c:83
  [SP-48]           4         4         
      size @ dot.c:77

Are there any thoughts about how to make this work more nicely w/ optimization remarks from Clang?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135488/new/

https://reviews.llvm.org/D135488



More information about the llvm-commits mailing list