[llvm] [TOOLS][opt-viewer] fixed error for demangler_lock and string formatting (PR #102298)

Vyom Sharma via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 7 03:16:02 PDT 2024


https://github.com/vyom1611 created https://github.com/llvm/llvm-project/pull/102298

Using the old opt_viewer script gives an error:

```clang++ -O2 -fsave-optimization-record -c main.cpp -o lemmet
(base) vyomsharma at Vyoms-MacBook-Air CMAKE LLVM  % /users/vyomsharma/llvm-project/llvm/tools/opt-viewer/opt-viewer.py -source-dir=. lemmet.opt.yaml
Reading YAML files...
Rendering index page...
Rendering HTML files...
        27 of 27multiprocessing.pool.RemoteTraceback: 
"""
Traceback (most recent call last):
  File "/opt/homebrew/Caskroom/miniforge/base/lib/python3.10/multiprocessing/pool.py", line 125, in worker
    result = (True, func(*args, **kwds))
  File "/opt/homebrew/Caskroom/miniforge/base/lib/python3.10/multiprocessing/pool.py", line 48, in mapstar
    return list(map(*args))
  File "/Users/vyomsharma/llvm-project/llvm/tools/opt-viewer/optpmap.py", line 25, in _wrapped_func
    return func(argument, filter_)
  File "/users/vyomsharma/llvm-project/llvm/tools/opt-viewer/opt-viewer.py", line 293, in _render_file
    SourceFileRenderer(source_dir, output_dir, filename, no_highlight).render(remarks)
  File "/users/vyomsharma/llvm-project/llvm/tools/opt-viewer/opt-viewer.py", line 216, in render
    self.render_source_lines(self.source_stream, line_remarks)
  File "/users/vyomsharma/llvm-project/llvm/tools/opt-viewer/opt-viewer.py", line 123, in render_source_lines
    self.render_inline_remarks(remark, html_line)
  File "/users/vyomsharma/llvm-project/llvm/tools/opt-viewer/opt-viewer.py", line 126, in render_inline_remarks
    inlining_context = r.DemangledFunctionName
  File "/Users/vyomsharma/llvm-project/llvm/tools/opt-viewer/optrecord.py", line 153, in DemangledFunctionName
    return self.demangle(self.Function)
  File "/Users/vyomsharma/llvm-project/llvm/tools/opt-viewer/optrecord.py", line 77, in demangle
    with cls.demangler_lock:
AttributeError: type object 'Missed' has no attribute 'demangler_lock'
"""

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/users/vyomsharma/llvm-project/llvm/tools/opt-viewer/opt-viewer.py", line 471, in <module>
    main()
  File "/users/vyomsharma/llvm-project/llvm/tools/opt-viewer/opt-viewer.py", line 457, in main
    generate_report(
  File "/users/vyomsharma/llvm-project/llvm/tools/opt-viewer/opt-viewer.py", line 376, in generate_report
    optpmap.pmap(
  File "/Users/vyomsharma/llvm-project/llvm/tools/opt-viewer/optpmap.py", line 57, in pmap
    result = pool.map(_wrapped_func, func_and_args, *args, **kwargs)
  File "/opt/homebrew/Caskroom/miniforge/base/lib/python3.10/multiprocessing/pool.py", line 367, in map
    return self._map_async(func, iterable, mapstar, chunksize).get()
  File "/opt/homebrew/Caskroom/miniforge/base/lib/python3.10/multiprocessing/pool.py", line 774, in get
    raise self._value
AttributeError: type object 'Missed' has no attribute 'demangler_lock'
```

So I updated these 2 files which works perfectly fine now.


>From 1014b9398d72634d2c7c8f891c2134f4ab21192b Mon Sep 17 00:00:00 2001
From: vyom1611 <sharm843 at umn.edu>
Date: Wed, 7 Aug 2024 15:44:13 +0530
Subject: [PATCH] [TOOLS][opt-viewer] fixed error for demangler_lock and string
 formatting

---
 llvm/tools/opt-viewer/opt-viewer.py | 2 +-
 llvm/tools/opt-viewer/optrecord.py  | 4 +++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/llvm/tools/opt-viewer/opt-viewer.py b/llvm/tools/opt-viewer/opt-viewer.py
index c9c7db726f7652..2d32d66bbe3aee 100755
--- a/llvm/tools/opt-viewer/opt-viewer.py
+++ b/llvm/tools/opt-viewer/opt-viewer.py
@@ -135,7 +135,7 @@ def render_inline_remarks(self, r, line):
         # Column is the number of characters *including* tabs, keep those and
         # replace everything else with spaces.
         indent = line[: max(r.Column, 1) - 1]
-        indent = re.sub("\S", " ", indent)
+        indent = re.sub(r"\S", " ", indent)
 
         # Create expanded message and link if we have a multiline message.
         lines = r.message.split("\n")
diff --git a/llvm/tools/opt-viewer/optrecord.py b/llvm/tools/opt-viewer/optrecord.py
index 9e2fc7cb553b58..9b20562e803cb0 100644
--- a/llvm/tools/opt-viewer/optrecord.py
+++ b/llvm/tools/opt-viewer/optrecord.py
@@ -74,6 +74,8 @@ def set_demangler(cls, demangler):
 
     @classmethod
     def demangle(cls, name):
+        if cls.demangler_proc is None:
+            return name  # Return the original name if demangler is not available
         with cls.demangler_lock:
             cls.demangler_proc.stdin.write((name + "\n").encode("utf-8"))
             cls.demangler_proc.stdin.flush()
@@ -299,7 +301,7 @@ def get_remarks(input_file, filter_=None):
             filter_e = re.compile(filter_)
         for remark in docs:
             remark.canonicalize()
-            # Avoid remarks withoug debug location or if they are duplicated
+            # Avoid remarks without debug location or if they are duplicated
             if not hasattr(remark, "DebugLoc") or remark.key in all_remarks:
                 continue
 



More information about the llvm-commits mailing list