mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-21 23:17:16 +00:00
Move TargetData to DataLayout.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165402 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -39,7 +39,7 @@
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/NoFolder.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include "llvm/Target/TargetData.h"
|
||||
#include "llvm/DataLayout.h"
|
||||
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
|
||||
#include <algorithm>
|
||||
#include <set>
|
||||
@@ -79,7 +79,7 @@ namespace {
|
||||
};
|
||||
|
||||
class SimplifyCFGOpt {
|
||||
const TargetData *const TD;
|
||||
const DataLayout *const TD;
|
||||
|
||||
Value *isValueEqualityComparison(TerminatorInst *TI);
|
||||
BasicBlock *GetValueEqualityComparisonCases(TerminatorInst *TI,
|
||||
@@ -99,7 +99,7 @@ class SimplifyCFGOpt {
|
||||
bool SimplifyCondBranch(BranchInst *BI, IRBuilder <>&Builder);
|
||||
|
||||
public:
|
||||
explicit SimplifyCFGOpt(const TargetData *td) : TD(td) {}
|
||||
explicit SimplifyCFGOpt(const DataLayout *td) : TD(td) {}
|
||||
bool run(BasicBlock *BB);
|
||||
};
|
||||
}
|
||||
@@ -382,7 +382,7 @@ static bool DominatesMergePoint(Value *V, BasicBlock *BB,
|
||||
|
||||
/// GetConstantInt - Extract ConstantInt from value, looking through IntToPtr
|
||||
/// and PointerNullValue. Return NULL if value is not a constant int.
|
||||
static ConstantInt *GetConstantInt(Value *V, const TargetData *TD) {
|
||||
static ConstantInt *GetConstantInt(Value *V, const DataLayout *TD) {
|
||||
// Normal constant int.
|
||||
ConstantInt *CI = dyn_cast<ConstantInt>(V);
|
||||
if (CI || !TD || !isa<Constant>(V) || !V->getType()->isPointerTy())
|
||||
@@ -416,7 +416,7 @@ static ConstantInt *GetConstantInt(Value *V, const TargetData *TD) {
|
||||
/// Values vector.
|
||||
static Value *
|
||||
GatherConstantCompares(Value *V, std::vector<ConstantInt*> &Vals, Value *&Extra,
|
||||
const TargetData *TD, bool isEQ, unsigned &UsedICmps) {
|
||||
const DataLayout *TD, bool isEQ, unsigned &UsedICmps) {
|
||||
Instruction *I = dyn_cast<Instruction>(V);
|
||||
if (I == 0) return 0;
|
||||
|
||||
@@ -982,7 +982,7 @@ bool SimplifyCFGOpt::FoldValueComparisonIntoPredecessors(TerminatorInst *TI,
|
||||
Builder.SetInsertPoint(PTI);
|
||||
// Convert pointer to int before we switch.
|
||||
if (CV->getType()->isPointerTy()) {
|
||||
assert(TD && "Cannot switch on pointer without TargetData");
|
||||
assert(TD && "Cannot switch on pointer without DataLayout");
|
||||
CV = Builder.CreatePtrToInt(CV, TD->getIntPtrType(CV->getContext()),
|
||||
"magicptr");
|
||||
}
|
||||
@@ -1510,7 +1510,7 @@ static bool BlockIsSimpleEnoughToThreadThrough(BasicBlock *BB) {
|
||||
/// that is defined in the same block as the branch and if any PHI entries are
|
||||
/// constants, thread edges corresponding to that entry to be branches to their
|
||||
/// ultimate destination.
|
||||
static bool FoldCondBranchOnPHI(BranchInst *BI, const TargetData *TD) {
|
||||
static bool FoldCondBranchOnPHI(BranchInst *BI, const DataLayout *TD) {
|
||||
BasicBlock *BB = BI->getParent();
|
||||
PHINode *PN = dyn_cast<PHINode>(BI->getCondition());
|
||||
// NOTE: we currently cannot transform this case if the PHI node is used
|
||||
@@ -1606,7 +1606,7 @@ static bool FoldCondBranchOnPHI(BranchInst *BI, const TargetData *TD) {
|
||||
|
||||
/// FoldTwoEntryPHINode - Given a BB that starts with the specified two-entry
|
||||
/// PHI node, see if we can eliminate it.
|
||||
static bool FoldTwoEntryPHINode(PHINode *PN, const TargetData *TD) {
|
||||
static bool FoldTwoEntryPHINode(PHINode *PN, const DataLayout *TD) {
|
||||
// Ok, this is a two entry PHI node. Check to see if this is a simple "if
|
||||
// statement", which has a very simple dominance structure. Basically, we
|
||||
// are trying to find the condition that is being branched on, which
|
||||
@@ -2522,7 +2522,7 @@ static bool SimplifyIndirectBrOnSelect(IndirectBrInst *IBI, SelectInst *SI) {
|
||||
/// We prefer to split the edge to 'end' so that there is a true/false entry to
|
||||
/// the PHI, merging the third icmp into the switch.
|
||||
static bool TryToSimplifyUncondBranchWithICmpInIt(ICmpInst *ICI,
|
||||
const TargetData *TD,
|
||||
const DataLayout *TD,
|
||||
IRBuilder<> &Builder) {
|
||||
BasicBlock *BB = ICI->getParent();
|
||||
|
||||
@@ -2628,7 +2628,7 @@ static bool TryToSimplifyUncondBranchWithICmpInIt(ICmpInst *ICI,
|
||||
/// SimplifyBranchOnICmpChain - The specified branch is a conditional branch.
|
||||
/// Check to see if it is branching on an or/and chain of icmp instructions, and
|
||||
/// fold it into a switch instruction if so.
|
||||
static bool SimplifyBranchOnICmpChain(BranchInst *BI, const TargetData *TD,
|
||||
static bool SimplifyBranchOnICmpChain(BranchInst *BI, const DataLayout *TD,
|
||||
IRBuilder<> &Builder) {
|
||||
Instruction *Cond = dyn_cast<Instruction>(BI->getCondition());
|
||||
if (Cond == 0) return false;
|
||||
@@ -2709,7 +2709,7 @@ static bool SimplifyBranchOnICmpChain(BranchInst *BI, const TargetData *TD,
|
||||
Builder.SetInsertPoint(BI);
|
||||
// Convert pointer to int before we switch.
|
||||
if (CompVal->getType()->isPointerTy()) {
|
||||
assert(TD && "Cannot switch on pointer without TargetData");
|
||||
assert(TD && "Cannot switch on pointer without DataLayout");
|
||||
CompVal = Builder.CreatePtrToInt(CompVal,
|
||||
TD->getIntPtrType(CompVal->getContext()),
|
||||
"magicptr");
|
||||
@@ -3258,7 +3258,7 @@ namespace {
|
||||
ConstantInt *Offset,
|
||||
const SmallVector<std::pair<ConstantInt*, Constant*>, 4>& Values,
|
||||
Constant *DefaultValue,
|
||||
const TargetData *TD);
|
||||
const DataLayout *TD);
|
||||
|
||||
/// BuildLookup - Build instructions with Builder to retrieve the value at
|
||||
/// the position given by Index in the lookup table.
|
||||
@@ -3266,7 +3266,7 @@ namespace {
|
||||
|
||||
/// WouldFitInRegister - Return true if a table with TableSize elements of
|
||||
/// type ElementType would fit in a target-legal register.
|
||||
static bool WouldFitInRegister(const TargetData *TD,
|
||||
static bool WouldFitInRegister(const DataLayout *TD,
|
||||
uint64_t TableSize,
|
||||
const Type *ElementType);
|
||||
|
||||
@@ -3305,7 +3305,7 @@ SwitchLookupTable::SwitchLookupTable(Module &M,
|
||||
ConstantInt *Offset,
|
||||
const SmallVector<std::pair<ConstantInt*, Constant*>, 4>& Values,
|
||||
Constant *DefaultValue,
|
||||
const TargetData *TD) {
|
||||
const DataLayout *TD) {
|
||||
assert(Values.size() && "Can't build lookup table without values!");
|
||||
assert(TableSize >= Values.size() && "Can't fit values in table!");
|
||||
|
||||
@@ -3411,7 +3411,7 @@ Value *SwitchLookupTable::BuildLookup(Value *Index, IRBuilder<> &Builder) {
|
||||
llvm_unreachable("Unknown lookup table kind!");
|
||||
}
|
||||
|
||||
bool SwitchLookupTable::WouldFitInRegister(const TargetData *TD,
|
||||
bool SwitchLookupTable::WouldFitInRegister(const DataLayout *TD,
|
||||
uint64_t TableSize,
|
||||
const Type *ElementType) {
|
||||
if (!TD)
|
||||
@@ -3433,7 +3433,7 @@ bool SwitchLookupTable::WouldFitInRegister(const TargetData *TD,
|
||||
/// types of the results.
|
||||
static bool ShouldBuildLookupTable(SwitchInst *SI,
|
||||
uint64_t TableSize,
|
||||
const TargetData *TD,
|
||||
const DataLayout *TD,
|
||||
const SmallDenseMap<PHINode*, Type*>& ResultTypes) {
|
||||
// The table density should be at least 40%. This is the same criterion as for
|
||||
// jump tables, see SelectionDAGBuilder::handleJTSwitchCase.
|
||||
@@ -3457,7 +3457,7 @@ static bool ShouldBuildLookupTable(SwitchInst *SI,
|
||||
/// replace the switch with lookup tables.
|
||||
static bool SwitchToLookupTable(SwitchInst *SI,
|
||||
IRBuilder<> &Builder,
|
||||
const TargetData* TD) {
|
||||
const DataLayout* TD) {
|
||||
assert(SI->getNumCases() > 1 && "Degenerate switch?");
|
||||
// FIXME: Handle unreachable cases.
|
||||
|
||||
@@ -3916,6 +3916,6 @@ bool SimplifyCFGOpt::run(BasicBlock *BB) {
|
||||
/// eliminates unreachable basic blocks, and does other "peephole" optimization
|
||||
/// of the CFG. It returns true if a modification was made.
|
||||
///
|
||||
bool llvm::SimplifyCFG(BasicBlock *BB, const TargetData *TD) {
|
||||
bool llvm::SimplifyCFG(BasicBlock *BB, const DataLayout *TD) {
|
||||
return SimplifyCFGOpt(TD).run(BB);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user