Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revert "[LLVM] Add IRNormalizer Pass" #113392

Merged
merged 1 commit into from
Oct 22, 2024
Merged

Revert "[LLVM] Add IRNormalizer Pass" #113392

merged 1 commit into from
Oct 22, 2024

Conversation

justinfargnoli
Copy link
Contributor

@justinfargnoli justinfargnoli commented Oct 22, 2024

Reverts #68176

Introduced BuildBot failure: #68176 (comment)

@llvmbot
Copy link
Member

llvmbot commented Oct 22, 2024

@llvm/pr-subscribers-llvm-transforms

Author: Justin Fargnoli (justinfargnoli)

Changes

Reverts llvm/llvm-project#68176


Patch is 54.49 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/113392.diff

17 Files Affected:

  • (modified) llvm/docs/Passes.rst (-8)
  • (modified) llvm/docs/ReleaseNotes.md (-5)
  • (removed) llvm/include/llvm/Transforms/Utils/IRNormalizer.h (-15)
  • (modified) llvm/lib/Passes/PassBuilder.cpp (-1)
  • (modified) llvm/lib/Passes/PassRegistry.def (-1)
  • (modified) llvm/lib/Transforms/Utils/CMakeLists.txt (-1)
  • (removed) llvm/lib/Transforms/Utils/IRNormalizer.cpp (-695)
  • (removed) llvm/test/Transforms/IRNormalizer/naming-args-instr-blocks.ll (-18)
  • (removed) llvm/test/Transforms/IRNormalizer/naming-arguments.ll (-13)
  • (removed) llvm/test/Transforms/IRNormalizer/naming.ll (-30)
  • (removed) llvm/test/Transforms/IRNormalizer/regression-convergence-tokens.ll (-27)
  • (removed) llvm/test/Transforms/IRNormalizer/regression-coro-elide-musttail.ll (-21)
  • (removed) llvm/test/Transforms/IRNormalizer/regression-deoptimize.ll (-18)
  • (removed) llvm/test/Transforms/IRNormalizer/regression-dont-hoist-deoptimize.ll (-20)
  • (removed) llvm/test/Transforms/IRNormalizer/regression-infinite-loop.ll (-195)
  • (removed) llvm/test/Transforms/IRNormalizer/reordering-basic.ll (-58)
  • (removed) llvm/test/Transforms/IRNormalizer/reordering.ll (-163)
diff --git a/llvm/docs/Passes.rst b/llvm/docs/Passes.rst
index 5e436db62be3a1..49f633e98d16fe 100644
--- a/llvm/docs/Passes.rst
+++ b/llvm/docs/Passes.rst
@@ -543,14 +543,6 @@ variables with initializers are marked as internal.
 An interprocedural variant of :ref:`Sparse Conditional Constant Propagation
 <passes-sccp>`.
 
-``ir-normalizer``: Transforms IR into a normal form that's easier to diff
-----------------------------------------------------------------------------
-
-This pass aims to transform LLVM Modules into a normal form by reordering and
-renaming instructions while preserving the same semantics. The normalizer makes
-it easier to spot semantic differences while diffing two modules which have
-undergone two different passes.
-
 ``jump-threading``: Jump Threading
 ----------------------------------
 
diff --git a/llvm/docs/ReleaseNotes.md b/llvm/docs/ReleaseNotes.md
index 0c4cd437dac0b4..c8f5d22c15472a 100644
--- a/llvm/docs/ReleaseNotes.md
+++ b/llvm/docs/ReleaseNotes.md
@@ -42,11 +42,6 @@ point (e.g. maybe you would like to give an example of the
 functionality, or simply have a lot to talk about), see the comment below
 for adding a new subsection. -->
 
-* Added a new IRNormalizer pass which aims to transform LLVM modules into
-  a normal form by reordering and renaming instructions while preserving the
-  same semantics. The normalizer makes it easier to spot semantic differences
-  when diffing two modules which have undergone different passes.
-
 * ...
 
 <!-- If you would like to document a larger change, then you can add a
