[PATCH] D68221: [LNT] Python 3 support: stable profile getFunctions output

Thomas Preud'homme via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 30 06:56:46 PDT 2019


thopre created this revision.
thopre added reviewers: cmatthews, hubert.reinterpretcast, kristof.beyls.
thopre added a parent revision: D68220: [LNT] Python 3 support: stable showtests output.
thopre added a child revision: D68222: [LNT] Python 3 support: fix text/binary confusion in profile support.

lnt profile getFunctions output depends on the iteration order of a
dictionary, which is an implementation detail up to Python 3.6
(included). The test tests/lnttool/Profile.py is thus unstable accross
architectures and Python versions. This commit adds a --sortkeys option
to the getFunctions command to sort the keys in the dictionary when
dumping it into json, thus allowing stable results of
tests/lnttool/Profile.py by using this option.


https://reviews.llvm.org/D68221

Files:
  lnt/lnttool/main.py
  tests/lnttool/Profile.py


Index: tests/lnttool/Profile.py
===================================================================
--- tests/lnttool/Profile.py
+++ tests/lnttool/Profile.py
@@ -4,8 +4,8 @@
 # RUN: lnt profile getTopLevelCounters %S/Inputs/test.lntprof | FileCheck --check-prefix=CHECK-GETTLC %s
 # CHECK-GETTLC: {"cycles": 12345.0, "branch-misses": 200.0}
 
-# RUN: lnt profile getFunctions %S/Inputs/test.lntprof | FileCheck --check-prefix=CHECK-GETFUNCTIONS %s
-# CHECK-GETFUNCTIONS: {"fn1": {"length": 2, "counters": {"cycles": 45.0, "branch-misses": 10.0}}}
+# RUN: lnt profile getFunctions --sortkeys %S/Inputs/test.lntprof | FileCheck --check-prefix=CHECK-GETFUNCTIONS %s
+# CHECK-GETFUNCTIONS: {"fn1": {"counters": {"branch-misses": 10.0, "cycles": 45.0}, "length": 2}}
 
 # RUN: lnt profile getCodeForFunction %S/Inputs/test.lntprof fn1 | FileCheck --check-prefix=CHECK-GETFN1 %s
 # CHECK-GETFN1: [{}, 1048576, "add r0, r0, r0"], [{"cycles": 100.0}, 1048580, "sub r1, r0, r0"]]
Index: lnt/lnttool/main.py
===================================================================
--- lnt/lnttool/main.py
+++ lnt/lnttool/main.py
@@ -424,11 +424,13 @@
 
 @action_profile.command("getFunctions")
 @click.argument("input", type=click.Path(exists=True))
-def command_get_functions(input):
+ at click.option("--sortkeys", is_flag=True)
+def command_get_functions(input, sortkeys):
     """print the functions in a profile"""
     import json
     import lnt.testing.profile.profile as profile
-    print(json.dumps(profile.Profile.fromFile(input).getFunctions()))
+    print(json.dumps(profile.Profile.fromFile(input).getFunctions(),
+                     sort_keys=sortkeys))
 
 
 @action_profile.command("getCodeForFunction")


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D68221.222417.patch
Type: text/x-patch
Size: 1705 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190930/54878445/attachment.bin>


More information about the llvm-commits mailing list