[llvm] 80ba72b - [llvm-reduce] Reduce some GlobalObject properties

Arthur Eubanks via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 2 08:48:20 PDT 2021


Author: Arthur Eubanks
Date: 2021-11-02T08:47:32-07:00
New Revision: 80ba72b07bafa0e123259e780eb24411a8300d68

URL: https://github.com/llvm/llvm-project/commit/80ba72b07bafa0e123259e780eb24411a8300d68
DIFF: https://github.com/llvm/llvm-project/commit/80ba72b07bafa0e123259e780eb24411a8300d68.diff

LOG: [llvm-reduce] Reduce some GlobalObject properties

Specifically, the section and the alignment.

Reviewed By: hans

Differential Revision: https://reviews.llvm.org/D112884

Added: 
    llvm/test/tools/llvm-reduce/remove-global-align.ll
    llvm/test/tools/llvm-reduce/remove-section.ll
    llvm/tools/llvm-reduce/deltas/ReduceGlobalObjects.cpp
    llvm/tools/llvm-reduce/deltas/ReduceGlobalObjects.h

Modified: 
    llvm/tools/llvm-reduce/CMakeLists.txt
    llvm/tools/llvm-reduce/DeltaManager.cpp
    llvm/utils/gn/secondary/llvm/tools/llvm-reduce/BUILD.gn

Removed: 
    


