//===-- BranchFolding.cpp - Fold machine code branch instructions ---------===////// The LLVM Compiler Infrastructure//// This file is distributed under the University of Illinois Open Source// License. See LICENSE.TXT for details.////===----------------------------------------------------------------------===////// This pass forwards branches to unconditional branches to make them branch// directly to the target block. This pass often results in dead MBB's, which// it then removes.//// Note that this pass must be run after register allocation, it cannot handle// SSA form.////===----------------------------------------------------------------------===//#define DEBUG_TYPE "branchfolding"#include"BranchFolding.h"#include"llvm/Function.h"#include"llvm/CodeGen/Passes.h"#include"llvm/CodeGen/MachineModuleInfo.h"#include"llvm/CodeGen/MachineFunctionPass.h"#include"llvm/CodeGen/MachineJumpTableInfo.h"#include"llvm/CodeGen/RegisterScavenging.h"#include"llvm/Target/TargetInstrInfo.h"#include"llvm/Target/TargetMachine.h"#include"llvm/Target/TargetRegisterInfo.h"#include"llvm/Support/CommandLine.h"#include"llvm/Support/Debug.h"#include"llvm/Support/ErrorHandling.h"#include"llvm/Support/raw_ostream.h"#include"llvm/ADT/SmallSet.h"#include"llvm/ADT/SetVector.h"#include"llvm/ADT/Statistic.h"#include"llvm/ADT/STLExtras.h"#include<algorithm>usingnamespacellvm;