@@ -41,18 +41,13 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
4141
4242#define DEBUG_TYPE " cmabi"
4343
44- #include " llvmWrapper/Analysis/CallGraph.h"
4544#include " llvmWrapper/IR/CallSite.h"
45+ #include " llvmWrapper/Support/Alignment.h"
4646#include " llvmWrapper/IR/DerivedTypes.h"
4747#include " llvmWrapper/IR/Instructions.h"
48- #include " llvmWrapper/Support/Alignment.h"
49-
50- #include " Probe/Assertion.h"
5148
5249#include " vc/GenXOpts/GenXOpts.h"
5350#include " vc/GenXOpts/Utils/GenXSTLExtras.h"
54- #include " vc/Support/BackendConfig.h"
55-
5651#include " llvm/ADT/DenseMap.h"
5752#include " llvm/ADT/PostOrderIterator.h"
5853#include " llvm/ADT/SCCIterator.h"
@@ -81,6 +76,9 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
8176#include " llvm/Support/raw_ostream.h"
8277#include " llvm/Transforms/Scalar.h"
8378
79+ #include " llvmWrapper/Analysis/CallGraph.h"
80+ #include " Probe/Assertion.h"
81+
8482#include < algorithm>
8583#include < iterator>
8684#include < numeric>
@@ -91,6 +89,13 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
9189
9290using namespace llvm ;
9391
92+ using LocalizationLimitT = int32_t ;
93+ static constexpr auto LocalizeAll = std::numeric_limits<LocalizationLimitT>::max();
94+ static cl::opt<LocalizationLimitT>
95+ LocalizationLimit (" cm-abi-issues-localization-limit" ,
96+ cl::desc (" maximum size (in bytes) used to localize global variables" ),
97+ cl::init(LocalizeAll));
98+
9499STATISTIC (NumArgumentsTransformed, " Number of pointer arguments transformed" );
95100
96101// FIXME: find a propper place for addrspace enum, agree on addrspace politics
@@ -248,7 +253,6 @@ int DiagnosticInfoOverlappingArgs::KindID = 0;
248253class CMABIAnalysis : public ModulePass {
249254 // This map captures all global variables to be localized.
250255 std::vector<LocalizationInfo *> LocalizationInfoObjs;
251- GlobalsLocalizationConfig::LimitT GlobalsLocalizationLimit;
252256
253257public:
254258 static char ID;
@@ -263,7 +267,6 @@ class CMABIAnalysis : public ModulePass {
263267
264268 void getAnalysisUsage (AnalysisUsage &AU) const override {
265269 AU.addRequired <CallGraphWrapperPass>();
266- AU.addRequired <GenXBackendConfig>();
267270 AU.setPreservesAll ();
268271 }
269272
@@ -356,25 +359,10 @@ char CMABIAnalysis::ID = 0;
356359INITIALIZE_PASS_BEGIN (CMABIAnalysis, " cmabi-analysis" ,
357360 " helper analysis pass to get info for CMABI" , false , true )
358361INITIALIZE_PASS_DEPENDENCY(CallGraphWrapperPass)
359- INITIALIZE_PASS_DEPENDENCY(GenXBackendConfig)
360362INITIALIZE_PASS_END(CMABIAnalysis, " cmabi-analysis" ,
361363 " Fix ABI issues for the genx backend" , false , true )
362364
363- static std::size_t
364- defineGlobalsLocalizationLimit(const GenXBackendConfig &Config) {
365- if (Config.isGlobalsLocalizationForced ())
366- return GlobalsLocalizationConfig::NoLimit;
367-
368- // Half of a size of standard GenX register file in bytes.
369- // 128 * 32 / 2
370- constexpr std::size_t HalfGRF = 2048 ;
371- std::size_t Limit = Config.getGlobalsLocalizationLimit ();
372- return std::min (Limit, HalfGRF);
373- }
374-
375365bool CMABIAnalysis::runOnModule(Module &M) {
376- GlobalsLocalizationLimit =
377- defineGlobalsLocalizationLimit (getAnalysis<GenXBackendConfig>());
378366 runOnCallGraph (getAnalysis<CallGraphWrapperPass>().getCallGraph ());
379367 return false ;
380368}
@@ -414,7 +402,7 @@ auto selectGlobalsToLocalize(ForwardRange Globals, T Bound,
414402 Globals, [ExcludePred](GVRef GV) { return !ExcludePred (GV); });
415403 using GVWithWeightT = std::pair<GVPtr, int >;
416404
417- if (Bound == GlobalsLocalizationConfig::NoLimit ) {
405+ if (Bound == LocalizeAll ) {
418406 std::vector<GVPtr> ToLocalize;
419407 transform (Unexcluded, std::back_inserter (ToLocalize),
420408 [](GVRef GV) { return &GV; });
@@ -1962,7 +1950,7 @@ void CMABIAnalysis::analyzeGlobals(CallGraph &CG) {
19621950 };
19631951 const auto &DL = M.getDataLayout ();
19641952 std::vector<GlobalVariable *> ToLocalize = selectGlobalsToLocalize (
1965- M.globals (), GlobalsLocalizationLimit ,
1953+ M.globals (), LocalizationLimit. getValue () ,
19661954 [UsesPrintChecker](const GlobalVariable &GV) {
19671955 // don't localize global constant format string if it's used by print_index intrinsic
19681956 bool UsesPrintIndex = std::any_of (GV.use_begin (), GV.use_end (), UsesPrintChecker);
0 commit comments