Add skeleton of simple basic block instruction selector.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54522 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Evan Cheng 2008-08-08 07:27:28 +00:00
parent ffa45431c8
commit 381cb07544
3 changed files with 81 additions and 3 deletions

View File

@ -12,10 +12,10 @@
//===----------------------------------------------------------------------===//
#define DEBUG_TYPE "isel"
#include "llvm/CodeGen/SelectionDAGISel.h"
#include "SimpleBBISel.h"
#include "llvm/ADT/BitVector.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/CodeGen/SelectionDAGISel.h"
#include "llvm/CodeGen/ScheduleDAG.h"
#include "llvm/Constants.h"
#include "llvm/CallingConv.h"
#include "llvm/DerivedTypes.h"
@ -33,6 +33,7 @@
#include "llvm/CodeGen/MachineJumpTableInfo.h"
#include "llvm/CodeGen/MachineModuleInfo.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/ScheduleDAG.h"
#include "llvm/CodeGen/SchedulerRegistry.h"
#include "llvm/CodeGen/SelectionDAG.h"
#include "llvm/Target/TargetRegisterInfo.h"
@ -5441,11 +5442,14 @@ void SelectionDAGISel::SelectAllBasicBlocks(Function &Fn, MachineFunction &MF,
// each basic block.
NodeAllocatorType NodeAllocator;
SimpleBBISel SISel(MF, TLI);
std::vector<std::pair<MachineInstr*, unsigned> > PHINodesToUpdate;
for (Function::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I) {
BasicBlock *LLVMBB = &*I;
PHINodesToUpdate.clear();
SelectBasicBlock(LLVMBB, MF, FuncInfo, PHINodesToUpdate, NodeAllocator);
if (!FastISel || !SISel.SelectBasicBlock(LLVMBB, FuncInfo.MBBMap[LLVMBB]))
SelectBasicBlock(LLVMBB, MF, FuncInfo, PHINodesToUpdate, NodeAllocator);
FinishBasicBlock(LLVMBB, MF, FuncInfo, PHINodesToUpdate, NodeAllocator);
}
}

View File

@ -0,0 +1,29 @@
//===-- SimpleBBISel.cpp - Implement the SimpleBBISel class ---------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This implements simple basic block instruction selection. If the given
// BasicBlock is considered "simple", i.e. all operations are supported by
// the target and their types are legal, it does instruction directly from
// LLVM BasicBlock to MachineInstr's.
//
//===----------------------------------------------------------------------===//
#define DEBUG_TYPE "simple-isel"
#include "SimpleBBISel.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/SelectionDAG.h"
using namespace llvm;
/// SelectBasicBlock - Try to convert a LLVM basic block into a
/// MachineBasicBlock using simple instruction selection. Returns false if it
/// is not able to do so.
bool SimpleBBISel::SelectBasicBlock(BasicBlock *BB, MachineBasicBlock *MBB) {
return false;
}

View File

@ -0,0 +1,45 @@
//===-- SimpleBBISel.cpp - Definition of the SimpleBBISel class -----------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file defines the SimpleBBISel class which handles simple basic block
// instruction selection. If the given BasicBlock is considered "simple", i.e.
// all operations are supported by the target and their types are legal, it
// does instruction directly from LLVM BasicBlock to MachineInstr's.
//
//===----------------------------------------------------------------------===//
#ifndef SELECTIONDAG_SIMPLEBBISEL_H
#define SELECTIONDAG_SIMPLEBBISEL_H
#include "llvm/Support/Compiler.h"
namespace llvm {
class BasicBlock;
class MachineBasicBlock;
class MachineFunction;
class TargetLowering;
class VISIBILITY_HIDDEN SimpleBBISel {
MachineFunction &MF;
TargetLowering &TLI;
public:
explicit SimpleBBISel(MachineFunction &mf, TargetLowering &tli)
: MF(mf), TLI(tli) {};
/// SelectBasicBlock - Try to convert a LLVM basic block into a
/// MachineBasicBlock using simple instruction selection. Returns false if it
/// is not able to do so.
bool SelectBasicBlock(BasicBlock *BB, MachineBasicBlock *MBB);
};
} // end namespace llvm.
#endif