From: Arthur Eubanks Date: Mon, 17 Jul 2023 22:37:20 +0000 (-0700) Subject: [llvm-reduce] Reduce global value linkage X-Git-Tag: upstream/17.0.6~1443 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f2ab8f43800ff14051213bff40d35406691f29b0;p=platform%2Fupstream%2Fllvm.git [llvm-reduce] Reduce global value linkage --- diff --git a/llvm/test/tools/llvm-reduce/reduce-linkage.ll b/llvm/test/tools/llvm-reduce/reduce-linkage.ll new file mode 100644 index 0000000..e7f3524 --- /dev/null +++ b/llvm/test/tools/llvm-reduce/reduce-linkage.ll @@ -0,0 +1,22 @@ +; Test that llvm-reduce can remove function linkage. +; +; RUN: llvm-reduce --abort-on-invalid-reduction --delta-passes=global-values --test FileCheck --test-arg --check-prefixes=CHECK-INTERESTINGNESS --test-arg %s --test-arg --input-file %s -o %t +; RUN: FileCheck --check-prefix=CHECK-FINAL --implicit-check-not=internal %s < %t + +; CHECK-INTERESTINGNESS: define +; CHECK-INTERESTINGNESS-SAME: void @f + +; CHECK-FINAL: define void @f() + +define void @f() { + ret void +} + +; CHECK-INTERESTINGNESS: define +; CHECK-INTERESTINGNESS-SAME: void @g + +; CHECK-FINAL: define void @g() + +define internal void @g() { + ret void +} diff --git a/llvm/tools/llvm-reduce/deltas/ReduceGlobalValues.cpp b/llvm/tools/llvm-reduce/deltas/ReduceGlobalValues.cpp index 470d5ba..224fe9c 100644 --- a/llvm/tools/llvm-reduce/deltas/ReduceGlobalValues.cpp +++ b/llvm/tools/llvm-reduce/deltas/ReduceGlobalValues.cpp @@ -37,6 +37,10 @@ static bool shouldReduceThreadLocal(GlobalValue &GV) { return GV.isThreadLocal(); } +static bool shouldReduceLinkage(GlobalValue &GV) { + return !GV.hasExternalLinkage(); +} + static void reduceGVs(Oracle &O, ReducerWorkItem &Program) { for (auto &GV : Program.getModule().global_values()) { if (shouldReduceDSOLocal(GV) && !O.shouldKeep()) @@ -54,6 +58,12 @@ static void reduceGVs(Oracle &O, ReducerWorkItem &Program) { GlobalValue::DLLStorageClassTypes::DefaultStorageClass); if (shouldReduceThreadLocal(GV) && !O.shouldKeep()) GV.setThreadLocal(false); + if (shouldReduceLinkage(GV) && !O.shouldKeep()) { + bool IsImplicitDSOLocal = GV.isImplicitDSOLocal(); + GV.setLinkage(GlobalValue::ExternalLinkage); + if (IsImplicitDSOLocal) + GV.setDSOLocal(false); + } } }