[clang] [llvm] BPU Machine basic block placement fuzz (PR #116492)

2024-11-16 Thread Dmitriy Sokolov via cfe-commits

https://github.com/dee-tree created 
https://github.com/llvm/llvm-project/pull/116492

- Non-optimal machine basic block placement via fuzz option
- machine block frequency inversion under the special option

>From 8376db35a7a7736d78bb7f0febf38203e415b489 Mon Sep 17 00:00:00 2001
From: Arseny Bochkarev 
Date: Wed, 25 Sep 2024 19:59:26 +0300
Subject: [PATCH 1/4] [Fuzz] Add compiler-assisted fuzzer prototype

---
 .../clang/Basic/DiagnosticDriverKinds.td  |  6 ++
 clang/include/clang/Driver/Options.td | 27 +++
 clang/lib/Driver/ToolChains/Clang.cpp | 71 ++--
 llvm/CMakeLists.txt   |  1 +
 .../llvm/CompilerAssistedFuzzing/FuzzInfo.h   | 43 ++
 llvm/lib/CMakeLists.txt   |  2 +-
 llvm/lib/CodeGen/CMakeLists.txt   |  1 +
 .../CompilerAssistedFuzzing/CMakeLists.txt|  9 +++
 llvm/lib/CompilerAssistedFuzzing/FuzzInfo.cpp | 81 +++
 llvm/lib/Support/CMakeLists.txt   |  1 +
 llvm/lib/Support/Statistic.cpp| 20 -
 11 files changed, 255 insertions(+), 7 deletions(-)
 create mode 100644 llvm/include/llvm/CompilerAssistedFuzzing/FuzzInfo.h
 create mode 100644 llvm/lib/CompilerAssistedFuzzing/CMakeLists.txt
 create mode 100644 llvm/lib/CompilerAssistedFuzzing/FuzzInfo.cpp

diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td 
b/clang/include/clang/Basic/DiagnosticDriverKinds.td
index 97573fcf20c1fb..f59c0e286e49e9 100644
--- a/clang/include/clang/Basic/DiagnosticDriverKinds.td
+++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td
@@ -826,6 +826,12 @@ def warn_android_unversioned_fallback : Warning<
 def err_drv_triple_version_invalid : Error<
   "version '%0' in target triple '%1' is invalid">;
 
+def err_empty_option_value : Error<
+  "empty value for %0 option">;
+
+def warn_use_fseed : Warning<"Fuzzing with seed: %0">,
+  InGroup>;
+
 def warn_missing_include_dirs : Warning<
   "no such include directory: '%0'">, InGroup, 
DefaultIgnore;
 }
diff --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 23bd686a85f526..264ebd3541de15 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -6730,6 +6730,33 @@ let Flags = [TargetSpecific] in {
 defm android_pad_segment : BooleanFFlag<"android-pad-segment">, Group;
 } // let Flags = [TargetSpecific]
 
+// Compiler-assisted fuzzing options
+def fuzz_EQ : Joined<["--"], "fuzz=">,
+  Flags<[NoXarchOption, HelpHidden]>, Group,
+  HelpText<"Fuzz selected compiler components, RISC-V only."
+  "Usage: --fuzz=\"[|...]\"">,
+  Values<"all, scheduler, mbb-placement, regalloc, isel, alloca">;
+
+def fseed_EQ : Joined<["--"], "fseed=">,
+  Flags<[NoXarchOption, HelpHidden]>, Group,
+  HelpText<"Specify fuzzing seed. (RISC-V only)">;
+
+def fseed_dump : Flag<["-"], "fseed-dump">,
+  Visibility<[ClangOption, CLOption]>,
+  Group, HelpText<"Dump fuzz seed. (RISC-V only)">;
+
+def fno_fseed_dump : Flag<["-"], "fno-fseed-dump">,
+  Visibility<[ClangOption, CLOption]>,
+  Group, HelpText<"Disable fuzz seed dump. (RISC-V only)">;
+
+def fuzz_stats_dump : Flag<["-"], "fuzz-stats-dump">,
+  Visibility<[ClangOption, CLOption]>,
+  Group, HelpText<"Dump only fuzz statistics.">;
+
+def fno_fuzz_stats_dump : Flag<["-"], "fno-fuzz-stats-dump">,
+  Visibility<[ClangOption, CLOption]>,
+  Group, HelpText<"Dump not only fuzz statistics.">;
+
 
//===--===//
 // FLangOption + NoXarchOption
 
//===--===//
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp 
b/clang/lib/Driver/ToolChains/Clang.cpp
index 0bab48caf1a5e2..c10cd539942040 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -7646,11 +7646,17 @@ void Clang::ConstructJob(Compilation &C, const 
JobAction &JA,
 
   // Setup statistics file output.
   SmallString<128> StatsFile = getStatsFileName(Args, Output, Input, D);
-  if (!StatsFile.empty()) {
-CmdArgs.push_back(Args.MakeArgString(Twine("-stats-file=") + StatsFile));
-if (D.CCPrintInternalStats)
-  CmdArgs.push_back("-stats-file-append");
-  }
+  auto FuzzStatsDump = Args.hasFlag(options::OPT_fuzz_stats_dump,
+options::OPT_fno_fuzz_stats_dump, false);
+  if (!StatsFile.empty() || FuzzStatsDump) {
+if (FuzzStatsDump) {
+  CmdArgs.push_back("-mllvm");
+  CmdArgs.push_back("-fuzz-only-stats");
+}
+if (StatsFile.empty()) {
+  StatsFile.assign(Output.getFilename());
+  llvm::sys::path::replace_extension(StatsFile, "stats");
+}
 
   // Forward -Xclang arguments to -cc1, and -mllvm arguments to the LLVM option
   // parser.
@@ -8050,6 +8056,61 @@ void Clang::ConstructJob(Compilation &C, const JobAction 
&JA,
   Input.getInputArg().renderAsInput(Args, CmdArgs);
   }
 
+  // Handle --fuzz=
+  StringRef Fu

[clang] [llvm] BPU Machine basic block placement fuzz (PR #116492)

2024-11-16 Thread Dmitriy Sokolov via cfe-commits

https://github.com/dee-tree closed 
https://github.com/llvm/llvm-project/pull/116492
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Opened-by-mistake] BPU Machine basic block placement fuzz (PR #116492)

2024-11-16 Thread Dmitriy Sokolov via cfe-commits

https://github.com/dee-tree edited 
https://github.com/llvm/llvm-project/pull/116492
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Opened-by-mistake] BPU Machine basic block placement fuzz (PR #116492)

2024-11-16 Thread Dmitriy Sokolov via cfe-commits

https://github.com/dee-tree edited 
https://github.com/llvm/llvm-project/pull/116492
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits