[PATCH] D54071: [Bug 39548][Clang] PGO bootstrap fails with python3: errors in perf-helper.py

Romain Geissler via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sat Nov 3 06:25:52 PDT 2018


Romain-Geissler-1A created this revision.
Romain-Geissler-1A added reviewers: rsmith, vsk, beanz.
Herald added a subscriber: cfe-commits.
Romain-Geissler-1A edited the summary of this revision.

Hi,

Current clang fail to bootstrap in PGO mode when only python3 is available, because perf-helper.py is not compatible with python 3. We can see two errors:

    File "/workdir/src/llvm-7.0.0.src/tools/clang/utils/perf-training/perf-helper.py", line 299
      by_count.sort(key = lambda (_,n): -n)
                                 ^
  SyntaxError: invalid syntax

which can be fixed by removing the parameter parenthesis.

And

  $ "/usr/bin/python3.6" "/workdir/src/llvm-7.0.0.src/tools/clang/utils/perf-training/perf-helper.py" "cc1" "/workdir/build/final-system/llvm-build/tools/clang/stage2-instrumented-bins/bin/clang" "-Wall" "-pedantic" "-c" "/home/jenkins/workspace/OTF_Toolchain_release_2.0-HLXHYRKCVDYQJLF23VGZ3MVAU6VGURX537LUE3KFVM2SSPMZ6IOA/output/src/llvm-7.0.0.src/tools/clang/utils/perf-training/cxx/hello_world.cpp"
  # command stderr:
  Traceback (most recent call last):
    File "/workdir/src/llvm-7.0.0.src/tools/clang/utils/perf-training/perf-helper.py", line 408, in <module>
      main()
    File "/workdir/src/llvm-7.0.0.src/tools/clang/utils/perf-training/perf-helper.py", line 405, in main
      sys.exit(f(sys.argv[2:]))
    File "/workdir/src/llvm-7.0.0.src/tools/clang/utils/perf-training/perf-helper.py", line 159, in cc1
      cc1_cmd = get_cc1_command_for_args(cmd, cc1_env)
    File "/workdir/src/llvm-7.0.0.src/tools/clang/utils/perf-training/perf-helper.py", line 119, in get_cc1_command_for_args
      for ln in cc_output.split('\n'):
  TypeError: a bytes-like object is required, not 'str'
  
  error: command failed with exit status: 1

which can be made both 2 and 3 compatible by using the attribute universal_newlines=True

Cheers,
Romain


Repository:
  rC Clang

https://reviews.llvm.org/D54071

Files:
  utils/perf-training/perf-helper.py


Index: utils/perf-training/perf-helper.py
===================================================================
--- utils/perf-training/perf-helper.py
+++ utils/perf-training/perf-helper.py
@@ -114,7 +114,7 @@
   # Find the cc1 command used by the compiler. To do this we execute the
   # compiler with '-###' to figure out what it wants to do.
   cmd = cmd + ['-###']
-  cc_output = subprocess.check_output(cmd, stderr=subprocess.STDOUT, env=env).strip()
+  cc_output = subprocess.check_output(cmd, stderr=subprocess.STDOUT, env=env, universal_newlines=True).strip()
   cc_commands = []
   for ln in cc_output.split('\n'):
       # Filter out known garbage.
@@ -296,7 +296,7 @@
       counts[a] = counts.get(a,0) + 1
 
   by_count = counts.items()
-  by_count.sort(key = lambda (_,n): -n)
+  by_count.sort(key = lambda _,n: -n)
   return [s for s,n in by_count]
  
 def form_by_random(symbol_lists):
@@ -340,7 +340,7 @@
   # If the user gave us a binary, get all the symbols in the binary by
   # snarfing 'nm' output.
   if opts.binary_path is not None:
-     output = subprocess.check_output(['nm', '-P', opts.binary_path])
+     output = subprocess.check_output(['nm', '-P', opts.binary_path], universal_newlines=True)
      lines = output.split("\n")
      all_symbols = [ln.split(' ',1)[0]
                     for ln in lines


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D54071.172491.patch
Type: text/x-patch
Size: 1331 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20181103/91357100/attachment.bin>


More information about the cfe-commits mailing list