From bff0a3cd597dee8a7acb454b24e1cdac242b0a60 Mon Sep 17 00:00:00 2001 From: kennyzzhang Date: Thu, 1 Feb 2024 20:24:35 -0500 Subject: [PATCH] cilkgraph computation DAG generation tool --- clang/include/clang/Basic/LangOptions.h | 3 ++- clang/lib/CodeGen/BackendUtil.cpp | 23 +++++++++++++++++++++++ clang/lib/Frontend/CompilerInvocation.cpp | 4 ++++ clang/lib/Frontend/InitPreprocessor.cpp | 3 +++ 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Basic/LangOptions.h b/clang/include/clang/Basic/LangOptions.h index a4485a9b54f1..b1c505493c33 100644 --- a/clang/include/clang/Basic/LangOptions.h +++ b/clang/include/clang/Basic/LangOptions.h @@ -398,7 +398,8 @@ class LangOptions : public LangOptionsBase { Cilktool_None = 0, Cilktool_Cilkscale, Cilktool_Cilkscale_InstructionCount, - Cilktool_Cilkscale_Benchmark + Cilktool_Cilkscale_Benchmark, + Cilktool_Cilkgraph }; enum CilkVersion { diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index f1de665a9a50..a68440121e3a 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -300,6 +300,20 @@ static CSIOptions getCSIOptionsForCilkscaleBenchmark() { return Options; } +static CSIOptions getCSIOptionsForCilkgraph() { + CSIOptions Options; + // Disable CSI hooks that Cilkgraph doesn't need. + Options.InstrumentLoops = false; +// Options.InstrumentBasicBlocks = false; + Options.InstrumentMemoryAccesses = false; + Options.InstrumentCalls = false; + Options.InstrumentAtomics = false; + Options.InstrumentMemIntrinsics = false; + Options.InstrumentAllocas = false; + Options.InstrumentAllocFns = false; + return Options; +} + static TargetLibraryInfoImpl *createTLII(llvm::Triple &TargetTriple, const CodeGenOptions &CodeGenOpts) { TargetLibraryInfoImpl *TLII = new TargetLibraryInfoImpl(TargetTriple); @@ -1064,6 +1078,15 @@ void EmitAssemblyHelper::RunOptimizationPipeline( MPM.addPass(PB.buildPostCilkInstrumentationPipeline(Level)); }); break; + case LangOptions::CilktoolKind::Cilktool_Cilkgraph: + PB.registerTapirLoopEndEPCallback( + [&PB](ModulePassManager &MPM, OptimizationLevel Level) { + MPM.addPass(CSISetupPass(getCSIOptionsForCilkgraph())); + MPM.addPass(ComprehensiveStaticInstrumentationPass( + getCSIOptionsForCilkgraph())); + MPM.addPass(PB.buildPostCilkInstrumentationPipeline(Level)); + }); + break; } } // Register the CSI pass. diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index fab6da5492f6..55b653d1a57e 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -1287,6 +1287,7 @@ parseCilktoolKind(StringRef FlagName, ArgList &Args, DiagnosticsEngine &Diags) { LangOptions::Cilktool_Cilkscale_InstructionCount) .Case("cilkscale-benchmark", LangOptions::Cilktool_Cilkscale_Benchmark) + .Case("cilkgraph", LangOptions::Cilktool_Cilkgraph) .Default(LangOptions::Cilktool_None); if (ParsedCilktool == LangOptions::Cilktool_None) Diags.Report(diag::err_drv_invalid_value) << FlagName << Val; @@ -1309,6 +1310,9 @@ serializeCilktoolKind(LangOptions::CilktoolKind K) { case LangOptions::Cilktool_Cilkscale_Benchmark: CilktoolStr = "cilkscale-benchmark"; break; + case LangOptions::Cilktool_Cilkgraph: + CilktoolStr = "cilkgraph"; + break; case LangOptions::Cilktool_None: break; } diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp index 74bd05af421e..e9546549edcb 100644 --- a/clang/lib/Frontend/InitPreprocessor.cpp +++ b/clang/lib/Frontend/InitPreprocessor.cpp @@ -1316,6 +1316,9 @@ static void InitializePredefinedMacros(const TargetInfo &TI, case LangOptions::CilktoolKind::Cilktool_Cilkscale_Benchmark: Builder.defineMacro("__cilkscale__"); break; + case LangOptions::CilktoolKind::Cilktool_Cilkgraph: + Builder.defineMacro("__cilkgraph__"); + break; default: break; }