diff --git a/llvm/include/llvm/Transforms/Utils/IRNormalizer.h b/llvm/include/llvm/Transforms/Utils/IRNormalizer.h
deleted file mode 100644
index af1f715d4940d8..00000000000000
--- a/llvm/include/llvm/Transforms/Utils/IRNormalizer.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef LLVM_TRANSFORMS_UTILS_IRNORMALIZER_H
-#define LLVM_TRANSFORMS_UTILS_IRNORMALIZER_H
-
-#include "llvm/IR/PassManager.h"
-
-namespace llvm {
-
-/// IRNormalizer aims to transform LLVM IR into normal form.
-struct IRNormalizerPass : public PassInfoMixin<IRNormalizerPass> {
-  PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM) const;
-};
-
-} // namespace llvm
-
-#endif // LLVM_TRANSFORMS_UTILS_IRNORMALIZER_H
diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp
index 67ebc3015a46df..19e8a96bf78972 100644
--- a/llvm/lib/Passes/PassBuilder.cpp
+++ b/llvm/lib/Passes/PassBuilder.cpp
@@ -303,7 +303,6 @@
 #include "llvm/Transforms/Utils/EntryExitInstrumenter.h"
 #include "llvm/Transforms/Utils/FixIrreducible.h"
 #include "llvm/Transforms/Utils/HelloWorld.h"
-#include "llvm/Transforms/Utils/IRNormalizer.h"
 #include "llvm/Transforms/Utils/InjectTLIMappings.h"
 #include "llvm/Transforms/Utils/InstructionNamer.h"
 #include "llvm/Transforms/Utils/Instrumentation.h"
diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def
index d1fac824fdcd5f..549c1359b5852c 100644
--- a/llvm/lib/Passes/PassRegistry.def
+++ b/llvm/lib/Passes/PassRegistry.def
@@ -412,7 +412,6 @@ FUNCTION_PASS("move-auto-init", MoveAutoInitPass())
 FUNCTION_PASS("nary-reassociate", NaryReassociatePass())
 FUNCTION_PASS("newgvn", NewGVNPass())
 FUNCTION_PASS("no-op-function", NoOpFunctionPass())
-FUNCTION_PASS("normalize", IRNormalizerPass())
 FUNCTION_PASS("objc-arc", ObjCARCOptPass())
 FUNCTION_PASS("objc-arc-contract", ObjCARCContractPass())
 FUNCTION_PASS("objc-arc-expand", ObjCARCExpandPass())
