//===-- MachineLICM.cpp - Machine Loop Invariant Code Motion Pass ---------===////// The LLVM Compiler Infrastructure//// This file is distributed under the University of Illinois Open Source// License. See LICENSE.TXT for details.////===----------------------------------------------------------------------===////// This pass performs loop invariant code motion on machine instructions. We// attempt to remove as much code from the body of a loop as possible.//// This pass does not attempt to throttle itself to limit register pressure.// The register allocation phases are expected to perform rematerialization// to recover when register pressure is high.//// This pass is not intended to be a replacement or a complete alternative// for the LLVM-IR-level LICM pass. It is only designed to hoist simple// constructs that are not exposed before lowering and instruction selection.////===----------------------------------------------------------------------===//#define DEBUG_TYPE "machine-licm"#include"llvm/CodeGen/Passes.h"#include"llvm/ADT/DenseMap.h"#include"llvm/ADT/SmallSet.h"#include"llvm/ADT/Statistic.h"#include"llvm/Analysis/AliasAnalysis.h"#include"llvm/CodeGen/MachineDominators.h"#include"llvm/CodeGen/MachineFrameInfo.h"#include"llvm/CodeGen/MachineLoopInfo.h"#include"llvm/CodeGen/MachineMemOperand.h"#include"llvm/CodeGen/MachineRegisterInfo.h"#include"llvm/CodeGen/PseudoSourceValue.h"#include"llvm/MC/MCInstrItineraries.h"#include"llvm/Support/CommandLine.h"#include"llvm/Support/Debug.h"#include"llvm/Support/raw_ostream.h"#include"llvm/Target/TargetInstrInfo.h"#in