diff options
author | vvvv <vvvv@ydb.tech> | 2024-02-06 20:01:22 +0300 |
---|---|---|
committer | Alexander Smirnov <alex@ydb.tech> | 2024-02-09 19:18:27 +0300 |
commit | ee2b7fbda052aa09b6fdb83b8c6f0305fef3e193 (patch) | |
tree | 102765416c3866bde98a82facc7752d329ee0226 /contrib/libs/llvm16/tools/llvm-reduce/deltas/ReduceGlobalValues.cpp | |
parent | 7494ca32d3a5aca00b7ac527b5f127989335102c (diff) | |
download | ydb-ee2b7fbda052aa09b6fdb83b8c6f0305fef3e193.tar.gz |
llvm16 targets
Diffstat (limited to 'contrib/libs/llvm16/tools/llvm-reduce/deltas/ReduceGlobalValues.cpp')
-rw-r--r-- | contrib/libs/llvm16/tools/llvm-reduce/deltas/ReduceGlobalValues.cpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/contrib/libs/llvm16/tools/llvm-reduce/deltas/ReduceGlobalValues.cpp b/contrib/libs/llvm16/tools/llvm-reduce/deltas/ReduceGlobalValues.cpp new file mode 100644 index 0000000000..470d5ba97e --- /dev/null +++ b/contrib/libs/llvm16/tools/llvm-reduce/deltas/ReduceGlobalValues.cpp @@ -0,0 +1,62 @@ +//===- ReduceGlobalValues.cpp - Specialized Delta Pass --------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// This file implements a function which calls the Generic Delta pass to reduce +// global value attributes/specifiers. +// +//===----------------------------------------------------------------------===// + +#include "ReduceGlobalValues.h" +#include "llvm/IR/GlobalValue.h" + +using namespace llvm; + +static bool shouldReduceDSOLocal(GlobalValue &GV) { + return GV.isDSOLocal() && !GV.isImplicitDSOLocal(); +} + +static bool shouldReduceVisibility(GlobalValue &GV) { + return GV.getVisibility() != GlobalValue::VisibilityTypes::DefaultVisibility; +} + +static bool shouldReduceUnnamedAddress(GlobalValue &GV) { + return GV.getUnnamedAddr() != GlobalValue::UnnamedAddr::None; +} + +static bool shouldReduceDLLStorageClass(GlobalValue &GV) { + return GV.getDLLStorageClass() != + GlobalValue::DLLStorageClassTypes::DefaultStorageClass; +} + +static bool shouldReduceThreadLocal(GlobalValue &GV) { + return GV.isThreadLocal(); +} + +static void reduceGVs(Oracle &O, ReducerWorkItem &Program) { + for (auto &GV : Program.getModule().global_values()) { + if (shouldReduceDSOLocal(GV) && !O.shouldKeep()) + GV.setDSOLocal(false); + if (shouldReduceVisibility(GV) && !O.shouldKeep()) { + bool IsImplicitDSOLocal = GV.isImplicitDSOLocal(); + GV.setVisibility(GlobalValue::VisibilityTypes::DefaultVisibility); + if (IsImplicitDSOLocal) + GV.setDSOLocal(false); + } + if (shouldReduceUnnamedAddress(GV) && !O.shouldKeep()) + GV.setUnnamedAddr(GlobalValue::UnnamedAddr::None); + if (shouldReduceDLLStorageClass(GV) && !O.shouldKeep()) + GV.setDLLStorageClass( + GlobalValue::DLLStorageClassTypes::DefaultStorageClass); + if (shouldReduceThreadLocal(GV) && !O.shouldKeep()) + GV.setThreadLocal(false); + } +} + +void llvm::reduceGlobalValuesDeltaPass(TestRunner &Test) { + runDeltaPass(Test, reduceGVs, "Reducing GlobalValues"); +} |