diff --git a/llvm/lib/Transforms/Utils/CMakeLists.txt b/llvm/lib/Transforms/Utils/CMakeLists.txt
index 65bd3080662c4d..36761cf3569741 100644
--- a/llvm/lib/Transforms/Utils/CMakeLists.txt
+++ b/llvm/lib/Transforms/Utils/CMakeLists.txt
@@ -37,7 +37,6 @@ add_llvm_component_library(LLVMTransformUtils
   InstructionNamer.cpp
   Instrumentation.cpp
   IntegerDivision.cpp
-  IRNormalizer.cpp
   LCSSA.cpp
   LibCallsShrinkWrap.cpp
   Local.cpp
diff --git a/llvm/lib/Transforms/Utils/IRNormalizer.cpp b/llvm/lib/Transforms/Utils/IRNormalizer.cpp
deleted file mode 100644
index 74c8fc26a0acd5..00000000000000
--- a/llvm/lib/Transforms/Utils/IRNormalizer.cpp
+++ /dev/null
@@ -1,695 +0,0 @@
-//===--------------- IRNormalizer.cpp - IR Normalizer ---------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-/// \file
-/// This file implements the IRNormalizer class which aims to transform LLVM
-/// Modules into a normal form by reordering and renaming instructions while
-/// preserving the same semantics. The normalizer makes it easier to spot
-/// semantic differences while diffing two modules which have undergone
-/// different passes.
-///
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Transforms/Utils/IRNormalizer.h"
-#include "llvm/ADT/SetVector.h"
-#include "llvm/ADT/SmallPtrSet.h"
-#include "llvm/ADT/SmallString.h"
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/IR/BasicBlock.h"
-#include "llvm/IR/Function.h"
-#include "llvm/IR/IRBuilder.h"
-#include "llvm/IR/InstIterator.h"
-#include "llvm/IR/Module.h"
-#include "llvm/InitializePasses.h"
-#include "llvm/Pass.h"
-#include "llvm/PassRegistry.h"
-#include "llvm/Support/CommandLine.h"
-#include "llvm/Transforms/Utils.h"
-#include <algorithm>
-#include <stack>
-
-#define DEBUG_TYPE "normalize"
-
-using namespace llvm;
-
-namespace {
-/// IRNormalizer aims to transform LLVM IR into normal form.
-class IRNormalizer {
-public:
-  /// \name Normalizer flags.
-  /// @{
-  /// Preserves original order of instructions.
-  static cl::opt<bool> PreserveOrder;
-  /// Renames all instructions (including user-named).
-  static cl::opt<bool> RenameAll; // TODO: Don't rename on empty name
-  /// Folds all regular instructions (including pre-outputs).
-  static cl::opt<bool> FoldPreOutputs;
-  /// Sorts and reorders operands in commutative instructions.
-  static cl::opt<bool> ReorderOperands;
-  /// @}
-
-  bool runOnFunction(Function &F);
-
-private:
-  // Random constant for hashing, so the state isn't zero.
-  const uint64_t MagicHashConstant = 0x6acaa36bef8325c5ULL;
-  DenseSet<const Instruction *> NamedInstructions;
-
-  SmallVector<Instruction *, 16> Outputs;
-
-  /// \name Naming.
-  /// @{
-  void nameFunctionArguments(Function &F) const;
-  void nameBasicBlocks(Function &F) const;
-  void nameInstruction(Instruction *I);
-  void nameAsInitialInstruction(Instruction *I) const;
-  void nameAsRegularInstruction(Instruction *I);
-  void foldInstructionName(Instruction *I) const;
-  /// @}
-
-  /// \name Reordering.
-  /// @{
-  void reorderInstructions(Function &F) const;
-  void reorderDefinition(Instruction *Definition,
-                         std::stack<Instruction *> &TopologicalSort,
-                         SmallPtrSet<const Instruction *, 32> &Visited) const;
-  void reorderInstructionOperandsByNames(Instruction *I) const;
-  void reorderPHIIncomingValues(PHINode *Phi) const;
-  /// @}
-
-  /// \name Utility methods.
-  /// @{
-  template <typename T>
-  void sortCommutativeOperands(Instruction *I, T &Operands) const;
-  SmallVector<Instruction *, 16> collectOutputInstructions(Function &F) const;
-  bool isOutput(const Instruction *I) const;
-  bool isInitialInstruction(const Instruction *I) const;
-  bool hasOnlyImmediateOperands(const Instruction *I) const;
-  SetVector<int>
-  getOutputFootprint(Instruction *I,
-                     SmallPtrSet<const Instruction *, 32> &Visited) const;
-  /// @}
-};
-} // namespace
-
-cl::opt<bool> IRNormalizer::PreserveOrder(
-    "norm-preserve-order", cl::Hidden, cl::init(false),
-    cl::desc("Preserves original instruction order"));
-cl::opt<bool> IRNormalizer::RenameAll(
-    "norm-rename-all", cl::Hidden, cl::init(true),
-    cl::desc("Renames all instructions (including user-named)"));
-cl::opt<bool> IRNormalizer::FoldPreOutputs(
-    "norm-fold-all", cl::Hidden, cl::init(true),
-    cl::desc("Folds all regular instructions (including pre-outputs)"));
-cl::opt<bool> IRNormalizer::ReorderOperands(
-    "norm-reorder-operands", cl::Hidden, cl::init(true),
-    cl::desc("Sorts and reorders operands in commutative instructions"));
-
-/// Entry method to the IRNormalizer.
-///
-/// \param F Function to normalize.
-bool IRNormalizer::runOnFunction(Function &F) {
-  nameFunctionArguments(F);
-  nameBasicBlocks(F);
-
-  Outputs = collectOutputInstructions(F);
-
-  if (!PreserveOrder)
-    reorderInstructions(F);
-
-  // TODO: Reorder basic blocks via a topological sort.
-
-  for (auto &I : Outputs)
-    nameInstruction(I);
-
-  for (auto &I : instructions(F)) {
-    if (!PreserveOrder) {
-      if (ReorderOperands)
-        reorderInstructionOperandsByNames(&I);
-
-      if (auto *Phi = dyn_cast<PHINode>(&I))
-        reorderPHIIncomingValues(Phi);
-    }
-    foldInstructionName(&I);
-  }
-
-  return true;
-}
-
-/// Numbers arguments.
-///
-/// \param F Function whose arguments will be renamed.
-void IRNormalizer::nameFunctionArguments(Function &F) const {
-  int ArgumentCounter = 0;
-  for (auto &A : F.args()) {
-    if (RenameAll || A.getName().empty()) {
-      A.setName("a" + Twine(ArgumentCounter));
-      ArgumentCounter += 1;
-    }
-  }
-}
-
-/// Names basic blocks using a generated hash for each basic block in
-/// a function considering the opcode and the order of output instructions.
-///
-/// \param F Function containing basic blocks to rename.
-void IRNormalizer::nameBasicBlocks(Function &F) const {
-  for (auto &B : F) {
-    // Initialize to a magic constant, so the state isn't zero.
-    uint64_t Hash = MagicHashConstant;
-
-    // Hash considering output instruction opcodes.
-    for (auto &I : B)
-      if (isOutput(&I))
-        Hash = hashing::detail::hash_16_bytes(Hash, I.getOpcode());
-
-    if (RenameAll || B.getName().empty()) {
-      // Name basic block. Substring hash to make diffs more readable.
-      B.setName("bb" + std::to_string(Hash).substr(0, 5));
-    }
-  }
-}
-
-/// Names instructions graphically (recursive) in accordance with the
-/// def-use tree, starting from the initial instructions (defs), finishing at
-/// the output (top-most user) instructions (depth-first).
-///
-/// \param I Instruction to be renamed.
-void IRNormalizer::nameInstruction(Instruction *I) {
-  // Ensure instructions are not renamed. This is done
-  // to prevent situation where instructions are used
-  // before their definition (in phi nodes)
-  if (NamedInstructions.contains(I))
-    return;
-  NamedInstructions.insert(I);
-  if (isInitialInstruction(I)) {
-    nameAsInitialInstruction(I);
-  } else {
-    // This must be a regular instruction.
-    nameAsRegularInstruction(I);
-  }
-}
-
-template <typename T>
-void IRNormalizer::sortCommutativeOperands(Instruction *I, T &Operands) const {
-  if (!(I->isCommutative() && Operands.size() >= 2))
-    return;
-  auto CommutativeEnd = Operands.begin();
-  std::advance(CommutativeEnd, 2);
-  llvm::sort(Operands.begin(), CommutativeEnd);
-}
-
-/// Names instruction following the scheme:
-/// vl00000Callee(Operands)
-///
-/// Where 00000 is a hash calculated considering instruction's opcode and output
-/// footprint. Callee's name is only included when instruction's type is
-/// CallInst. In cases where instruction is commutative, operands list is also
-/// sorted.
-///
-/// Renames instruction only when RenameAll flag is raised or instruction is
-/// unnamed.
-///
-/// \see getOutputFootprint()
-/// \param I Instruction to be renamed.
-void IRNormalizer::nameAsInitialInstruction(Instruction *I) const {
-  if (I->getType()->isVoidTy())
-    return;
-  if (!(I->getName().empty() || RenameAll))
-    return;
-  LLVM_DEBUG(dbgs() << "Naming initial instruction: " << *I << "\n");
-
-  // Instruction operands for further sorting.
-  SmallVector<SmallString<64>, 4> Operands;
-
-  // Collect operands.
-  for (auto &Op : I->operands()) {
-    if (!isa<Function>(Op)) {
-      std::string TextRepresentation;
-      raw_string_ostream Stream(TextRepresentation);
-      Op->printAsOperand(Stream, false);
-      Operands.push_back(StringRef(Stream.str()));
-    }
-  }
-
-  sortCommutativeOperands(I, Operands);
-
-  // Initialize to a magic constant, so the state isn't zero.
-  uint64_t Hash = MagicHashConstant;
-
-  // Consider instruction's opcode in the hash.
-  Hash = hashing::detail::hash_16_bytes(Hash, I->getOpcode());
-
-  SmallPtrSet<const Instruction *, 32> Visited;
-  // Get output footprint for I.
-  SetVector<int> OutputFootprint = getOutputFootprint(I, Visited);
-
-  // Consider output footprint in the hash.
-  for (const int &Output : OutputFootprint)
-    Hash = hashing::detail::hash_16_bytes(Hash, Output);
-
-  // Base instruction name.
-  SmallString<256> Name;
-  Name.append("vl" + std::to_string(Hash).substr(0, 5));
-
-  // In case of CallInst, consider callee in the instruction name.
-  if (const auto *CI = dyn_cast<CallInst>(I)) {
-    Function *F = CI->getCalledFunction();
-
-    if (F != nullptr)
-      Name.append(F->getName());
-  }
-
-  Name.append("(");
-  for (size_t i = 0; i < Operands.size(); ++i) {
-    Name.append(Operands[i]);
-
-    if (i < Operands.size() - 1)
-      Name.append(", ");
-  }
-  Name.append(")");
-
-  I->setName(Name);
-}
-
-/// Names instruction following the scheme:
-/// op00000Callee(Operands)
-///
-/// Where 00000 is a hash calculated considering instruction's opcode, its
-/// operands' opcodes and order. Callee's name is only included when
-/// instruction's type is CallInst. In cases where instruction is commutative,
-/// operand list is also sorted.
-///
-/// Names instructions recursively in accordance with the def-use tree,
-/// starting from the initial instructions (defs), finishing at
-/// the output (top-most user) instructions (depth-first).
-///
-/// Renames instruction only when RenameAll flag is raised or instruction is
-/// unnamed.
-///
-/// \see getOutputFootprint()
-/// \param I Instruction to be renamed.
-void IRNormalizer::nameAsRegularInstruction(Instruction *I) {
-  LLVM_DEBUG(dbgs() << "Naming regular instruction: " << *I << "\n");
-
-  // Instruction operands for further sorting.
-  SmallVector<SmallString<128>, 4> Operands;
-
-  // The name of a regular instruction depends
-  // on the names of its operands. Hence, all
-  // operands must be named first in the use-def
-  // walk.
-
-  // Collect operands.
-  for (auto &Op : I->operands()) {
-    if (auto *I = dyn_cast<Instruction>(Op)) {
-      // Walk down the use-def chain.
-      nameInstruction(I);
-      Operands.push_back(I->getName());
-    } else if (!isa<Function>(Op)) {
-      // This must be an immediate value.
-      std::string TextRepresentation;
-      raw_string_ostream Stream(TextRepresentation);
-      Op->printAsOperand(Stream, false);
-      Operands.push_back(StringRef(Stream.str()));
-    }
-  }
-
-  sortCommutativeOperands(I, Operands);
-
-  // Initialize to a magic constant, so the state isn't zero.
-  uint64_t Hash = MagicHashConstant;
-
-  // Consider instruction opcode in the hash.
-  Hash = hashing::detail::hash_16_bytes(Hash, I->getOpcode());
-
-  // Operand opcodes for further sorting (commutative).
-  SmallVector<int, 4> OperandsOpcodes;
-
-  // Collect operand opcodes for hashing.
-  for (auto &Op : I->operands())
-    if (auto *I = dyn_cast<Instruction>(Op))
-      OperandsOpcodes.push_back(I->getOpcode());
-
-  sortCommutativeOperands(I, OperandsOpcodes);
-
-  // Consider operand opcodes in the hash.
-  for (const int Code : OperandsOpcodes)
-    Hash = hashing::detail::hash_16_bytes(Hash, Code);
-
-  // Base instruction name.
-  SmallString<512> Name;
-  Name.append("op" + std::to_string(Hash).substr(0, 5));
-
-  // In case of CallInst, consider callee in the instruction name.
-  if (const auto *CI = dyn_cast<CallInst>(I))
-    if (const Function *F = CI->getCalledFunction())
-      Name.append(F->getName());
-
-  Name.append("(");
-  for (size_t i = 0; i < Operands.size(); ++i) {
-    Name.append(Operands[i]);
-
-    if (i < Operands.size() - 1)
-      Name.append(", ");
-  }
-  Name.append(")");
-
-  if ((I->getName().empty() || RenameAll) && !I->getType()->isVoidTy())
-    I->setName(Name);
-}
-
-/// Shortens instruction's name. This method removes called function name from
-/// the instruction name and substitutes the call chain with a corresponding
-/// list of operands.
-///
-/// Examples:
-/// op00000Callee(op00001Callee(...), vl00000Callee(1, 2), ...)  ->
-/// op00000(op00001, vl00000, ...) vl00000Callee(1, 2)  ->  vl00000(1, 2)
-///
-/// This method omits output instructions and pre-output (instructions directly
-/// used by an output instruction) instructions (by default). By default it also
-/// does not affect user named instructions.
-///
-/// \param I Instruction whose name will be folded.
-void IRNormalizer::foldInstructionName(Instruction *I) const {
-  // If this flag is raised, fold all regular
-  // instructions (including pre-outputs).
-  if (!FoldPreOutputs) {
-    // Don't fold if one of the users is an output instruction.
-    for (auto *U : I->users())
-      if (auto *IU = dyn_cast<Instruction>(U))
-        if (isOutput(IU))
-          return;
-  }
-
-  // Don't fold if it is an output instruction or has no op prefix.
-  if (isOutput(I) || I->getName().substr(0, 2) != "op")
-    return;
-
-  // Instruction operands.
-  SmallVector<SmallString<64>, 4> Operands;
-
-  for (auto &Op : I->operands()) {
-    if (const auto *I = dyn_cast<Instruction>(Op)) {
-      bool HasNormalName = I->getName().substr(0, 2) == "op" ||
-                           I->getName().substr(0, 2) == "vl";
-
-      Operands.push_back(HasNormalName ? I->getName().substr(0, 7)
-                                       : I->getName());
-    }
-  }
-
-  sortCommutativeOperands(I, Operands);
-
-  SmallString<256> Name;
-  Name.append(I->getName().substr(0, 7));
-
-  Name.append("(");
-  for (size_t i = 0; i < Operands.size(); ++i) {
-    Name.append(Operands[i]);
-
-    if (i < Operands.size() - 1)
-      Name.append(", ");
-  }
-  Name.append(")");
-
-  I->setName(Name);
-}
-
-/// Reorders instructions by walking up the tree from each operand of an output
-/// instruction and reducing the def-use distance.
-/// This method assumes that output instructions were collected top-down,
-/// otherwise the def-use chain may be broken.
-/// This method is a wrapper for recursive reorderInstruction().
-///
-/// \see reorderInstruction()
-void IRNormalizer::reorderInstructions(Function &F) const {
-  for (auto &BB : F) {
-    LLVM_DEBUG(dbgs() << "Reordering instructions in basic block: "
-                      << BB.getName() << "\n");
-    // Find the source nodes of the DAG of instructions in this basic block.
-    // Source nodes are instructions that have side effects, are terminators, or
-    // don't have a parent in the DAG of instructions.
-    //
-    // We must iterate from the first to the last instruction otherwise side
-    // effecting instructions could be reordered.
-
-    std::stack<Instruction *> TopologicalSort;
-    SmallPtrSet<const Instruction *, 32> Visited;
-    for (auto &I : BB) {
-      // First process side effecting and terminating instructions.
-      if (!(isOutput(&I) || I.isTerminator()))
-        continue;
-      LLVM_DEBUG(dbgs() << "\tReordering from source effecting instruction: ";
-                 I.dump());
-      reorderDefinition(&I, TopologicalSort, Visited);
-    }
-
-    for (auto &I : BB) {
-      // Process the remaining instructions.
-      //
-      // TODO: Do more a intelligent sorting of these instructions. For example,
-      // seperate between dead instructinos and instructions used in another
-      // block. Use properties of the CFG the order instructions that are used
-      // in another block.
-      if (Visited.contains(&I))
-        continue;
-      LLVM_DEBUG(dbgs() << "\tReordering from source instruction: "; I.dump());
-      reorderDefinition(&I, TopologicalSort, Visited);
-    }
-
-    LLVM_DEBUG(dbgs() << "Inserting instructions into: " << BB.getName()
-                      << "\n");
-    // Reorder based on the topological sort.
-    while (!TopologicalSort.empty()) {
-      auto *Instruction = TopologicalSort.top();
-      auto FirstNonPHIOr...
[truncated]

@justinfargnoli justinfargnoli self-assigned this Oct 22, 2024
@justinfargnoli justinfargnoli merged commit 8a12e01 into main Oct 22, 2024
8 of 10 checks passed
@justinfargnoli justinfargnoli deleted the revert-68176-main branch October 22, 2024 23:01
@llvm-ci
Copy link
Collaborator

llvm-ci commented Oct 23, 2024

LLVM Buildbot has detected a new failure on builder clang-s390x-linux-lnt running on systemz-1 while building llvm at step 7 "ninja check 1".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/136/builds/1354

Here is the relevant piece of the build log for the reference
Step 7 (ninja check 1) failure: stage 1 checked (failure)
******************** TEST 'libFuzzer-s390x-default-Linux :: fuzzer-timeout.test' FAILED ********************
Exit Code: 1

Command Output (stderr):
--
RUN: at line 1: /home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/stage1/./bin/clang    -Wthread-safety -Wthread-safety-reference -Wthread-safety-beta   --driver-mode=g++ -O2 -gline-tables-only -fsanitize=address,fuzzer -I/home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/llvm/compiler-rt/lib/fuzzer  /home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/llvm/compiler-rt/test/fuzzer/TimeoutTest.cpp -o /home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/stage1/runtimes/runtimes-bins/compiler-rt/test/fuzzer/S390XDefaultLinuxConfig/Output/fuzzer-timeout.test.tmp-TimeoutTest
+ /home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/stage1/./bin/clang -Wthread-safety -Wthread-safety-reference -Wthread-safety-beta --driver-mode=g++ -O2 -gline-tables-only -fsanitize=address,fuzzer -I/home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/llvm/compiler-rt/lib/fuzzer /home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/llvm/compiler-rt/test/fuzzer/TimeoutTest.cpp -o /home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/stage1/runtimes/runtimes-bins/compiler-rt/test/fuzzer/S390XDefaultLinuxConfig/Output/fuzzer-timeout.test.tmp-TimeoutTest
RUN: at line 2: /home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/stage1/./bin/clang    -Wthread-safety -Wthread-safety-reference -Wthread-safety-beta   --driver-mode=g++ -O2 -gline-tables-only -fsanitize=address,fuzzer -I/home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/llvm/compiler-rt/lib/fuzzer  /home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/llvm/compiler-rt/test/fuzzer/TimeoutEmptyTest.cpp -o /home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/stage1/runtimes/runtimes-bins/compiler-rt/test/fuzzer/S390XDefaultLinuxConfig/Output/fuzzer-timeout.test.tmp-TimeoutEmptyTest
+ /home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/stage1/./bin/clang -Wthread-safety -Wthread-safety-reference -Wthread-safety-beta --driver-mode=g++ -O2 -gline-tables-only -fsanitize=address,fuzzer -I/home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/llvm/compiler-rt/lib/fuzzer /home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/llvm/compiler-rt/test/fuzzer/TimeoutEmptyTest.cpp -o /home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/stage1/runtimes/runtimes-bins/compiler-rt/test/fuzzer/S390XDefaultLinuxConfig/Output/fuzzer-timeout.test.tmp-TimeoutEmptyTest
RUN: at line 3: not  /home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/stage1/runtimes/runtimes-bins/compiler-rt/test/fuzzer/S390XDefaultLinuxConfig/Output/fuzzer-timeout.test.tmp-TimeoutTest -timeout=1 2>&1 | FileCheck /home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/llvm/compiler-rt/test/fuzzer/fuzzer-timeout.test --check-prefix=TimeoutTest
+ not /home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/stage1/runtimes/runtimes-bins/compiler-rt/test/fuzzer/S390XDefaultLinuxConfig/Output/fuzzer-timeout.test.tmp-TimeoutTest -timeout=1
+ FileCheck /home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/llvm/compiler-rt/test/fuzzer/fuzzer-timeout.test --check-prefix=TimeoutTest
/home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/llvm/compiler-rt/test/fuzzer/fuzzer-timeout.test:7:14: error: TimeoutTest: expected string not found in input
TimeoutTest: #0
             ^
<stdin>:30:44: note: scanning from here
==3248612== ERROR: libFuzzer: timeout after 1 seconds
                                           ^
<stdin>:35:104: note: possible intended match here
AddressSanitizer: CHECK failed: asan_report.cpp:199 "((current_error_.kind)) == ((kErrorKindInvalid))" (0x1, 0x0) (tid=3248612)
                                                                                                       ^

Input file: <stdin>
Check file: /home/uweigand/sandbox/buildbot/clang-s390x-linux-lnt/llvm/compiler-rt/test/fuzzer/fuzzer-timeout.test

-dump-input=help explains the following input dump.

Input was:
<<<<<<
           .
           .
           .
          25: MS: 4 ShuffleBytes-CrossOver-ChangeBit-ShuffleBytes-; base unit: 9ed58fb4652ebd9aab9eb2790476056cd3747a5e 
          26: 0x48,0x69,0x21, 
          27: Hi! 
          28: artifact_prefix='./'; Test unit written to ./timeout-c0a0ad26a634840c67a210fefdda76577b03a111 
          29: Base64: SGkh 
          30: ==3248612== ERROR: libFuzzer: timeout after 1 seconds 
check:7'0                                                X~~~~~~~~~~ error: no match found
          31: AddressSanitizer:DEADLYSIGNAL 
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          32: ================================================================= 
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          33: AddressSanitizer:DEADLYSIGNAL 
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          34: ================================================================= 
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          35: AddressSanitizer: CHECK failed: asan_report.cpp:199 "((current_error_.kind)) == ((kErrorKindInvalid))" (0x1, 0x0) (tid=3248612) 
check:7'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check:7'1                                                                                                            ?                         possible intended match
...

@llvm-ci
Copy link
Collaborator

llvm-ci commented Oct 23, 2024

LLVM Buildbot has detected a new failure on builder lld-x86_64-win running on as-worker-93 while building llvm at step 7 "test-build-unified-tree-check-all".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/146/builds/1438

Here is the relevant piece of the build log for the reference
Step 7 (test-build-unified-tree-check-all) failure: test (failure)
******************** TEST 'LLVM-Unit :: Support/./SupportTests.exe/36/87' FAILED ********************
Script(shard):
--
GTEST_OUTPUT=json:C:\a\lld-x86_64-win\build\unittests\Support\.\SupportTests.exe-LLVM-Unit-18228-36-87.json GTEST_SHUFFLE=0 GTEST_TOTAL_SHARDS=87 GTEST_SHARD_INDEX=36 C:\a\lld-x86_64-win\build\unittests\Support\.\SupportTests.exe
--

Script:
--
C:\a\lld-x86_64-win\build\unittests\Support\.\SupportTests.exe --gtest_filter=ProgramEnvTest.CreateProcessLongPath
--
C:\a\lld-x86_64-win\llvm-project\llvm\unittests\Support\ProgramTest.cpp(160): error: Expected equality of these values:
  0
  RC
    Which is: -2

C:\a\lld-x86_64-win\llvm-project\llvm\unittests\Support\ProgramTest.cpp(163): error: fs::remove(Twine(LongPath)): did not return errc::success.
error number: 13
error message: permission denied



C:\a\lld-x86_64-win\llvm-project\llvm\unittests\Support\ProgramTest.cpp:160
Expected equality of these values:
  0
  RC
    Which is: -2

C:\a\lld-x86_64-win\llvm-project\llvm\unittests\Support\ProgramTest.cpp:163
fs::remove(Twine(LongPath)): did not return errc::success.
error number: 13
error message: permission denied




********************


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants