[llvm-bugs] [Bug 41969] New: -ftime-trace Frontend timer misses Codegen Function for template functions

via llvm-bugs llvm-bugs at lists.llvm.org
Tue May 21 09:31:55 PDT 2019


https://bugs.llvm.org/show_bug.cgi?id=41969

            Bug ID: 41969
           Summary: -ftime-trace Frontend timer misses Codegen Function
                    for template functions
           Product: clang
           Version: trunk
          Hardware: PC
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: -New Bugs
          Assignee: unassignedclangbugs at nondot.org
          Reporter: russell_gallop at sn.scee.net
                CC: htmldeveloper at gmail.com, llvm-bugs at lists.llvm.org,
                    neeilans at live.com, richard-llvm at metafoo.co.uk

Created attachment 21982
  --> https://bugs.llvm.org/attachment.cgi?id=21982&action=edit
Screenshot of chrome://tracing

Clang "CodeGen Function" timers from -ftime-trace for some functions falls
outside of the "Frontend" timer and thus between Frontend and Backend (see
attached screenshot). I think this should be counted under Frontend. In the
original motivating example the time between "Frontend" and "Backend" was 11%
of the overall execution time so fairly significant.

e.g. at r361164
# Apply patch to trace ALL durations however small (to allow small
reproducible)
diff --git a/llvm/lib/Support/TimeProfiler.cpp
b/llvm/lib/Support/TimeProfiler.cpp
index bc234081564..f63847a8a28 100644
--- a/llvm/lib/Support/TimeProfiler.cpp
+++ b/llvm/lib/Support/TimeProfiler.cpp
@@ -65,8 +65,8 @@ struct TimeTraceProfiler {
     E.Duration = steady_clock::now() - E.Start;

     // Only include sections longer than TimeTraceGranularity msec.
-    if (duration_cast<microseconds>(E.Duration).count() >
TimeTraceGranularity)
-      Entries.emplace_back(E);
+    //if (duration_cast<microseconds>(E.Duration).count() >
TimeTraceGranularity)
+    Entries.emplace_back(E);

     // Track total time taken by each "name", but only the topmost levels of
     // them; e.g. if there's a template instantiation that instantiates other

$ cat test.cpp
template <typename T> void foo(T) {}
void bar() { foo(0); }
$ clang -c -ftime-trace test.cpp
# test.json now has CodeGen Function for foo<int> between "Frontend" and
"Backend"
{
    "traceEvents": [
      ...
        {
            "args": {
                "detail": ""
            },
            "dur": 1451,
            "name": "Frontend",
            "ph": "X",
            "pid": 1,
            "tid": 0,
            "ts": 3722
        },
        {
            "args": {
                "detail": "foo<int>"
            },
            "dur": 66,
            "name": "CodeGen Function",
            "ph": "X",
            "pid": 1,
            "tid": 0,
            "ts": 5177
        },
...
        {
            "args": {
                "detail": ""
            },
            "dur": 2866,
            "name": "Backend",
            "ph": "X",
            "pid": 1,
            "tid": 0,
            "ts": 5287
        },
...
}

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20190521/0714146f/attachment.html>


More information about the llvm-bugs mailing list