[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