Home | History | Annotate | Download | only in SelectionDAG
      1 //===-- FastISel.cpp - Implementation of the FastISel class ---------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file contains the implementation of the FastISel class.
     11 //
     12 // "Fast" instruction selection is designed to emit very poor code quickly.
     13 // Also, it is not designed to be able to do much lowering, so most illegal
     14 // types (e.g. i64 on 32-bit targets) and operations are not supported.  It is
     15 // also not intended to be able to do much optimization, except in a few cases
     16 // where doing optimizations reduces overall compile time.  For example, folding
     17 // constants into immediate fields is often done, because it's cheap and it
     18 // reduces the number of instructions later phases have to examine.
     19 //
     20 // "Fast" instruction selection is able to fail gracefully and transfer
     21 // control to the SelectionDAG selector for operations that it doesn't
     22 // support.  In many cases, this allows us to avoid duplicating a lot of
     23 // the complicated lowering logic that SelectionDAG currently has.
     24 //
     25 // The intended use for "fast" instruction selection is "-O0" mode
     26 // compilation, where the quality of the generated code is irrelevant when
     27 // weighed against the speed at which the code can be generated.  Also,
     28 // at -O0, the LLVM optimizers are not running, and this makes the
     29 // compile time of codegen a much higher portion of the overall compile
     30 // time.  Despite its limitations, "fast" instruction selection is able to
     31 // handle enough code on its own to provide noticeable overall speedups
     32 // in -O0 compiles.
     33 //
     34 // Basic operations are supported in a target-independent way, by reading
     35 // the same instruction descriptions that the SelectionDAG selector reads,
     36 // and identifying simple arithmetic operations that can be directly selected
     37 // from simple operators.  More complicated operations currently require
     38 // target-specific code.
     39 //
     40 //===----------------------------------------------------------------------===//
     41 
     42 #define DEBUG_TYPE "isel"
     43 #include "llvm/CodeGen/FastISel.h"
     44 #include "llvm/ADT/Statistic.h"
     45 #include "llvm/Analysis/Loads.h"
     46 #include "llvm/CodeGen/Analysis.h"
     47 #include "llvm/CodeGen/FunctionLoweringInfo.h"
     48 #include "llvm/CodeGen/MachineInstrBuilder.h"
     49 #include "llvm/CodeGen/MachineModuleInfo.h"
     50 #include "llvm/CodeGen/MachineRegisterInfo.h"
     51 #include "llvm/DebugInfo.h"
     52 #include "llvm/IR/DataLayout.h"
     53 #include "llvm/IR/Function.h"
     54 #include "llvm/IR/GlobalVariable.h"
     55 #include "llvm/IR/Instructions.h"
     56 #include "llvm/IR/IntrinsicInst.h"
     57 #include "llvm/IR/Operator.h"
     58 #include "llvm/Support/Debug.h"
     59 #include "llvm/Support/ErrorHandling.h"
     60 #include "llvm/Target/TargetInstrInfo.h"
     61 #include "llvm/Target/TargetLibraryInfo.h"
     62 #include "llvm/Target/TargetLowering.h"
     63 #include "llvm/Target/TargetMachine.h"
     64 using namespace llvm;
     65 
     66 STATISTIC(NumFastIselSuccessIndependent, "Number of insts selected by "
     67           "target-independent selector");
     68 STATISTIC(NumFastIselSuccessTarget, "Number of insts selected by "
     69           "target-specific selector");
     70 STATISTIC(NumFastIselDead, "Number of dead insts removed on failure");
     71 
     72 /// startNewBlock - Set the current block to which generated machine
     73 /// instructions will be appended, and clear the local CSE map.
     74 ///
     75 void FastISel::startNewBlock() {
     76   LocalValueMap.clear();
     77 
     78   EmitStartPt = 0;
     79 
     80   // Advance the emit start point past any EH_LABEL instructions.
     81   MachineBasicBlock::iterator
     82     I = FuncInfo.MBB->begin(), E = FuncInfo.MBB->end();
     83   while (I != E && I->getOpcode() == TargetOpcode::EH_LABEL) {
     84     EmitStartPt = I;
     85     ++I;
     86   }
     87   LastLocalValue = EmitStartPt;
     88 }
     89 
     90 bool FastISel::LowerArguments() {
     91   if (!FuncInfo.CanLowerReturn)
     92     // Fallback to SDISel argument lowering code to deal with sret pointer
     93     // parameter.
     94     return false;
     95 
     96   if (!FastLowerArguments())
     97     return false;
     98 
     99   // Enter non-dead arguments into ValueMap for uses in non-entry BBs.
    100   for (Function::const_arg_iterator I = FuncInfo.Fn->arg_begin(),
    101          E = FuncInfo.Fn->arg_end(); I != E; ++I) {
    102     if (!I->use_empty()) {
    103       DenseMap<const Value *, unsigned>::iterator VI = LocalValueMap.find(I);
    104       assert(VI != LocalValueMap.end() && "Missed an argument?");
    105       FuncInfo.ValueMap[I] = VI->second;
    106     }
    107   }
    108   return true;
    109 }
    110 
    111 void FastISel::flushLocalValueMap() {
    112   LocalValueMap.clear();
    113   LastLocalValue = EmitStartPt;
    114   recomputeInsertPt();
    115 }
    116 
    117 bool FastISel::hasTrivialKill(const Value *V) const {
    118   // Don't consider constants or arguments to have trivial kills.
    119   const Instruction *I = dyn_cast<Instruction>(V);
    120   if (!I)
    121     return false;
    122 
    123   // No-op casts are trivially coalesced by fast-isel.
    124   if (const CastInst *Cast = dyn_cast<CastInst>(I))
    125     if (Cast->isNoopCast(TD.getIntPtrType(Cast->getContext())) &&
    126         !hasTrivialKill(Cast->getOperand(0)))
    127       return false;
    128 
    129   // GEPs with all zero indices are trivially coalesced by fast-isel.
    130   if (const GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(I))
    131     if (GEP->hasAllZeroIndices() && !hasTrivialKill(GEP->getOperand(0)))
    132       return false;
    133 
    134   // Only instructions with a single use in the same basic block are considered
    135   // to have trivial kills.
    136   return I->hasOneUse() &&
    137          !(I->getOpcode() == Instruction::BitCast ||
    138            I->getOpcode() == Instruction::PtrToInt ||
    139            I->getOpcode() == Instruction::IntToPtr) &&
    140          cast<Instruction>(*I->use_begin())->getParent() == I->getParent();
    141 }
    142 
    143 unsigned FastISel::getRegForValue(const Value *V) {
    144   EVT RealVT = TLI.getValueType(V->getType(), /*AllowUnknown=*/true);
    145   // Don't handle non-simple values in FastISel.
    146   if (!RealVT.isSimple())
    147     return 0;
    148 
    149   // Ignore illegal types. We must do this before looking up the value
    150   // in ValueMap because Arguments are given virtual registers regardless
    151   // of whether FastISel can handle them.
    152   MVT VT = RealVT.getSimpleVT();
    153   if (!TLI.isTypeLegal(VT)) {
    154     // Handle integer promotions, though, because they're common and easy.
    155     if (VT == MVT::i1 || VT == MVT::i8 || VT == MVT::i16)
    156       VT = TLI.getTypeToTransformTo(V->getContext(), VT).getSimpleVT();
    157     else
    158       return 0;
    159   }
    160 
    161   // Look up the value to see if we already have a register for it.
    162   unsigned Reg = lookUpRegForValue(V);
    163   if (Reg != 0)
    164     return Reg;
    165 
    166   // In bottom-up mode, just create the virtual register which will be used
    167   // to hold the value. It will be materialized later.
    168   if (isa<Instruction>(V) &&
    169       (!isa<AllocaInst>(V) ||
    170        !FuncInfo.StaticAllocaMap.count(cast<AllocaInst>(V))))
    171     return FuncInfo.InitializeRegForValue(V);
    172 
    173   SavePoint SaveInsertPt = enterLocalValueArea();
    174 
    175   // Materialize the value in a register. Emit any instructions in the
    176   // local value area.
    177   Reg = materializeRegForValue(V, VT);
    178 
    179   leaveLocalValueArea(SaveInsertPt);
    180 
    181   return Reg;
    182 }
    183 
    184 /// materializeRegForValue - Helper for getRegForValue. This function is
    185 /// called when the value isn't already available in a register and must
    186 /// be materialized with new instructions.
    187 unsigned FastISel::materializeRegForValue(const Value *V, MVT VT) {
    188   unsigned Reg = 0;
    189 
    190   if (const ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
    191     if (CI->getValue().getActiveBits() <= 64)
    192       Reg = FastEmit_i(VT, VT, ISD::Constant, CI->getZExtValue());
    193   } else if (isa<AllocaInst>(V)) {
    194     Reg = TargetMaterializeAlloca(cast<AllocaInst>(V));
    195   } else if (isa<ConstantPointerNull>(V)) {
    196     // Translate this as an integer zero so that it can be
    197     // local-CSE'd with actual integer zeros.
    198     Reg =
    199       getRegForValue(Constant::getNullValue(TD.getIntPtrType(V->getContext())));
    200   } else if (const ConstantFP *CF = dyn_cast<ConstantFP>(V)) {
    201     if (CF->isNullValue()) {
    202       Reg = TargetMaterializeFloatZero(CF);
    203     } else {
    204       // Try to emit the constant directly.
    205       Reg = FastEmit_f(VT, VT, ISD::ConstantFP, CF);
    206     }
    207 
    208     if (!Reg) {
    209       // Try to emit the constant by using an integer constant with a cast.
    210       const APFloat &Flt = CF->getValueAPF();
    211       EVT IntVT = TLI.getPointerTy();
    212 
    213       uint64_t x[2];
    214       uint32_t IntBitWidth = IntVT.getSizeInBits();
    215       bool isExact;
    216       (void) Flt.convertToInteger(x, IntBitWidth, /*isSigned=*/true,
    217                                   APFloat::rmTowardZero, &isExact);
    218       if (isExact) {
    219         APInt IntVal(IntBitWidth, x);
    220 
    221         unsigned IntegerReg =
    222           getRegForValue(ConstantInt::get(V->getContext(), IntVal));
    223         if (IntegerReg != 0)
    224           Reg = FastEmit_r(IntVT.getSimpleVT(), VT, ISD::SINT_TO_FP,
    225                            IntegerReg, /*Kill=*/false);
    226       }
    227     }
    228   } else if (const Operator *Op = dyn_cast<Operator>(V)) {
    229     if (!SelectOperator(Op, Op->getOpcode()))
    230       if (!isa<Instruction>(Op) ||
    231           !TargetSelectInstruction(cast<Instruction>(Op)))
    232         return 0;
    233     Reg = lookUpRegForValue(Op);
    234   } else if (isa<UndefValue>(V)) {
    235     Reg = createResultReg(TLI.getRegClassFor(VT));
    236     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL,
    237             TII.get(TargetOpcode::IMPLICIT_DEF), Reg);
    238   }
    239 
    240   // If target-independent code couldn't handle the value, give target-specific
    241   // code a try.
    242   if (!Reg && isa<Constant>(V))
    243     Reg = TargetMaterializeConstant(cast<Constant>(V));
    244 
    245   // Don't cache constant materializations in the general ValueMap.
    246   // To do so would require tracking what uses they dominate.
    247   if (Reg != 0) {
    248     LocalValueMap[V] = Reg;
    249     LastLocalValue = MRI.getVRegDef(Reg);
    250   }
    251   return Reg;
    252 }
    253 
    254 unsigned FastISel::lookUpRegForValue(const Value *V) {
    255   // Look up the value to see if we already have a register for it. We
    256   // cache values defined by Instructions across blocks, and other values
    257   // only locally. This is because Instructions already have the SSA
    258   // def-dominates-use requirement enforced.
    259   DenseMap<const Value *, unsigned>::iterator I = FuncInfo.ValueMap.find(V);
    260   if (I != FuncInfo.ValueMap.end())
    261     return I->second;
    262   return LocalValueMap[V];
    263 }
    264 
    265 /// UpdateValueMap - Update the value map to include the new mapping for this
    266 /// instruction, or insert an extra copy to get the result in a previous
    267 /// determined register.
    268 /// NOTE: This is only necessary because we might select a block that uses
    269 /// a value before we select the block that defines the value.  It might be
    270 /// possible to fix this by selecting blocks in reverse postorder.
    271 void FastISel::UpdateValueMap(const Value *I, unsigned Reg, unsigned NumRegs) {
    272   if (!isa<Instruction>(I)) {
    273     LocalValueMap[I] = Reg;
    274     return;
    275   }
    276 
    277   unsigned &AssignedReg = FuncInfo.ValueMap[I];
    278   if (AssignedReg == 0)
    279     // Use the new register.
    280     AssignedReg = Reg;
    281   else if (Reg != AssignedReg) {
    282     // Arrange for uses of AssignedReg to be replaced by uses of Reg.
    283     for (unsigned i = 0; i < NumRegs; i++)
    284       FuncInfo.RegFixups[AssignedReg+i] = Reg+i;
    285 
    286     AssignedReg = Reg;
    287   }
    288 }
    289 
    290 std::pair<unsigned, bool> FastISel::getRegForGEPIndex(const Value *Idx) {
    291   unsigned IdxN = getRegForValue(Idx);
    292   if (IdxN == 0)
    293     // Unhandled operand. Halt "fast" selection and bail.
    294     return std::pair<unsigned, bool>(0, false);
    295 
    296   bool IdxNIsKill = hasTrivialKill(Idx);
    297 
    298   // If the index is smaller or larger than intptr_t, truncate or extend it.
    299   MVT PtrVT = TLI.getPointerTy();
    300   EVT IdxVT = EVT::getEVT(Idx->getType(), /*HandleUnknown=*/false);
    301   if (IdxVT.bitsLT(PtrVT)) {
    302     IdxN = FastEmit_r(IdxVT.getSimpleVT(), PtrVT, ISD::SIGN_EXTEND,
    303                       IdxN, IdxNIsKill);
    304     IdxNIsKill = true;
    305   }
    306   else if (IdxVT.bitsGT(PtrVT)) {
    307     IdxN = FastEmit_r(IdxVT.getSimpleVT(), PtrVT, ISD::TRUNCATE,
    308                       IdxN, IdxNIsKill);
    309     IdxNIsKill = true;
    310   }
    311   return std::pair<unsigned, bool>(IdxN, IdxNIsKill);
    312 }
    313 
    314 void FastISel::recomputeInsertPt() {
    315   if (getLastLocalValue()) {
    316     FuncInfo.InsertPt = getLastLocalValue();
    317     FuncInfo.MBB = FuncInfo.InsertPt->getParent();
    318     ++FuncInfo.InsertPt;
    319   } else
    320     FuncInfo.InsertPt = FuncInfo.MBB->getFirstNonPHI();
    321 
    322   // Now skip past any EH_LABELs, which must remain at the beginning.
    323   while (FuncInfo.InsertPt != FuncInfo.MBB->end() &&
    324          FuncInfo.InsertPt->getOpcode() == TargetOpcode::EH_LABEL)
    325     ++FuncInfo.InsertPt;
    326 }
    327 
    328 void FastISel::removeDeadCode(MachineBasicBlock::iterator I,
    329                               MachineBasicBlock::iterator E) {
    330   assert (I && E && std::distance(I, E) > 0 && "Invalid iterator!");
    331   while (I != E) {
    332     MachineInstr *Dead = &*I;
    333     ++I;
    334     Dead->eraseFromParent();
    335     ++NumFastIselDead;
    336   }
    337   recomputeInsertPt();
    338 }
    339 
    340 FastISel::SavePoint FastISel::enterLocalValueArea() {
    341   MachineBasicBlock::iterator OldInsertPt = FuncInfo.InsertPt;
    342   DebugLoc OldDL = DL;
    343   recomputeInsertPt();
    344   DL = DebugLoc();
    345   SavePoint SP = { OldInsertPt, OldDL };
    346   return SP;
    347 }
    348 
    349 void FastISel::leaveLocalValueArea(SavePoint OldInsertPt) {
    350   if (FuncInfo.InsertPt != FuncInfo.MBB->begin())
    351     LastLocalValue = llvm::prior(FuncInfo.InsertPt);
    352 
    353   // Restore the previous insert position.
    354   FuncInfo.InsertPt = OldInsertPt.InsertPt;
    355   DL = OldInsertPt.DL;
    356 }
    357 
    358 /// SelectBinaryOp - Select and emit code for a binary operator instruction,
    359 /// which has an opcode which directly corresponds to the given ISD opcode.
    360 ///
    361 bool FastISel::SelectBinaryOp(const User *I, unsigned ISDOpcode) {
    362   EVT VT = EVT::getEVT(I->getType(), /*HandleUnknown=*/true);
    363   if (VT == MVT::Other || !VT.isSimple())
    364     // Unhandled type. Halt "fast" selection and bail.
    365     return false;
    366 
    367   // We only handle legal types. For example, on x86-32 the instruction
    368   // selector contains all of the 64-bit instructions from x86-64,
    369   // under the assumption that i64 won't be used if the target doesn't
    370   // support it.
    371   if (!TLI.isTypeLegal(VT)) {
    372     // MVT::i1 is special. Allow AND, OR, or XOR because they
    373     // don't require additional zeroing, which makes them easy.
    374     if (VT == MVT::i1 &&
    375         (ISDOpcode == ISD::AND || ISDOpcode == ISD::OR ||
    376          ISDOpcode == ISD::XOR))
    377       VT = TLI.getTypeToTransformTo(I->getContext(), VT);
    378     else
    379       return false;
    380   }
    381 
    382   // Check if the first operand is a constant, and handle it as "ri".  At -O0,
    383   // we don't have anything that canonicalizes operand order.
    384   if (ConstantInt *CI = dyn_cast<ConstantInt>(I->getOperand(0)))
    385     if (isa<Instruction>(I) && cast<Instruction>(I)->isCommutative()) {
    386       unsigned Op1 = getRegForValue(I->getOperand(1));
    387       if (Op1 == 0) return false;
    388 
    389       bool Op1IsKill = hasTrivialKill(I->getOperand(1));
    390 
    391       unsigned ResultReg = FastEmit_ri_(VT.getSimpleVT(), ISDOpcode, Op1,
    392                                         Op1IsKill, CI->getZExtValue(),
    393                                         VT.getSimpleVT());
    394       if (ResultReg == 0) return false;
    395 
    396       // We successfully emitted code for the given LLVM Instruction.
    397       UpdateValueMap(I, ResultReg);
    398       return true;
    399     }
    400 
    401 
    402   unsigned Op0 = getRegForValue(I->getOperand(0));
    403   if (Op0 == 0)   // Unhandled operand. Halt "fast" selection and bail.
    404     return false;
    405 
    406   bool Op0IsKill = hasTrivialKill(I->getOperand(0));
    407 
    408   // Check if the second operand is a constant and handle it appropriately.
    409   if (ConstantInt *CI = dyn_cast<ConstantInt>(I->getOperand(1))) {
    410     uint64_t Imm = CI->getZExtValue();
    411 
    412     // Transform "sdiv exact X, 8" -> "sra X, 3".
    413     if (ISDOpcode == ISD::SDIV && isa<BinaryOperator>(I) &&
    414         cast<BinaryOperator>(I)->isExact() &&
    415         isPowerOf2_64(Imm)) {
    416       Imm = Log2_64(Imm);
    417       ISDOpcode = ISD::SRA;
    418     }
    419 
    420     // Transform "urem x, pow2" -> "and x, pow2-1".
    421     if (ISDOpcode == ISD::UREM && isa<BinaryOperator>(I) &&
    422         isPowerOf2_64(Imm)) {
    423       --Imm;
    424       ISDOpcode = ISD::AND;
    425     }
    426 
    427     unsigned ResultReg = FastEmit_ri_(VT.getSimpleVT(), ISDOpcode, Op0,
    428                                       Op0IsKill, Imm, VT.getSimpleVT());
    429     if (ResultReg == 0) return false;
    430 
    431     // We successfully emitted code for the given LLVM Instruction.
    432     UpdateValueMap(I, ResultReg);
    433     return true;
    434   }
    435 
    436   // Check if the second operand is a constant float.
    437   if (ConstantFP *CF = dyn_cast<ConstantFP>(I->getOperand(1))) {
    438     unsigned ResultReg = FastEmit_rf(VT.getSimpleVT(), VT.getSimpleVT(),
    439                                      ISDOpcode, Op0, Op0IsKill, CF);
    440     if (ResultReg != 0) {
    441       // We successfully emitted code for the given LLVM Instruction.
    442       UpdateValueMap(I, ResultReg);
    443       return true;
    444     }
    445   }
    446 
    447   unsigned Op1 = getRegForValue(I->getOperand(1));
    448   if (Op1 == 0)
    449     // Unhandled operand. Halt "fast" selection and bail.
    450     return false;
    451 
    452   bool Op1IsKill = hasTrivialKill(I->getOperand(1));
    453 
    454   // Now we have both operands in registers. Emit the instruction.
    455   unsigned ResultReg = FastEmit_rr(VT.getSimpleVT(), VT.getSimpleVT(),
    456                                    ISDOpcode,
    457                                    Op0, Op0IsKill,
    458                                    Op1, Op1IsKill);
    459   if (ResultReg == 0)
    460     // Target-specific code wasn't able to find a machine opcode for
    461     // the given ISD opcode and type. Halt "fast" selection and bail.
    462     return false;
    463 
    464   // We successfully emitted code for the given LLVM Instruction.
    465   UpdateValueMap(I, ResultReg);
    466   return true;
    467 }
    468 
    469 bool FastISel::SelectGetElementPtr(const User *I) {
    470   unsigned N = getRegForValue(I->getOperand(0));
    471   if (N == 0)
    472     // Unhandled operand. Halt "fast" selection and bail.
    473     return false;
    474 
    475   bool NIsKill = hasTrivialKill(I->getOperand(0));
    476 
    477   // Keep a running tab of the total offset to coalesce multiple N = N + Offset
    478   // into a single N = N + TotalOffset.
    479   uint64_t TotalOffs = 0;
    480   // FIXME: What's a good SWAG number for MaxOffs?
    481   uint64_t MaxOffs = 2048;
    482   Type *Ty = I->getOperand(0)->getType();
    483   MVT VT = TLI.getPointerTy();
    484   for (GetElementPtrInst::const_op_iterator OI = I->op_begin()+1,
    485        E = I->op_end(); OI != E; ++OI) {
    486     const Value *Idx = *OI;
    487     if (StructType *StTy = dyn_cast<StructType>(Ty)) {
    488       unsigned Field = cast<ConstantInt>(Idx)->getZExtValue();
    489       if (Field) {
    490         // N = N + Offset
    491         TotalOffs += TD.getStructLayout(StTy)->getElementOffset(Field);
    492         if (TotalOffs >= MaxOffs) {
    493           N = FastEmit_ri_(VT, ISD::ADD, N, NIsKill, TotalOffs, VT);
    494           if (N == 0)
    495             // Unhandled operand. Halt "fast" selection and bail.
    496             return false;
    497           NIsKill = true;
    498           TotalOffs = 0;
    499         }
    500       }
    501       Ty = StTy->getElementType(Field);
    502     } else {
    503       Ty = cast<SequentialType>(Ty)->getElementType();
    504 
    505       // If this is a constant subscript, handle it quickly.
    506       if (const ConstantInt *CI = dyn_cast<ConstantInt>(Idx)) {
    507         if (CI->isZero()) continue;
    508         // N = N + Offset
    509         TotalOffs +=
    510           TD.getTypeAllocSize(Ty)*cast<ConstantInt>(CI)->getSExtValue();
    511         if (TotalOffs >= MaxOffs) {
    512           N = FastEmit_ri_(VT, ISD::ADD, N, NIsKill, TotalOffs, VT);
    513           if (N == 0)
    514             // Unhandled operand. Halt "fast" selection and bail.
    515             return false;
    516           NIsKill = true;
    517           TotalOffs = 0;
    518         }
    519         continue;
    520       }
    521       if (TotalOffs) {
    522         N = FastEmit_ri_(VT, ISD::ADD, N, NIsKill, TotalOffs, VT);
    523         if (N == 0)
    524           // Unhandled operand. Halt "fast" selection and bail.
    525           return false;
    526         NIsKill = true;
    527         TotalOffs = 0;
    528       }
    529 
    530       // N = N + Idx * ElementSize;
    531       uint64_t ElementSize = TD.getTypeAllocSize(Ty);
    532       std::pair<unsigned, bool> Pair = getRegForGEPIndex(Idx);
    533       unsigned IdxN = Pair.first;
    534       bool IdxNIsKill = Pair.second;
    535       if (IdxN == 0)
    536         // Unhandled operand. Halt "fast" selection and bail.
    537         return false;
    538 
    539       if (ElementSize != 1) {
    540         IdxN = FastEmit_ri_(VT, ISD::MUL, IdxN, IdxNIsKill, ElementSize, VT);
    541         if (IdxN == 0)
    542           // Unhandled operand. Halt "fast" selection and bail.
    543           return false;
    544         IdxNIsKill = true;
    545       }
    546       N = FastEmit_rr(VT, VT, ISD::ADD, N, NIsKill, IdxN, IdxNIsKill);
    547       if (N == 0)
    548         // Unhandled operand. Halt "fast" selection and bail.
    549         return false;
    550     }
    551   }
    552   if (TotalOffs) {
    553     N = FastEmit_ri_(VT, ISD::ADD, N, NIsKill, TotalOffs, VT);
    554     if (N == 0)
    555       // Unhandled operand. Halt "fast" selection and bail.
    556       return false;
    557   }
    558 
    559   // We successfully emitted code for the given LLVM Instruction.
    560   UpdateValueMap(I, N);
    561   return true;
    562 }
    563 
    564 bool FastISel::SelectCall(const User *I) {
    565   const CallInst *Call = cast<CallInst>(I);
    566 
    567   // Handle simple inline asms.
    568   if (const InlineAsm *IA = dyn_cast<InlineAsm>(Call->getCalledValue())) {
    569     // Don't attempt to handle constraints.
    570     if (!IA->getConstraintString().empty())
    571       return false;
    572 
    573     unsigned ExtraInfo = 0;
    574     if (IA->hasSideEffects())
    575       ExtraInfo |= InlineAsm::Extra_HasSideEffects;
    576     if (IA->isAlignStack())
    577       ExtraInfo |= InlineAsm::Extra_IsAlignStack;
    578 
    579     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL,
    580             TII.get(TargetOpcode::INLINEASM))
    581       .addExternalSymbol(IA->getAsmString().c_str())
    582       .addImm(ExtraInfo);
    583     return true;
    584   }
    585 
    586   MachineModuleInfo &MMI = FuncInfo.MF->getMMI();
    587   ComputeUsesVAFloatArgument(*Call, &MMI);
    588 
    589   const Function *F = Call->getCalledFunction();
    590   if (!F) return false;
    591 
    592   // Handle selected intrinsic function calls.
    593   switch (F->getIntrinsicID()) {
    594   default: break;
    595     // At -O0 we don't care about the lifetime intrinsics.
    596   case Intrinsic::lifetime_start:
    597   case Intrinsic::lifetime_end:
    598     // The donothing intrinsic does, well, nothing.
    599   case Intrinsic::donothing:
    600     return true;
    601 
    602   case Intrinsic::dbg_declare: {
    603     const DbgDeclareInst *DI = cast<DbgDeclareInst>(Call);
    604     if (!DIVariable(DI->getVariable()).Verify() ||
    605         !FuncInfo.MF->getMMI().hasDebugInfo()) {
    606       DEBUG(dbgs() << "Dropping debug info for " << *DI << "\n");
    607       return true;
    608     }
    609 
    610     const Value *Address = DI->getAddress();
    611     if (!Address || isa<UndefValue>(Address)) {
    612       DEBUG(dbgs() << "Dropping debug info for " << *DI << "\n");
    613       return true;
    614     }
    615 
    616     unsigned Reg = 0;
    617     unsigned Offset = 0;
    618     if (const Argument *Arg = dyn_cast<Argument>(Address)) {
    619       // Some arguments' frame index is recorded during argument lowering.
    620       Offset = FuncInfo.getArgumentFrameIndex(Arg);
    621       if (Offset)
    622         Reg = TRI.getFrameRegister(*FuncInfo.MF);
    623     }
    624     if (!Reg)
    625       Reg = lookUpRegForValue(Address);
    626 
    627     // If we have a VLA that has a "use" in a metadata node that's then used
    628     // here but it has no other uses, then we have a problem. E.g.,
    629     //
    630     //   int foo (const int *x) {
    631     //     char a[*x];
    632     //     return 0;
    633     //   }
    634     //
    635     // If we assign 'a' a vreg and fast isel later on has to use the selection
    636     // DAG isel, it will want to copy the value to the vreg. However, there are
    637     // no uses, which goes counter to what selection DAG isel expects.
    638     if (!Reg && !Address->use_empty() && isa<Instruction>(Address) &&
    639         (!isa<AllocaInst>(Address) ||
    640          !FuncInfo.StaticAllocaMap.count(cast<AllocaInst>(Address))))
    641       Reg = FuncInfo.InitializeRegForValue(Address);
    642 
    643     if (Reg)
    644       BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL,
    645               TII.get(TargetOpcode::DBG_VALUE))
    646         .addReg(Reg, RegState::Debug).addImm(Offset)
    647         .addMetadata(DI->getVariable());
    648     else
    649       // We can't yet handle anything else here because it would require
    650       // generating code, thus altering codegen because of debug info.
    651       DEBUG(dbgs() << "Dropping debug info for " << DI);
    652     return true;
    653   }
    654   case Intrinsic::dbg_value: {
    655     // This form of DBG_VALUE is target-independent.
    656     const DbgValueInst *DI = cast<DbgValueInst>(Call);
    657     const MCInstrDesc &II = TII.get(TargetOpcode::DBG_VALUE);
    658     const Value *V = DI->getValue();
    659     if (!V) {
    660       // Currently the optimizer can produce this; insert an undef to
    661       // help debugging.  Probably the optimizer should not do this.
    662       BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
    663         .addReg(0U).addImm(DI->getOffset())
    664         .addMetadata(DI->getVariable());
    665     } else if (const ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
    666       if (CI->getBitWidth() > 64)
    667         BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
    668           .addCImm(CI).addImm(DI->getOffset())
    669           .addMetadata(DI->getVariable());
    670       else
    671         BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
    672           .addImm(CI->getZExtValue()).addImm(DI->getOffset())
    673           .addMetadata(DI->getVariable());
    674     } else if (const ConstantFP *CF = dyn_cast<ConstantFP>(V)) {
    675       BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
    676         .addFPImm(CF).addImm(DI->getOffset())
    677         .addMetadata(DI->getVariable());
    678     } else if (unsigned Reg = lookUpRegForValue(V)) {
    679       BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
    680         .addReg(Reg, RegState::Debug).addImm(DI->getOffset())
    681         .addMetadata(DI->getVariable());
    682     } else {
    683       // We can't yet handle anything else here because it would require
    684       // generating code, thus altering codegen because of debug info.
    685       DEBUG(dbgs() << "Dropping debug info for " << DI);
    686     }
    687     return true;
    688   }
    689   case Intrinsic::objectsize: {
    690     ConstantInt *CI = cast<ConstantInt>(Call->getArgOperand(1));
    691     unsigned long long Res = CI->isZero() ? -1ULL : 0;
    692     Constant *ResCI = ConstantInt::get(Call->getType(), Res);
    693     unsigned ResultReg = getRegForValue(ResCI);
    694     if (ResultReg == 0)
    695       return false;
    696     UpdateValueMap(Call, ResultReg);
    697     return true;
    698   }
    699   case Intrinsic::expect: {
    700     unsigned ResultReg = getRegForValue(Call->getArgOperand(0));
    701     if (ResultReg == 0)
    702       return false;
    703     UpdateValueMap(Call, ResultReg);
    704     return true;
    705   }
    706   }
    707 
    708   // Usually, it does not make sense to initialize a value,
    709   // make an unrelated function call and use the value, because
    710   // it tends to be spilled on the stack. So, we move the pointer
    711   // to the last local value to the beginning of the block, so that
    712   // all the values which have already been materialized,
    713   // appear after the call. It also makes sense to skip intrinsics
    714   // since they tend to be inlined.
    715   if (!isa<IntrinsicInst>(Call))
    716     flushLocalValueMap();
    717 
    718   // An arbitrary call. Bail.
    719   return false;
    720 }
    721 
    722 bool FastISel::SelectCast(const User *I, unsigned Opcode) {
    723   EVT SrcVT = TLI.getValueType(I->getOperand(0)->getType());
    724   EVT DstVT = TLI.getValueType(I->getType());
    725 
    726   if (SrcVT == MVT::Other || !SrcVT.isSimple() ||
    727       DstVT == MVT::Other || !DstVT.isSimple())
    728     // Unhandled type. Halt "fast" selection and bail.
    729     return false;
    730 
    731   // Check if the destination type is legal.
    732   if (!TLI.isTypeLegal(DstVT))
    733     return false;
    734 
    735   // Check if the source operand is legal.
    736   if (!TLI.isTypeLegal(SrcVT))
    737     return false;
    738 
    739   unsigned InputReg = getRegForValue(I->getOperand(0));
    740   if (!InputReg)
    741     // Unhandled operand.  Halt "fast" selection and bail.
    742     return false;
    743 
    744   bool InputRegIsKill = hasTrivialKill(I->getOperand(0));
    745 
    746   unsigned ResultReg = FastEmit_r(SrcVT.getSimpleVT(),
    747                                   DstVT.getSimpleVT(),
    748                                   Opcode,
    749                                   InputReg, InputRegIsKill);
    750   if (!ResultReg)
    751     return false;
    752 
    753   UpdateValueMap(I, ResultReg);
    754   return true;
    755 }
    756 
    757 bool FastISel::SelectBitCast(const User *I) {
    758   // If the bitcast doesn't change the type, just use the operand value.
    759   if (I->getType() == I->getOperand(0)->getType()) {
    760     unsigned Reg = getRegForValue(I->getOperand(0));
    761     if (Reg == 0)
    762       return false;
    763     UpdateValueMap(I, Reg);
    764     return true;
    765   }
    766 
    767   // Bitcasts of other values become reg-reg copies or BITCAST operators.
    768   EVT SrcEVT = TLI.getValueType(I->getOperand(0)->getType());
    769   EVT DstEVT = TLI.getValueType(I->getType());
    770   if (SrcEVT == MVT::Other || DstEVT == MVT::Other ||
    771       !TLI.isTypeLegal(SrcEVT) || !TLI.isTypeLegal(DstEVT))
    772     // Unhandled type. Halt "fast" selection and bail.
    773     return false;
    774 
    775   MVT SrcVT = SrcEVT.getSimpleVT();
    776   MVT DstVT = DstEVT.getSimpleVT();
    777   unsigned Op0 = getRegForValue(I->getOperand(0));
    778   if (Op0 == 0)
    779     // Unhandled operand. Halt "fast" selection and bail.
    780     return false;
    781 
    782   bool Op0IsKill = hasTrivialKill(I->getOperand(0));
    783 
    784   // First, try to perform the bitcast by inserting a reg-reg copy.
    785   unsigned ResultReg = 0;
    786   if (SrcVT == DstVT) {
    787     const TargetRegisterClass* SrcClass = TLI.getRegClassFor(SrcVT);
    788     const TargetRegisterClass* DstClass = TLI.getRegClassFor(DstVT);
    789     // Don't attempt a cross-class copy. It will likely fail.
    790     if (SrcClass == DstClass) {
    791       ResultReg = createResultReg(DstClass);
    792       BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
    793               ResultReg).addReg(Op0);
    794     }
    795   }
    796 
    797   // If the reg-reg copy failed, select a BITCAST opcode.
    798   if (!ResultReg)
    799     ResultReg = FastEmit_r(SrcVT, DstVT, ISD::BITCAST, Op0, Op0IsKill);
    800 
    801   if (!ResultReg)
    802     return false;
    803 
    804   UpdateValueMap(I, ResultReg);
    805   return true;
    806 }
    807 
    808 bool
    809 FastISel::SelectInstruction(const Instruction *I) {
    810   // Just before the terminator instruction, insert instructions to
    811   // feed PHI nodes in successor blocks.
    812   if (isa<TerminatorInst>(I))
    813     if (!HandlePHINodesInSuccessorBlocks(I->getParent()))
    814       return false;
    815 
    816   DL = I->getDebugLoc();
    817 
    818   MachineBasicBlock::iterator SavedInsertPt = FuncInfo.InsertPt;
    819 
    820   // As a special case, don't handle calls to builtin library functions that
    821   // may be translated directly to target instructions.
    822   if (const CallInst *Call = dyn_cast<CallInst>(I)) {
    823     const Function *F = Call->getCalledFunction();
    824     LibFunc::Func Func;
    825     if (F && !F->hasLocalLinkage() && F->hasName() &&
    826         LibInfo->getLibFunc(F->getName(), Func) &&
    827         LibInfo->hasOptimizedCodeGen(Func))
    828       return false;
    829   }
    830 
    831   // First, try doing target-independent selection.
    832   if (SelectOperator(I, I->getOpcode())) {
    833     ++NumFastIselSuccessIndependent;
    834     DL = DebugLoc();
    835     return true;
    836   }
    837   // Remove dead code.  However, ignore call instructions since we've flushed
    838   // the local value map and recomputed the insert point.
    839   if (!isa<CallInst>(I)) {
    840     recomputeInsertPt();
    841     if (SavedInsertPt != FuncInfo.InsertPt)
    842       removeDeadCode(FuncInfo.InsertPt, SavedInsertPt);
    843   }
    844 
    845   // Next, try calling the target to attempt to handle the instruction.
    846   SavedInsertPt = FuncInfo.InsertPt;
    847   if (TargetSelectInstruction(I)) {
    848     ++NumFastIselSuccessTarget;
    849     DL = DebugLoc();
    850     return true;
    851   }
    852   // Check for dead code and remove as necessary.
    853   recomputeInsertPt();
    854   if (SavedInsertPt != FuncInfo.InsertPt)
    855     removeDeadCode(FuncInfo.InsertPt, SavedInsertPt);
    856 
    857   DL = DebugLoc();
    858   return false;
    859 }
    860 
    861 /// FastEmitBranch - Emit an unconditional branch to the given block,
    862 /// unless it is the immediate (fall-through) successor, and update
    863 /// the CFG.
    864 void
    865 FastISel::FastEmitBranch(MachineBasicBlock *MSucc, DebugLoc DL) {
    866 
    867   if (FuncInfo.MBB->getBasicBlock()->size() > 1 &&
    868       FuncInfo.MBB->isLayoutSuccessor(MSucc)) {
    869     // For more accurate line information if this is the only instruction
    870     // in the block then emit it, otherwise we have the unconditional
    871     // fall-through case, which needs no instructions.
    872   } else {
    873     // The unconditional branch case.
    874     TII.InsertBranch(*FuncInfo.MBB, MSucc, NULL,
    875                      SmallVector<MachineOperand, 0>(), DL);
    876   }
    877   FuncInfo.MBB->addSuccessor(MSucc);
    878 }
    879 
    880 /// SelectFNeg - Emit an FNeg operation.
    881 ///
    882 bool
    883 FastISel::SelectFNeg(const User *I) {
    884   unsigned OpReg = getRegForValue(BinaryOperator::getFNegArgument(I));
    885   if (OpReg == 0) return false;
    886 
    887   bool OpRegIsKill = hasTrivialKill(I);
    888 
    889   // If the target has ISD::FNEG, use it.
    890   EVT VT = TLI.getValueType(I->getType());
    891   unsigned ResultReg = FastEmit_r(VT.getSimpleVT(), VT.getSimpleVT(),
    892                                   ISD::FNEG, OpReg, OpRegIsKill);
    893   if (ResultReg != 0) {
    894     UpdateValueMap(I, ResultReg);
    895     return true;
    896   }
    897 
    898   // Bitcast the value to integer, twiddle the sign bit with xor,
    899   // and then bitcast it back to floating-point.
    900   if (VT.getSizeInBits() > 64) return false;
    901   EVT IntVT = EVT::getIntegerVT(I->getContext(), VT.getSizeInBits());
    902   if (!TLI.isTypeLegal(IntVT))
    903     return false;
    904 
    905   unsigned IntReg = FastEmit_r(VT.getSimpleVT(), IntVT.getSimpleVT(),
    906                                ISD::BITCAST, OpReg, OpRegIsKill);
    907   if (IntReg == 0)
    908     return false;
    909 
    910   unsigned IntResultReg = FastEmit_ri_(IntVT.getSimpleVT(), ISD::XOR,
    911                                        IntReg, /*Kill=*/true,
    912                                        UINT64_C(1) << (VT.getSizeInBits()-1),
    913                                        IntVT.getSimpleVT());
    914   if (IntResultReg == 0)
    915     return false;
    916 
    917   ResultReg = FastEmit_r(IntVT.getSimpleVT(), VT.getSimpleVT(),
    918                          ISD::BITCAST, IntResultReg, /*Kill=*/true);
    919   if (ResultReg == 0)
    920     return false;
    921 
    922   UpdateValueMap(I, ResultReg);
    923   return true;
    924 }
    925 
    926 bool
    927 FastISel::SelectExtractValue(const User *U) {
    928   const ExtractValueInst *EVI = dyn_cast<ExtractValueInst>(U);
    929   if (!EVI)
    930     return false;
    931 
    932   // Make sure we only try to handle extracts with a legal result.  But also
    933   // allow i1 because it's easy.
    934   EVT RealVT = TLI.getValueType(EVI->getType(), /*AllowUnknown=*/true);
    935   if (!RealVT.isSimple())
    936     return false;
    937   MVT VT = RealVT.getSimpleVT();
    938   if (!TLI.isTypeLegal(VT) && VT != MVT::i1)
    939     return false;
    940 
    941   const Value *Op0 = EVI->getOperand(0);
    942   Type *AggTy = Op0->getType();
    943 
    944   // Get the base result register.
    945   unsigned ResultReg;
    946   DenseMap<const Value *, unsigned>::iterator I = FuncInfo.ValueMap.find(Op0);
    947   if (I != FuncInfo.ValueMap.end())
    948     ResultReg = I->second;
    949   else if (isa<Instruction>(Op0))
    950     ResultReg = FuncInfo.InitializeRegForValue(Op0);
    951   else
    952     return false; // fast-isel can't handle aggregate constants at the moment
    953 
    954   // Get the actual result register, which is an offset from the base register.
    955   unsigned VTIndex = ComputeLinearIndex(AggTy, EVI->getIndices());
    956 
    957   SmallVector<EVT, 4> AggValueVTs;
    958   ComputeValueVTs(TLI, AggTy, AggValueVTs);
    959 
    960   for (unsigned i = 0; i < VTIndex; i++)
    961     ResultReg += TLI.getNumRegisters(FuncInfo.Fn->getContext(), AggValueVTs[i]);
    962 
    963   UpdateValueMap(EVI, ResultReg);
    964   return true;
    965 }
    966 
    967 bool
    968 FastISel::SelectOperator(const User *I, unsigned Opcode) {
    969   switch (Opcode) {
    970   case Instruction::Add:
    971     return SelectBinaryOp(I, ISD::ADD);
    972   case Instruction::FAdd:
    973     return SelectBinaryOp(I, ISD::FADD);
    974   case Instruction::Sub:
    975     return SelectBinaryOp(I, ISD::SUB);
    976   case Instruction::FSub:
    977     // FNeg is currently represented in LLVM IR as a special case of FSub.
    978     if (BinaryOperator::isFNeg(I))
    979       return SelectFNeg(I);
    980     return SelectBinaryOp(I, ISD::FSUB);
    981   case Instruction::Mul:
    982     return SelectBinaryOp(I, ISD::MUL);
    983   case Instruction::FMul:
    984     return SelectBinaryOp(I, ISD::FMUL);
    985   case Instruction::SDiv:
    986     return SelectBinaryOp(I, ISD::SDIV);
    987   case Instruction::UDiv:
    988     return SelectBinaryOp(I, ISD::UDIV);
    989   case Instruction::FDiv:
    990     return SelectBinaryOp(I, ISD::FDIV);
    991   case Instruction::SRem:
    992     return SelectBinaryOp(I, ISD::SREM);
    993   case Instruction::URem:
    994     return SelectBinaryOp(I, ISD::UREM);
    995   case Instruction::FRem:
    996     return SelectBinaryOp(I, ISD::FREM);
    997   case Instruction::Shl:
    998     return SelectBinaryOp(I, ISD::SHL);
    999   case Instruction::LShr:
   1000     return SelectBinaryOp(I, ISD::SRL);
   1001   case Instruction::AShr:
   1002     return SelectBinaryOp(I, ISD::SRA);
   1003   case Instruction::And:
   1004     return SelectBinaryOp(I, ISD::AND);
   1005   case Instruction::Or:
   1006     return SelectBinaryOp(I, ISD::OR);
   1007   case Instruction::Xor:
   1008     return SelectBinaryOp(I, ISD::XOR);
   1009 
   1010   case Instruction::GetElementPtr:
   1011     return SelectGetElementPtr(I);
   1012 
   1013   case Instruction::Br: {
   1014     const BranchInst *BI = cast<BranchInst>(I);
   1015 
   1016     if (BI->isUnconditional()) {
   1017       const BasicBlock *LLVMSucc = BI->getSuccessor(0);
   1018       MachineBasicBlock *MSucc = FuncInfo.MBBMap[LLVMSucc];
   1019       FastEmitBranch(MSucc, BI->getDebugLoc());
   1020       return true;
   1021     }
   1022 
   1023     // Conditional branches are not handed yet.
   1024     // Halt "fast" selection and bail.
   1025     return false;
   1026   }
   1027 
   1028   case Instruction::Unreachable:
   1029     // Nothing to emit.
   1030     return true;
   1031 
   1032   case Instruction::Alloca:
   1033     // FunctionLowering has the static-sized case covered.
   1034     if (FuncInfo.StaticAllocaMap.count(cast<AllocaInst>(I)))
   1035       return true;
   1036 
   1037     // Dynamic-sized alloca is not handled yet.
   1038     return false;
   1039 
   1040   case Instruction::Call:
   1041     return SelectCall(I);
   1042 
   1043   case Instruction::BitCast:
   1044     return SelectBitCast(I);
   1045 
   1046   case Instruction::FPToSI:
   1047     return SelectCast(I, ISD::FP_TO_SINT);
   1048   case Instruction::ZExt:
   1049     return SelectCast(I, ISD::ZERO_EXTEND);
   1050   case Instruction::SExt:
   1051     return SelectCast(I, ISD::SIGN_EXTEND);
   1052   case Instruction::Trunc:
   1053     return SelectCast(I, ISD::TRUNCATE);
   1054   case Instruction::SIToFP:
   1055     return SelectCast(I, ISD::SINT_TO_FP);
   1056 
   1057   case Instruction::IntToPtr: // Deliberate fall-through.
   1058   case Instruction::PtrToInt: {
   1059     EVT SrcVT = TLI.getValueType(I->getOperand(0)->getType());
   1060     EVT DstVT = TLI.getValueType(I->getType());
   1061     if (DstVT.bitsGT(SrcVT))
   1062       return SelectCast(I, ISD::ZERO_EXTEND);
   1063     if (DstVT.bitsLT(SrcVT))
   1064       return SelectCast(I, ISD::TRUNCATE);
   1065     unsigned Reg = getRegForValue(I->getOperand(0));
   1066     if (Reg == 0) return false;
   1067     UpdateValueMap(I, Reg);
   1068     return true;
   1069   }
   1070 
   1071   case Instruction::ExtractValue:
   1072     return SelectExtractValue(I);
   1073 
   1074   case Instruction::PHI:
   1075     llvm_unreachable("FastISel shouldn't visit PHI nodes!");
   1076 
   1077   default:
   1078     // Unhandled instruction. Halt "fast" selection and bail.
   1079     return false;
   1080   }
   1081 }
   1082 
   1083 FastISel::FastISel(FunctionLoweringInfo &funcInfo,
   1084                    const TargetLibraryInfo *libInfo)
   1085   : FuncInfo(funcInfo),
   1086     MRI(FuncInfo.MF->getRegInfo()),
   1087     MFI(*FuncInfo.MF->getFrameInfo()),
   1088     MCP(*FuncInfo.MF->getConstantPool()),
   1089     TM(FuncInfo.MF->getTarget()),
   1090     TD(*TM.getDataLayout()),
   1091     TII(*TM.getInstrInfo()),
   1092     TLI(*TM.getTargetLowering()),
   1093     TRI(*TM.getRegisterInfo()),
   1094     LibInfo(libInfo) {
   1095 }
   1096 
   1097 FastISel::~FastISel() {}
   1098 
   1099 bool FastISel::FastLowerArguments() {
   1100   return false;
   1101 }
   1102 
   1103 unsigned FastISel::FastEmit_(MVT, MVT,
   1104                              unsigned) {
   1105   return 0;
   1106 }
   1107 
   1108 unsigned FastISel::FastEmit_r(MVT, MVT,
   1109                               unsigned,
   1110                               unsigned /*Op0*/, bool /*Op0IsKill*/) {
   1111   return 0;
   1112 }
   1113 
   1114 unsigned FastISel::FastEmit_rr(MVT, MVT,
   1115                                unsigned,
   1116                                unsigned /*Op0*/, bool /*Op0IsKill*/,
   1117                                unsigned /*Op1*/, bool /*Op1IsKill*/) {
   1118   return 0;
   1119 }
   1120 
   1121 unsigned FastISel::FastEmit_i(MVT, MVT, unsigned, uint64_t /*Imm*/) {
   1122   return 0;
   1123 }
   1124 
   1125 unsigned FastISel::FastEmit_f(MVT, MVT,
   1126                               unsigned, const ConstantFP * /*FPImm*/) {
   1127   return 0;
   1128 }
   1129 
   1130 unsigned FastISel::FastEmit_ri(MVT, MVT,
   1131                                unsigned,
   1132                                unsigned /*Op0*/, bool /*Op0IsKill*/,
   1133                                uint64_t /*Imm*/) {
   1134   return 0;
   1135 }
   1136 
   1137 unsigned FastISel::FastEmit_rf(MVT, MVT,
   1138                                unsigned,
   1139                                unsigned /*Op0*/, bool /*Op0IsKill*/,
   1140                                const ConstantFP * /*FPImm*/) {
   1141   return 0;
   1142 }
   1143 
   1144 unsigned FastISel::FastEmit_rri(MVT, MVT,
   1145                                 unsigned,
   1146                                 unsigned /*Op0*/, bool /*Op0IsKill*/,
   1147                                 unsigned /*Op1*/, bool /*Op1IsKill*/,
   1148                                 uint64_t /*Imm*/) {
   1149   return 0;
   1150 }
   1151 
   1152 /// FastEmit_ri_ - This method is a wrapper of FastEmit_ri. It first tries
   1153 /// to emit an instruction with an immediate operand using FastEmit_ri.
   1154 /// If that fails, it materializes the immediate into a register and try
   1155 /// FastEmit_rr instead.
   1156 unsigned FastISel::FastEmit_ri_(MVT VT, unsigned Opcode,
   1157                                 unsigned Op0, bool Op0IsKill,
   1158                                 uint64_t Imm, MVT ImmType) {
   1159   // If this is a multiply by a power of two, emit this as a shift left.
   1160   if (Opcode == ISD::MUL && isPowerOf2_64(Imm)) {
   1161     Opcode = ISD::SHL;
   1162     Imm = Log2_64(Imm);
   1163   } else if (Opcode == ISD::UDIV && isPowerOf2_64(Imm)) {
   1164     // div x, 8 -> srl x, 3
   1165     Opcode = ISD::SRL;
   1166     Imm = Log2_64(Imm);
   1167   }
   1168 
   1169   // Horrible hack (to be removed), check to make sure shift amounts are
   1170   // in-range.
   1171   if ((Opcode == ISD::SHL || Opcode == ISD::SRA || Opcode == ISD::SRL) &&
   1172       Imm >= VT.getSizeInBits())
   1173     return 0;
   1174 
   1175   // First check if immediate type is legal. If not, we can't use the ri form.
   1176   unsigned ResultReg = FastEmit_ri(VT, VT, Opcode, Op0, Op0IsKill, Imm);
   1177   if (ResultReg != 0)
   1178     return ResultReg;
   1179   unsigned MaterialReg = FastEmit_i(ImmType, ImmType, ISD::Constant, Imm);
   1180   if (MaterialReg == 0) {
   1181     // This is a bit ugly/slow, but failing here means falling out of
   1182     // fast-isel, which would be very slow.
   1183     IntegerType *ITy = IntegerType::get(FuncInfo.Fn->getContext(),
   1184                                               VT.getSizeInBits());
   1185     MaterialReg = getRegForValue(ConstantInt::get(ITy, Imm));
   1186   }
   1187   return FastEmit_rr(VT, VT, Opcode,
   1188                      Op0, Op0IsKill,
   1189                      MaterialReg, /*Kill=*/true);
   1190 }
   1191 
   1192 unsigned FastISel::createResultReg(const TargetRegisterClass* RC) {
   1193   return MRI.createVirtualRegister(RC);
   1194 }
   1195 
   1196 unsigned FastISel::FastEmitInst_(unsigned MachineInstOpcode,
   1197                                  const TargetRegisterClass* RC) {
   1198   unsigned ResultReg = createResultReg(RC);
   1199   const MCInstrDesc &II = TII.get(MachineInstOpcode);
   1200 
   1201   BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II, ResultReg);
   1202   return ResultReg;
   1203 }
   1204 
   1205 unsigned FastISel::FastEmitInst_r(unsigned MachineInstOpcode,
   1206                                   const TargetRegisterClass *RC,
   1207                                   unsigned Op0, bool Op0IsKill) {
   1208   unsigned ResultReg = createResultReg(RC);
   1209   const MCInstrDesc &II = TII.get(MachineInstOpcode);
   1210 
   1211   if (II.getNumDefs() >= 1)
   1212     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II, ResultReg)
   1213       .addReg(Op0, Op0IsKill * RegState::Kill);
   1214   else {
   1215     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
   1216       .addReg(Op0, Op0IsKill * RegState::Kill);
   1217     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
   1218             ResultReg).addReg(II.ImplicitDefs[0]);
   1219   }
   1220 
   1221   return ResultReg;
   1222 }
   1223 
   1224 unsigned FastISel::FastEmitInst_rr(unsigned MachineInstOpcode,
   1225                                    const TargetRegisterClass *RC,
   1226                                    unsigned Op0, bool Op0IsKill,
   1227                                    unsigned Op1, bool Op1IsKill) {
   1228   unsigned ResultReg = createResultReg(RC);
   1229   const MCInstrDesc &II = TII.get(MachineInstOpcode);
   1230 
   1231   if (II.getNumDefs() >= 1)
   1232     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II, ResultReg)
   1233       .addReg(Op0, Op0IsKill * RegState::Kill)
   1234       .addReg(Op1, Op1IsKill * RegState::Kill);
   1235   else {
   1236     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
   1237       .addReg(Op0, Op0IsKill * RegState::Kill)
   1238       .addReg(Op1, Op1IsKill * RegState::Kill);
   1239     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
   1240             ResultReg).addReg(II.ImplicitDefs[0]);
   1241   }
   1242   return ResultReg;
   1243 }
   1244 
   1245 unsigned FastISel::FastEmitInst_rrr(unsigned MachineInstOpcode,
   1246                                    const TargetRegisterClass *RC,
   1247                                    unsigned Op0, bool Op0IsKill,
   1248                                    unsigned Op1, bool Op1IsKill,
   1249                                    unsigned Op2, bool Op2IsKill) {
   1250   unsigned ResultReg = createResultReg(RC);
   1251   const MCInstrDesc &II = TII.get(MachineInstOpcode);
   1252 
   1253   if (II.getNumDefs() >= 1)
   1254     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II, ResultReg)
   1255       .addReg(Op0, Op0IsKill * RegState::Kill)
   1256       .addReg(Op1, Op1IsKill * RegState::Kill)
   1257       .addReg(Op2, Op2IsKill * RegState::Kill);
   1258   else {
   1259     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
   1260       .addReg(Op0, Op0IsKill * RegState::Kill)
   1261       .addReg(Op1, Op1IsKill * RegState::Kill)
   1262       .addReg(Op2, Op2IsKill * RegState::Kill);
   1263     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
   1264             ResultReg).addReg(II.ImplicitDefs[0]);
   1265   }
   1266   return ResultReg;
   1267 }
   1268 
   1269 unsigned FastISel::FastEmitInst_ri(unsigned MachineInstOpcode,
   1270                                    const TargetRegisterClass *RC,
   1271                                    unsigned Op0, bool Op0IsKill,
   1272                                    uint64_t Imm) {
   1273   unsigned ResultReg = createResultReg(RC);
   1274   const MCInstrDesc &II = TII.get(MachineInstOpcode);
   1275 
   1276   if (II.getNumDefs() >= 1)
   1277     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II, ResultReg)
   1278       .addReg(Op0, Op0IsKill * RegState::Kill)
   1279       .addImm(Imm);
   1280   else {
   1281     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
   1282       .addReg(Op0, Op0IsKill * RegState::Kill)
   1283       .addImm(Imm);
   1284     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
   1285             ResultReg).addReg(II.ImplicitDefs[0]);
   1286   }
   1287   return ResultReg;
   1288 }
   1289 
   1290 unsigned FastISel::FastEmitInst_rii(unsigned MachineInstOpcode,
   1291                                    const TargetRegisterClass *RC,
   1292                                    unsigned Op0, bool Op0IsKill,
   1293                                    uint64_t Imm1, uint64_t Imm2) {
   1294   unsigned ResultReg = createResultReg(RC);
   1295   const MCInstrDesc &II = TII.get(MachineInstOpcode);
   1296 
   1297   if (II.getNumDefs() >= 1)
   1298     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II, ResultReg)
   1299       .addReg(Op0, Op0IsKill * RegState::Kill)
   1300       .addImm(Imm1)
   1301       .addImm(Imm2);
   1302   else {
   1303     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
   1304       .addReg(Op0, Op0IsKill * RegState::Kill)
   1305       .addImm(Imm1)
   1306       .addImm(Imm2);
   1307     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
   1308             ResultReg).addReg(II.ImplicitDefs[0]);
   1309   }
   1310   return ResultReg;
   1311 }
   1312 
   1313 unsigned FastISel::FastEmitInst_rf(unsigned MachineInstOpcode,
   1314                                    const TargetRegisterClass *RC,
   1315                                    unsigned Op0, bool Op0IsKill,
   1316                                    const ConstantFP *FPImm) {
   1317   unsigned ResultReg = createResultReg(RC);
   1318   const MCInstrDesc &II = TII.get(MachineInstOpcode);
   1319 
   1320   if (II.getNumDefs() >= 1)
   1321     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II, ResultReg)
   1322       .addReg(Op0, Op0IsKill * RegState::Kill)
   1323       .addFPImm(FPImm);
   1324   else {
   1325     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
   1326       .addReg(Op0, Op0IsKill * RegState::Kill)
   1327       .addFPImm(FPImm);
   1328     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
   1329             ResultReg).addReg(II.ImplicitDefs[0]);
   1330   }
   1331   return ResultReg;
   1332 }
   1333 
   1334 unsigned FastISel::FastEmitInst_rri(unsigned MachineInstOpcode,
   1335                                     const TargetRegisterClass *RC,
   1336                                     unsigned Op0, bool Op0IsKill,
   1337                                     unsigned Op1, bool Op1IsKill,
   1338                                     uint64_t Imm) {
   1339   unsigned ResultReg = createResultReg(RC);
   1340   const MCInstrDesc &II = TII.get(MachineInstOpcode);
   1341 
   1342   if (II.getNumDefs() >= 1)
   1343     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II, ResultReg)
   1344       .addReg(Op0, Op0IsKill * RegState::Kill)
   1345       .addReg(Op1, Op1IsKill * RegState::Kill)
   1346       .addImm(Imm);
   1347   else {
   1348     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
   1349       .addReg(Op0, Op0IsKill * RegState::Kill)
   1350       .addReg(Op1, Op1IsKill * RegState::Kill)
   1351       .addImm(Imm);
   1352     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
   1353             ResultReg).addReg(II.ImplicitDefs[0]);
   1354   }
   1355   return ResultReg;
   1356 }
   1357 
   1358 unsigned FastISel::FastEmitInst_rrii(unsigned MachineInstOpcode,
   1359                                      const TargetRegisterClass *RC,
   1360                                      unsigned Op0, bool Op0IsKill,
   1361                                      unsigned Op1, bool Op1IsKill,
   1362                                      uint64_t Imm1, uint64_t Imm2) {
   1363   unsigned ResultReg = createResultReg(RC);
   1364   const MCInstrDesc &II = TII.get(MachineInstOpcode);
   1365 
   1366   if (II.getNumDefs() >= 1)
   1367     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II, ResultReg)
   1368       .addReg(Op0, Op0IsKill * RegState::Kill)
   1369       .addReg(Op1, Op1IsKill * RegState::Kill)
   1370       .addImm(Imm1).addImm(Imm2);
   1371   else {
   1372     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
   1373       .addReg(Op0, Op0IsKill * RegState::Kill)
   1374       .addReg(Op1, Op1IsKill * RegState::Kill)
   1375       .addImm(Imm1).addImm(Imm2);
   1376     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
   1377             ResultReg).addReg(II.ImplicitDefs[0]);
   1378   }
   1379   return ResultReg;
   1380 }
   1381 
   1382 unsigned FastISel::FastEmitInst_i(unsigned MachineInstOpcode,
   1383                                   const TargetRegisterClass *RC,
   1384                                   uint64_t Imm) {
   1385   unsigned ResultReg = createResultReg(RC);
   1386   const MCInstrDesc &II = TII.get(MachineInstOpcode);
   1387 
   1388   if (II.getNumDefs() >= 1)
   1389     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II, ResultReg).addImm(Imm);
   1390   else {
   1391     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II).addImm(Imm);
   1392     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
   1393             ResultReg).addReg(II.ImplicitDefs[0]);
   1394   }
   1395   return ResultReg;
   1396 }
   1397 
   1398 unsigned FastISel::FastEmitInst_ii(unsigned MachineInstOpcode,
   1399                                   const TargetRegisterClass *RC,
   1400                                   uint64_t Imm1, uint64_t Imm2) {
   1401   unsigned ResultReg = createResultReg(RC);
   1402   const MCInstrDesc &II = TII.get(MachineInstOpcode);
   1403 
   1404   if (II.getNumDefs() >= 1)
   1405     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II, ResultReg)
   1406       .addImm(Imm1).addImm(Imm2);
   1407   else {
   1408     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II).addImm(Imm1).addImm(Imm2);
   1409     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
   1410             ResultReg).addReg(II.ImplicitDefs[0]);
   1411   }
   1412   return ResultReg;
   1413 }
   1414 
   1415 unsigned FastISel::FastEmitInst_extractsubreg(MVT RetVT,
   1416                                               unsigned Op0, bool Op0IsKill,
   1417                                               uint32_t Idx) {
   1418   unsigned ResultReg = createResultReg(TLI.getRegClassFor(RetVT));
   1419   assert(TargetRegisterInfo::isVirtualRegister(Op0) &&
   1420          "Cannot yet extract from physregs");
   1421   const TargetRegisterClass *RC = MRI.getRegClass(Op0);
   1422   MRI.constrainRegClass(Op0, TRI.getSubClassWithSubReg(RC, Idx));
   1423   BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt,
   1424           DL, TII.get(TargetOpcode::COPY), ResultReg)
   1425     .addReg(Op0, getKillRegState(Op0IsKill), Idx);
   1426   return ResultReg;
   1427 }
   1428 
   1429 /// FastEmitZExtFromI1 - Emit MachineInstrs to compute the value of Op
   1430 /// with all but the least significant bit set to zero.
   1431 unsigned FastISel::FastEmitZExtFromI1(MVT VT, unsigned Op0, bool Op0IsKill) {
   1432   return FastEmit_ri(VT, VT, ISD::AND, Op0, Op0IsKill, 1);
   1433 }
   1434 
   1435 /// HandlePHINodesInSuccessorBlocks - Handle PHI nodes in successor blocks.
   1436 /// Emit code to ensure constants are copied into registers when needed.
   1437 /// Remember the virtual registers that need to be added to the Machine PHI
   1438 /// nodes as input.  We cannot just directly add them, because expansion
   1439 /// might result in multiple MBB's for one BB.  As such, the start of the
   1440 /// BB might correspond to a different MBB than the end.
   1441 bool FastISel::HandlePHINodesInSuccessorBlocks(const BasicBlock *LLVMBB) {
   1442   const TerminatorInst *TI = LLVMBB->getTerminator();
   1443 
   1444   SmallPtrSet<MachineBasicBlock *, 4> SuccsHandled;
   1445   unsigned OrigNumPHINodesToUpdate = FuncInfo.PHINodesToUpdate.size();
   1446 
   1447   // Check successor nodes' PHI nodes that expect a constant to be available
   1448   // from this block.
   1449   for (unsigned succ = 0, e = TI->getNumSuccessors(); succ != e; ++succ) {
   1450     const BasicBlock *SuccBB = TI->getSuccessor(succ);
   1451     if (!isa<PHINode>(SuccBB->begin())) continue;
   1452     MachineBasicBlock *SuccMBB = FuncInfo.MBBMap[SuccBB];
   1453 
   1454     // If this terminator has multiple identical successors (common for
   1455     // switches), only handle each succ once.
   1456     if (!SuccsHandled.insert(SuccMBB)) continue;
   1457 
   1458     MachineBasicBlock::iterator MBBI = SuccMBB->begin();
   1459 
   1460     // At this point we know that there is a 1-1 correspondence between LLVM PHI
   1461     // nodes and Machine PHI nodes, but the incoming operands have not been
   1462     // emitted yet.
   1463     for (BasicBlock::const_iterator I = SuccBB->begin();
   1464          const PHINode *PN = dyn_cast<PHINode>(I); ++I) {
   1465 
   1466       // Ignore dead phi's.
   1467       if (PN->use_empty()) continue;
   1468 
   1469       // Only handle legal types. Two interesting things to note here. First,
   1470       // by bailing out early, we may leave behind some dead instructions,
   1471       // since SelectionDAG's HandlePHINodesInSuccessorBlocks will insert its
   1472       // own moves. Second, this check is necessary because FastISel doesn't
   1473       // use CreateRegs to create registers, so it always creates
   1474       // exactly one register for each non-void instruction.
   1475       EVT VT = TLI.getValueType(PN->getType(), /*AllowUnknown=*/true);
   1476       if (VT == MVT::Other || !TLI.isTypeLegal(VT)) {
   1477         // Handle integer promotions, though, because they're common and easy.
   1478         if (VT == MVT::i1 || VT == MVT::i8 || VT == MVT::i16)
   1479           VT = TLI.getTypeToTransformTo(LLVMBB->getContext(), VT);
   1480         else {
   1481           FuncInfo.PHINodesToUpdate.resize(OrigNumPHINodesToUpdate);
   1482           return false;
   1483         }
   1484       }
   1485 
   1486       const Value *PHIOp = PN->getIncomingValueForBlock(LLVMBB);
   1487 
   1488       // Set the DebugLoc for the copy. Prefer the location of the operand
   1489       // if there is one; use the location of the PHI otherwise.
   1490       DL = PN->getDebugLoc();
   1491       if (const Instruction *Inst = dyn_cast<Instruction>(PHIOp))
   1492         DL = Inst->getDebugLoc();
   1493 
   1494       unsigned Reg = getRegForValue(PHIOp);
   1495       if (Reg == 0) {
   1496         FuncInfo.PHINodesToUpdate.resize(OrigNumPHINodesToUpdate);
   1497         return false;
   1498       }
   1499       FuncInfo.PHINodesToUpdate.push_back(std::make_pair(MBBI++, Reg));
   1500       DL = DebugLoc();
   1501     }
   1502   }
   1503 
   1504   return true;
   1505 }
   1506