1//===- ConstantMerge.h - Merge duplicate global constants -------*- C++ -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// This file defines the interface to a pass that merges duplicate global 10// constants together into a single constant that is shared. This is useful 11// because some passes (ie TraceValues) insert a lot of string constants into 12// the program, regardless of whether or not an existing string is available. 13// 14// Algorithm: ConstantMerge is designed to build up a map of available constants 15// and eliminate duplicates when it is initialized. 16// 17//===----------------------------------------------------------------------===// 18 19#ifndef LLVM_TRANSFORMS_IPO_CONSTANTMERGE_H 20#define LLVM_TRANSFORMS_IPO_CONSTANTMERGE_H 21 22#include "llvm/IR/PassManager.h" 23 24namespace llvm { 25 26class Module; 27 28/// A pass that merges duplicate global constants into a single constant. 29class ConstantMergePass : public PassInfoMixin<ConstantMergePass> { 30public: 31 PreservedAnalyses run(Module &M, ModuleAnalysisManager &); 32}; 33 34} // end namespace llvm 35 36#endif // LLVM_TRANSFORMS_IPO_CONSTANTMERGE_H 37