Author: anton-afanasyev Date: Mon Aug 19 15:58:26 2019 New Revision: 369308
URL: http://llvm.org/viewvc/llvm-project?rev=369308&view=rev Log: [Support][Time profiler] Make FE codegen blocks to be inside frontend blocks Summary: Add `Frontend` time trace entry to `HandleTranslationUnit()` function. Add test to check all codegen blocks are inside frontend blocks. Also, change `--time-trace-granularity` option a bit to make sure very small time blocks are outputed to json-file when using `--time-trace-granularity=0`. This fixes http://llvm.org/pr41969 Reviewers: russell.gallop, lebedev.ri, thakis Reviewed By: russell.gallop Subscribers: vsapsai, aras-p, lebedev.ri, hiraditya, cfe-commits, llvm-commits Tags: #clang, #llvm Differential Revision: https://reviews.llvm.org/D63325 Added: cfe/trunk/test/Driver/check-time-trace-sections.cpp cfe/trunk/test/Driver/check-time-trace-sections.py Modified: cfe/trunk/lib/CodeGen/CodeGenAction.cpp Modified: cfe/trunk/lib/CodeGen/CodeGenAction.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenAction.cpp?rev=369308&r1=369307&r2=369308&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CodeGenAction.cpp (original) +++ cfe/trunk/lib/CodeGen/CodeGenAction.cpp Mon Aug 19 15:58:26 2019 @@ -38,6 +38,7 @@ #include "llvm/Pass.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/SourceMgr.h" +#include "llvm/Support/TimeProfiler.h" #include "llvm/Support/Timer.h" #include "llvm/Support/ToolOutputFile.h" #include "llvm/Support/YAMLTraits.h" @@ -229,6 +230,7 @@ namespace clang { void HandleTranslationUnit(ASTContext &C) override { { + llvm::TimeTraceScope TimeScope("Frontend", StringRef("")); PrettyStackTraceString CrashInfo("Per-file LLVM IR generation"); if (FrontendTimesIsEnabled) { LLVMIRGenerationRefCount += 1; Added: cfe/trunk/test/Driver/check-time-trace-sections.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/check-time-trace-sections.cpp?rev=369308&view=auto ============================================================================== --- cfe/trunk/test/Driver/check-time-trace-sections.cpp (added) +++ cfe/trunk/test/Driver/check-time-trace-sections.cpp Mon Aug 19 15:58:26 2019 @@ -0,0 +1,7 @@ +// REQUIRES: shell +// RUN: %clangxx -S -ftime-trace -ftime-trace-granularity=0 -o %T/check-time-trace-sections %s +// RUN: cat %T/check-time-trace-sections.json | %python %S/check-time-trace-sections.py + +template <typename T> +void foo(T) {} +void bar() { foo(0); } Added: cfe/trunk/test/Driver/check-time-trace-sections.py URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/check-time-trace-sections.py?rev=369308&view=auto ============================================================================== --- cfe/trunk/test/Driver/check-time-trace-sections.py (added) +++ cfe/trunk/test/Driver/check-time-trace-sections.py Mon Aug 19 15:58:26 2019 @@ -0,0 +1,25 @@ +#!/usr/bin/env python + +import json, sys + +def is_inside(range1, range2): + a = range1["ts"]; b = a + range1["dur"] + c = range2["ts"]; d = c + range2["dur"] + return (a >= c and a <= d) and (b >= c and b <= d) + +def is_before(range1, range2): + b = range1["ts"] + range1["dur"]; c = range2["ts"] + return b <= c + +events = json.loads(sys.stdin.read())["traceEvents"] +codegens = filter(lambda x: x["name"] == "CodeGen Function", events) +frontends = filter(lambda x: x["name"] == "Frontend", events) +backends = filter(lambda x: x["name"] == "Backend", events) + +if not all([any([is_inside(codegen, frontend) for frontend in frontends]) + for codegen in codegens]): + sys.exit("Not all CodeGen sections are inside any Frontend section!") + +if not all([all([is_before(frontend, backend) for frontend in frontends]) + for backend in backends]): + sys.exit("Not all Frontend section are before all Backend sections!") _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits