summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AArch64/AArch64FastISel.cpp
diff options
context:
space:
mode:
authorJuergen Ributzka <juergen@apple.com>2014-09-04 01:29:21 +0000
committerJuergen Ributzka <juergen@apple.com>2014-09-04 01:29:21 +0000
commit30c02e36cc1acde5d09117a9d6178f599d9e0109 (patch)
tree99069a7b632e26636b8e2f78dc050cb006650653 /llvm/lib/Target/AArch64/AArch64FastISel.cpp
parent1dbc15f02d1eaa9ef908014e19276fde331d3758 (diff)
downloadbcm5719-llvm-30c02e36cc1acde5d09117a9d6178f599d9e0109.tar.gz
bcm5719-llvm-30c02e36cc1acde5d09117a9d6178f599d9e0109.zip
[FastISel][AArch64] Cleanup and simplify 'fastSelectInstruction'. NFC.
llvm-svn: 217119
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64FastISel.cpp')
-rw-r--r--llvm/lib/Target/AArch64/AArch64FastISel.cpp87
1 files changed, 12 insertions, 75 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64FastISel.cpp b/llvm/lib/Target/AArch64/AArch64FastISel.cpp
index a8800e3785d..ca8f9a5bfee 100644
--- a/llvm/lib/Target/AArch64/AArch64FastISel.cpp
+++ b/llvm/lib/Target/AArch64/AArch64FastISel.cpp
@@ -3550,34 +3550,16 @@ bool AArch64FastISel::SelectBitCast(const Instruction *I) {
bool AArch64FastISel::fastSelectInstruction(const Instruction *I) {
switch (I->getOpcode()) {
default:
- return false;
+ break;
case Instruction::Add:
- if (!selectAddSub(I))
- return selectBinaryOp(I, ISD::ADD);
- return true;
case Instruction::Sub:
- if (!selectAddSub(I))
- return selectBinaryOp(I, ISD::SUB);
- return true;
- case Instruction::FAdd:
- return selectBinaryOp(I, ISD::FADD);
- case Instruction::FSub:
- // FNeg is currently represented in LLVM IR as a special case of FSub.
- if (BinaryOperator::isFNeg(I))
- return selectFNeg(I);
- return selectBinaryOp(I, ISD::FSUB);
+ if (selectAddSub(I))
+ return true;
+ break;
case Instruction::Mul:
if (!selectBinaryOp(I, ISD::MUL))
return SelectMul(I);
return true;
- case Instruction::FMul:
- return selectBinaryOp(I, ISD::FMUL);
- case Instruction::SDiv:
- return selectBinaryOp(I, ISD::SDIV);
- case Instruction::UDiv:
- return selectBinaryOp(I, ISD::UDIV);
- case Instruction::FDiv:
- return selectBinaryOp(I, ISD::FDIV);
case Instruction::SRem:
if (!selectBinaryOp(I, ISD::SREM))
return SelectRem(I, ISD::SREM);
@@ -3586,51 +3568,22 @@ bool AArch64FastISel::fastSelectInstruction(const Instruction *I) {
if (!selectBinaryOp(I, ISD::UREM))
return SelectRem(I, ISD::UREM);
return true;
- case Instruction::FRem:
- return selectBinaryOp(I, ISD::FREM);
case Instruction::Shl:
- if (!SelectShift(I))
- return selectBinaryOp(I, ISD::SHL);
- return true;
case Instruction::LShr:
- if (!SelectShift(I))
- return selectBinaryOp(I, ISD::SRL);
- return true;
case Instruction::AShr:
- if (!SelectShift(I))
- return selectBinaryOp(I, ISD::SRA);
- return true;
+ if (SelectShift(I))
+ return true;
+ break;
case Instruction::And:
- if (!selectLogicalOp(I))
- return selectBinaryOp(I, ISD::AND);
- return true;
case Instruction::Or:
- if (!selectLogicalOp(I))
- return selectBinaryOp(I, ISD::OR);
- return true;
case Instruction::Xor:
- if (!selectLogicalOp(I))
- return selectBinaryOp(I, ISD::XOR);
- return true;
- case Instruction::GetElementPtr:
- return selectGetElementPtr(I);
+ if (selectLogicalOp(I))
+ return true;
+ break;
case Instruction::Br:
return SelectBranch(I);
case Instruction::IndirectBr:
return SelectIndirectBr(I);
- case Instruction::Unreachable:
- if (TM.Options.TrapUnreachable)
- return fastEmit_(MVT::Other, MVT::Other, ISD::TRAP) != 0;
- else
- return true;
- case Instruction::Alloca:
- // FunctionLowering has the static-sized case covered.
- if (FuncInfo.StaticAllocaMap.count(cast<AllocaInst>(I)))
- return true;
- // Dynamic-sized alloca is not handled yet.
- return false;
- case Instruction::Call:
- return selectCall(I);
case Instruction::BitCast:
if (!FastISel::selectBitCast(I))
return SelectBitCast(I);
@@ -3663,24 +3616,6 @@ bool AArch64FastISel::fastSelectInstruction(const Instruction *I) {
return true;
case Instruction::UIToFP:
return SelectIntToFP(I, /*Signed=*/false);
- case Instruction::IntToPtr: // Deliberate fall-through.
- case Instruction::PtrToInt: {
- EVT SrcVT = TLI.getValueType(I->getOperand(0)->getType());
- EVT DstVT = TLI.getValueType(I->getType());
- if (DstVT.bitsGT(SrcVT))
- return selectCast(I, ISD::ZERO_EXTEND);
- if (DstVT.bitsLT(SrcVT))
- return selectCast(I, ISD::TRUNCATE);
- unsigned Reg = getRegForValue(I->getOperand(0));
- if (!Reg)
- return false;
- updateValueMap(I, Reg);
- return true;
- }
- case Instruction::ExtractValue:
- return selectExtractValue(I);
- case Instruction::PHI:
- llvm_unreachable("FastISel shouldn't visit PHI nodes!");
case Instruction::Load:
return SelectLoad(I);
case Instruction::Store:
@@ -3694,6 +3629,8 @@ bool AArch64FastISel::fastSelectInstruction(const Instruction *I) {
return SelectRet(I);
}
+ // fall-back to target-independent instruction selection.
+ return selectOperator(I, I->getOpcode());
// Silence warnings.
(void)&CC_AArch64_DarwinPCS_VarArg;
}
OpenPOWER on IntegriCloud