################################################################################
diff  --git a/llvm/test/tools/llvm-reduce/remove-global-align.ll b/llvm/test/tools/llvm-reduce/remove-global-align.ll
new file mode 100644
index 000000000000..7f7bb466f9e8
--- /dev/null
+++ b/llvm/test/tools/llvm-reduce/remove-global-align.ll
@@ -0,0 +1,17 @@
+; RUN: llvm-reduce --delta-passes=global-objects --abort-on-invalid-reduction --test FileCheck --test-arg --check-prefixes=INTERESTINGNESS --test-arg %s --test-arg --input-file %s -o %t
+; RUN: FileCheck --check-prefix=FINAL %s --input-file=%t
+
+; INTERESTINGNESS: @b = global i32
+; FINAL: @b = global i32 0{{$}}
+
+ at b = global i32 0, align 4
+
+; INTERESTINGNESS: define {{.*}} @f
+; FINAL: define void @f() {
+define void @f() align 4 {
+  ret void
+}
+
+; INTERESTINGNESS: declare {{.*}} @h
+; FINAL: declare void @h(){{$}}
+declare void @h() align 4

diff  --git a/llvm/test/tools/llvm-reduce/remove-section.ll b/llvm/test/tools/llvm-reduce/remove-section.ll
new file mode 100644
index 000000000000..462b450decb2
--- /dev/null
+++ b/llvm/test/tools/llvm-reduce/remove-section.ll
@@ -0,0 +1,17 @@
+; RUN: llvm-reduce --delta-passes=global-objects --abort-on-invalid-reduction --test FileCheck --test-arg --check-prefixes=INTERESTINGNESS --test-arg %s --test-arg --input-file %s -o %t
+; RUN: FileCheck --check-prefix=FINAL %s --input-file=%t
+
+; INTERESTINGNESS: @a = global i32
+; FINAL: @a = global i32 0{{$}}
+
+ at a = global i32 0, section "hi"
+
+; INTERESTINGNESS: define {{.*}} @f
+; FINAL: define void @f() {
+define void @f() section "hello" {
+  ret void
+}
+
+; INTERESTINGNESS: declare {{.*}} @g
+; FINAL: declare void @g(){{$}}
+declare void @g() section "hello"

diff  --git a/llvm/tools/llvm-reduce/CMakeLists.txt b/llvm/tools/llvm-reduce/CMakeLists.txt
index 9c60dc1e4ee2..911cb6a94eae 100644
--- a/llvm/tools/llvm-reduce/CMakeLists.txt
+++ b/llvm/tools/llvm-reduce/CMakeLists.txt
@@ -24,6 +24,7 @@ add_llvm_tool(llvm-reduce
   deltas/ReduceBasicBlocks.cpp
   deltas/ReduceFunctionBodies.cpp
   deltas/ReduceFunctions.cpp
+  deltas/ReduceGlobalObjects.cpp
   deltas/ReduceGlobalValues.cpp
   deltas/ReduceGlobalVarInitializers.cpp
   deltas/ReduceGlobalVars.cpp

diff  --git a/llvm/tools/llvm-reduce/DeltaManager.cpp b/llvm/tools/llvm-reduce/DeltaManager.cpp
index 8dd16b046cb0..8c2ad91d7bcd 100644
--- a/llvm/tools/llvm-reduce/DeltaManager.cpp
+++ b/llvm/tools/llvm-reduce/DeltaManager.cpp
@@ -20,6 +20,7 @@
 #include "deltas/ReduceBasicBlocks.h"
 #include "deltas/ReduceFunctionBodies.h"
 #include "deltas/ReduceFunctions.h"
+#include "deltas/ReduceGlobalObjects.h"
 #include "deltas/ReduceGlobalValues.h"
 #include "deltas/ReduceGlobalVarInitializers.h"
 #include "deltas/ReduceGlobalVars.h"
@@ -47,6 +48,7 @@ static cl::opt<std::string>
   DELTA_PASS("functions", reduceFunctionsDeltaPass)                            \
   DELTA_PASS("basic-blocks", reduceBasicBlocksDeltaPass)                       \
   DELTA_PASS("global-values", reduceGlobalValuesDeltaPass)                     \
+  DELTA_PASS("global-objects", reduceGlobalObjectsDeltaPass)                   \
   DELTA_PASS("global-initializers", reduceGlobalsInitializersDeltaPass)        \
   DELTA_PASS("global-variables", reduceGlobalsDeltaPass)                       \
   DELTA_PASS("metadata", reduceMetadataDeltaPass)                              \

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceGlobalObjects.cpp b/llvm/tools/llvm-reduce/deltas/ReduceGlobalObjects.cpp
new file mode 100644
index 000000000000..cd7627309b55
--- /dev/null
+++ b/llvm/tools/llvm-reduce/deltas/ReduceGlobalObjects.cpp
@@ -0,0 +1,43 @@
+//===- ReduceGlobalObjects.cpp --------------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "ReduceGlobalObjects.h"
+#include "llvm/IR/GlobalObject.h"
+
+using namespace llvm;
+
+static bool shouldReduceSection(GlobalObject &GO) { return GO.hasSection(); }
+
+static bool shouldReduceAlign(GlobalObject &GO) {
+  return GO.getAlign().hasValue();
+}
+
+static void reduceGOs(Oracle &O, Module &Program) {
+  for (auto &GO : Program.global_objects()) {
+    if (shouldReduceSection(GO) && !O.shouldKeep())
+      GO.setSection("");
+    if (shouldReduceAlign(GO) && !O.shouldKeep())
+      GO.setAlignment(MaybeAlign());
+  }
+}
+
+static int countGOs(Module &Program) {
+  int SectionCount = count_if(Program.global_objects(), [](GlobalObject &GO) {
+    return shouldReduceSection(GO);
+  });
+  int AlignCount = count_if(Program.global_objects(), [](GlobalObject &GO) {
+    return shouldReduceAlign(GO);
+  });
+  return SectionCount + AlignCount;
+}
+
+void llvm::reduceGlobalObjectsDeltaPass(TestRunner &Test) {
+  outs() << "*** Reducing GlobalObjects...\n";
+  int GVCount = countGOs(Test.getProgram());
+  runDeltaPass(Test, GVCount, reduceGOs);
+}

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceGlobalObjects.h b/llvm/tools/llvm-reduce/deltas/ReduceGlobalObjects.h
new file mode 100644
index 000000000000..7224b9bfbd5f
--- /dev/null
+++ b/llvm/tools/llvm-reduce/deltas/ReduceGlobalObjects.h
@@ -0,0 +1,18 @@
+//===- ReduceGlobalObjects.h ----------------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TOOLS_LLVM_REDUCE_DELTAS_REDUCEGLOBALOBJECTS_H
+#define LLVM_TOOLS_LLVM_REDUCE_DELTAS_REDUCEGLOBALOBJECTS_H
+
+#include "Delta.h"
+
+namespace llvm {
+void reduceGlobalObjectsDeltaPass(TestRunner &Test);
+} // namespace llvm
+
+#endif

diff  --git a/llvm/utils/gn/secondary/llvm/tools/llvm-reduce/BUILD.gn b/llvm/utils/gn/secondary/llvm/tools/llvm-reduce/BUILD.gn
index faa0f7e33c78..e87bff3ea66c 100644
--- a/llvm/utils/gn/secondary/llvm/tools/llvm-reduce/BUILD.gn
+++ b/llvm/utils/gn/secondary/llvm/tools/llvm-reduce/BUILD.gn
@@ -20,6 +20,7 @@ executable("llvm-reduce") {
     "deltas/ReduceBasicBlocks.cpp",
     "deltas/ReduceFunctionBodies.cpp",
     "deltas/ReduceFunctions.cpp",
+    "deltas/ReduceGlobalObjects.cpp",
     "deltas/ReduceGlobalValues.cpp",
     "deltas/ReduceGlobalVarInitializers.cpp",
     "deltas/ReduceGlobalVars.cpp",


        


More information about the llvm-commits mailing list