From: Arthur Eubanks Date: Mon, 17 Oct 2022 05:10:58 +0000 (-0700) Subject: [llvm-reduce] Reduce comdats X-Git-Tag: upstream/17.0.6~30342 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6ae63c90cec0517afe3e7c7c11f9d73061abe3f7;p=platform%2Fupstream%2Fllvm.git [llvm-reduce] Reduce comdats Reviewed By: arsenm Differential Revision: https://reviews.llvm.org/D136054 --- diff --git a/llvm/test/tools/llvm-reduce/remove-comdat.ll b/llvm/test/tools/llvm-reduce/remove-comdat.ll new file mode 100644 index 0000000..d645384 --- /dev/null +++ b/llvm/test/tools/llvm-reduce/remove-comdat.ll @@ -0,0 +1,29 @@ +; RUN: llvm-reduce --abort-on-invalid-reduction --delta-passes=global-objects --test FileCheck --test-arg --check-prefixes=CHECK-INTERESTINGNESS --test-arg %s --test-arg --input-file %s -o %t +; RUN: FileCheck --check-prefix=CHECK-FINAL %s --input-file=%t + +; CHECK-INTERESTINGNESS: define void @f +; CHECK-INTERESTINGNESS: define void @g +; CHECK-INTERESTINGNESS: define void @i{{.*}} comdat + +; CHECK-FINAL-NOT: $f +; CHECK-FINAL-NOT: $h +; CHECK-FINAL: $i = comdat +; CHECK-FINAL: define void @f() { +; CHECK-FINAL: define void @g() { +; CHECK-FINAL: define void @i() comdat { + +$f = comdat any +$h = comdat any +$i = comdat any + +define void @f() comdat { + ret void +} + +define void @g() comdat($h) { + ret void +} + +define void @i() comdat { + ret void +} diff --git a/llvm/tools/llvm-reduce/deltas/ReduceGlobalObjects.cpp b/llvm/tools/llvm-reduce/deltas/ReduceGlobalObjects.cpp index 33ec3ae..1a95260 100644 --- a/llvm/tools/llvm-reduce/deltas/ReduceGlobalObjects.cpp +++ b/llvm/tools/llvm-reduce/deltas/ReduceGlobalObjects.cpp @@ -17,12 +17,16 @@ static bool shouldReduceAlign(GlobalObject &GO) { return GO.getAlign().has_value(); } +static bool shouldReduceComdat(GlobalObject &GO) { return GO.hasComdat(); } + 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()); + if (shouldReduceComdat(GO) && !O.shouldKeep()) + GO.setComdat(nullptr); } }