Path: blob/master/runtime/compiler/optimizer/J9OptimizationManager.cpp
6000 views
/*******************************************************************************1* Copyright (c) 2000, 2021 IBM Corp. and others2*3* This program and the accompanying materials are made available under4* the terms of the Eclipse Public License 2.0 which accompanies this5* distribution and is available at https://www.eclipse.org/legal/epl-2.0/6* or the Apache License, Version 2.0 which accompanies this distribution and7* is available at https://www.apache.org/licenses/LICENSE-2.0.8*9* This Source Code may also be made available under the following10* Secondary Licenses when the conditions for such availability set11* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU12* General Public License, version 2 with the GNU Classpath13* Exception [1] and GNU General Public License, version 2 with the14* OpenJDK Assembly Exception [2].15*16* [1] https://www.gnu.org/software/classpath/license.html17* [2] http://openjdk.java.net/legal/assembly-exception.html18*19* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception20*******************************************************************************/2122#include "optimizer/OptimizationManager.hpp"23#include "optimizer/OptimizationManager_inlines.hpp"2425#include "codegen/CodeGenerator.hpp"26#include "env/FrontEnd.hpp"27#include "compile/Compilation.hpp"28#include "compile/CompilationTypes.hpp"29#include "compile/Method.hpp"30#include "control/Options.hpp"31#include "control/Options_inlines.hpp"32#include "env/CompilerEnv.hpp"33#include "il/DataTypes.hpp"34#include "il/ResolvedMethodSymbol.hpp"35#include "infra/Flags.hpp"36#include "optimizer/Optimizations.hpp"373839namespace TR { class Optimizer; }40struct OptimizationStrategy;4142J9::OptimizationManager::OptimizationManager(TR::Optimizer *o, OptimizationFactory factory, OMR::Optimizations optNum, const OptimizationStrategy *groupOfOpts)43: OMR::OptimizationManager(o, factory, optNum, groupOfOpts)44{45// set flags if necessary46switch (self()->id())47{48case OMR::dynamicLiteralPool:49_flags.set(doesNotRequireAliasSets);50break;51case OMR::redundantMonitorElimination:52_flags.set(requiresStructure | requiresLocalsValueNumbering);53break;54case OMR::escapeAnalysis:55_flags.set(requiresStructure | checkStructure | dumpStructure |56requiresLocalsUseDefInfo | requiresLocalsValueNumbering | cannotOmitTrivialDefs);57break;58case OMR::globalLiveVariablesForGC:59_flags.set(requiresStructure);60break;61case OMR::recompilationModifier:62if (self()->comp()->getMethodHotness() > cold)63self()->setRequiresStructure(true);64break;65case OMR::dataAccessAccelerator:66_flags.set(doesNotRequireAliasSets | supportsIlGenOptLevel);67break;68case OMR::stringBuilderTransformer:69_flags.set(doesNotRequireAliasSets | supportsIlGenOptLevel);70break;71case OMR::stringPeepholes:72_flags.set(doesNotRequireAliasSets | supportsIlGenOptLevel);73break;74case OMR::switchAnalyzer:75_flags.set(checkTheCFG);76break;77case OMR::idiomRecognition:78_flags.set(requiresStructure | checkStructure | dumpStructure |79requiresLocalsUseDefInfo | requiresLocalsValueNumbering);80if (self()->comp()->getMethodHotness() >= warm)81_flags.set(requiresLocalsUseDefInfo | doesNotRequireLoadsAsDefs);82break;83case OMR::loopAliasRefiner:84_flags.set(requiresStructure | checkStructure | dumpStructure);85self()->setDoesNotRequireAliasSets(false);86break;87case OMR::allocationSinking:88_flags.set(doesNotRequireAliasSets | supportsIlGenOptLevel);89break;90case OMR::varHandleTransformer:91_flags.set(doesNotRequireAliasSets | supportsIlGenOptLevel);92break;93case OMR::methodHandleTransformer:94_flags.set(doesNotRequireAliasSets | supportsIlGenOptLevel);95break;96case OMR::unsafeFastPath:97_flags.set(doesNotRequireAliasSets | supportsIlGenOptLevel);98break;99case OMR::recognizedCallTransformer:100_flags.set(doesNotRequireAliasSets | supportsIlGenOptLevel);101break;102case OMR::samplingJProfiling:103_flags.set(requiresStructure | checkStructure | dumpStructure);104break;105case OMR::SPMDKernelParallelization:106_flags.set(requiresLocalsUseDefInfo | doesNotRequireLoadsAsDefs | requiresLocalsValueNumbering);107break;108case OMR::osrGuardInsertion:109_flags.set(doNotSetFrequencies);110break;111case OMR::osrGuardRemoval:112_flags.set(requiresStructure);113break;114case OMR::osrExceptionEdgeRemoval:115_flags.set(doesNotRequireAliasSets);116break;117case OMR::jProfilingBlock:118_flags.set(doesNotRequireAliasSets);119break;120case OMR::jProfilingRecompLoopTest:121_flags.set(requiresStructure);122break;123case OMR::handleRecompilationOps:124_flags.set(doesNotRequireAliasSets | supportsIlGenOptLevel);125break;126default:127// do nothing128break;129}130}131132133