mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-07 20:04:03 +00:00
Add skeleton of simple basic block instruction selector.
llvm-svn: 54522
This commit is contained in:
parent
732ffeba9e
commit
cc7944b919
@ -12,10 +12,10 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#define DEBUG_TYPE "isel"
|
#define DEBUG_TYPE "isel"
|
||||||
|
#include "llvm/CodeGen/SelectionDAGISel.h"
|
||||||
|
#include "SimpleBBISel.h"
|
||||||
#include "llvm/ADT/BitVector.h"
|
#include "llvm/ADT/BitVector.h"
|
||||||
#include "llvm/Analysis/AliasAnalysis.h"
|
#include "llvm/Analysis/AliasAnalysis.h"
|
||||||
#include "llvm/CodeGen/SelectionDAGISel.h"
|
|
||||||
#include "llvm/CodeGen/ScheduleDAG.h"
|
|
||||||
#include "llvm/Constants.h"
|
#include "llvm/Constants.h"
|
||||||
#include "llvm/CallingConv.h"
|
#include "llvm/CallingConv.h"
|
||||||
#include "llvm/DerivedTypes.h"
|
#include "llvm/DerivedTypes.h"
|
||||||
@ -33,6 +33,7 @@
|
|||||||
#include "llvm/CodeGen/MachineJumpTableInfo.h"
|
#include "llvm/CodeGen/MachineJumpTableInfo.h"
|
||||||
#include "llvm/CodeGen/MachineModuleInfo.h"
|
#include "llvm/CodeGen/MachineModuleInfo.h"
|
||||||
#include "llvm/CodeGen/MachineRegisterInfo.h"
|
#include "llvm/CodeGen/MachineRegisterInfo.h"
|
||||||
|
#include "llvm/CodeGen/ScheduleDAG.h"
|
||||||
#include "llvm/CodeGen/SchedulerRegistry.h"
|
#include "llvm/CodeGen/SchedulerRegistry.h"
|
||||||
#include "llvm/CodeGen/SelectionDAG.h"
|
#include "llvm/CodeGen/SelectionDAG.h"
|
||||||
#include "llvm/Target/TargetRegisterInfo.h"
|
#include "llvm/Target/TargetRegisterInfo.h"
|
||||||
@ -5441,11 +5442,14 @@ void SelectionDAGISel::SelectAllBasicBlocks(Function &Fn, MachineFunction &MF,
|
|||||||
// each basic block.
|
// each basic block.
|
||||||
NodeAllocatorType NodeAllocator;
|
NodeAllocatorType NodeAllocator;
|
||||||
|
|
||||||
|
SimpleBBISel SISel(MF, TLI);
|
||||||
std::vector<std::pair<MachineInstr*, unsigned> > PHINodesToUpdate;
|
std::vector<std::pair<MachineInstr*, unsigned> > PHINodesToUpdate;
|
||||||
for (Function::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I) {
|
for (Function::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I) {
|
||||||
BasicBlock *LLVMBB = &*I;
|
BasicBlock *LLVMBB = &*I;
|
||||||
PHINodesToUpdate.clear();
|
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);
|
FinishBasicBlock(LLVMBB, MF, FuncInfo, PHINodesToUpdate, NodeAllocator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
29
lib/CodeGen/SelectionDAG/SimpleBBISel.cpp
Normal file
29
lib/CodeGen/SelectionDAG/SimpleBBISel.cpp
Normal 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;
|
||||||
|
}
|
45
lib/CodeGen/SelectionDAG/SimpleBBISel.h
Normal file
45
lib/CodeGen/SelectionDAG/SimpleBBISel.h
Normal 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
|
Loading…
Reference in New Issue
Block a user