1. merge fast-isel-shift-imm.ll into fast-isel-x86-64.ll
[oota-llvm.git] / lib / CodeGen / SelectionDAG / FastISel.cpp
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 #include "llvm/Function.h"
43 #include "llvm/GlobalVariable.h"
44 #include "llvm/Instructions.h"
45 #include "llvm/IntrinsicInst.h"
46 #include "llvm/Operator.h"
47 #include "llvm/CodeGen/FastISel.h"
48 #include "llvm/CodeGen/FunctionLoweringInfo.h"
49 #include "llvm/CodeGen/MachineInstrBuilder.h"
50 #include "llvm/CodeGen/MachineModuleInfo.h"
51 #include "llvm/CodeGen/MachineRegisterInfo.h"
52 #include "llvm/Analysis/DebugInfo.h"
53 #include "llvm/Analysis/Loads.h"
54 #include "llvm/Target/TargetData.h"
55 #include "llvm/Target/TargetInstrInfo.h"
56 #include "llvm/Target/TargetLowering.h"
57 #include "llvm/Target/TargetMachine.h"
58 #include "llvm/Support/ErrorHandling.h"
59 #include "llvm/Support/Debug.h"
60 using namespace llvm;
61
62 /// startNewBlock - Set the current block to which generated machine
63 /// instructions will be appended, and clear the local CSE map.
64 ///
65 void FastISel::startNewBlock() {
66   LocalValueMap.clear();
67
68   // Start out as null, meaining no local-value instructions have
69   // been emitted.
70   LastLocalValue = 0;
71
72   // Advance the last local value past any EH_LABEL instructions.
73   MachineBasicBlock::iterator
74     I = FuncInfo.MBB->begin(), E = FuncInfo.MBB->end();
75   while (I != E && I->getOpcode() == TargetOpcode::EH_LABEL) {
76     LastLocalValue = I;
77     ++I;
78   }
79 }
80
81 bool FastISel::hasTrivialKill(const Value *V) const {
82   // Don't consider constants or arguments to have trivial kills.
83   const Instruction *I = dyn_cast<Instruction>(V);
84   if (!I)
85     return false;
86
87   // No-op casts are trivially coalesced by fast-isel.
88   if (const CastInst *Cast = dyn_cast<CastInst>(I))
89     if (Cast->isNoopCast(TD.getIntPtrType(Cast->getContext())) &&
90         !hasTrivialKill(Cast->getOperand(0)))
91       return false;
92
93   // Only instructions with a single use in the same basic block are considered
94   // to have trivial kills.
95   return I->hasOneUse() &&
96          !(I->getOpcode() == Instruction::BitCast ||
97            I->getOpcode() == Instruction::PtrToInt ||
98            I->getOpcode() == Instruction::IntToPtr) &&
99          cast<Instruction>(*I->use_begin())->getParent() == I->getParent();
100 }
101
102 unsigned FastISel::getRegForValue(const Value *V) {
103   EVT RealVT = TLI.getValueType(V->getType(), /*AllowUnknown=*/true);
104   // Don't handle non-simple values in FastISel.
105   if (!RealVT.isSimple())
106     return 0;
107
108   // Ignore illegal types. We must do this before looking up the value
109   // in ValueMap because Arguments are given virtual registers regardless
110   // of whether FastISel can handle them.
111   MVT VT = RealVT.getSimpleVT();
112   if (!TLI.isTypeLegal(VT)) {
113     // Promote MVT::i1 to a legal type though, because it's common and easy.
114     if (VT == MVT::i1)
115       VT = TLI.getTypeToTransformTo(V->getContext(), VT).getSimpleVT();
116     else
117       return 0;
118   }
119
120   // Look up the value to see if we already have a register for it. We
121   // cache values defined by Instructions across blocks, and other values
122   // only locally. This is because Instructions already have the SSA
123   // def-dominates-use requirement enforced.
124   DenseMap<const Value *, unsigned>::iterator I = FuncInfo.ValueMap.find(V);
125   if (I != FuncInfo.ValueMap.end())
126     return I->second;
127
128   unsigned Reg = LocalValueMap[V];
129   if (Reg != 0)
130     return Reg;
131
132   // In bottom-up mode, just create the virtual register which will be used
133   // to hold the value. It will be materialized later.
134   if (isa<Instruction>(V) &&
135       (!isa<AllocaInst>(V) ||
136        !FuncInfo.StaticAllocaMap.count(cast<AllocaInst>(V))))
137     return FuncInfo.InitializeRegForValue(V);
138
139   SavePoint SaveInsertPt = enterLocalValueArea();
140
141   // Materialize the value in a register. Emit any instructions in the
142   // local value area.
143   Reg = materializeRegForValue(V, VT);
144
145   leaveLocalValueArea(SaveInsertPt);
146
147   return Reg;
148 }
149
150 /// materializeRegForValue - Helper for getRegForValue. This function is
151 /// called when the value isn't already available in a register and must
152 /// be materialized with new instructions.
153 unsigned FastISel::materializeRegForValue(const Value *V, MVT VT) {
154   unsigned Reg = 0;
155
156   if (const ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
157     if (CI->getValue().getActiveBits() <= 64)
158       Reg = FastEmit_i(VT, VT, ISD::Constant, CI->getZExtValue());
159   } else if (isa<AllocaInst>(V)) {
160     Reg = TargetMaterializeAlloca(cast<AllocaInst>(V));
161   } else if (isa<ConstantPointerNull>(V)) {
162     // Translate this as an integer zero so that it can be
163     // local-CSE'd with actual integer zeros.
164     Reg =
165       getRegForValue(Constant::getNullValue(TD.getIntPtrType(V->getContext())));
166   } else if (const ConstantFP *CF = dyn_cast<ConstantFP>(V)) {
167     // Try to emit the constant directly.
168     Reg = FastEmit_f(VT, VT, ISD::ConstantFP, CF);
169
170     if (!Reg) {
171       // Try to emit the constant by using an integer constant with a cast.
172       const APFloat &Flt = CF->getValueAPF();
173       EVT IntVT = TLI.getPointerTy();
174
175       uint64_t x[2];
176       uint32_t IntBitWidth = IntVT.getSizeInBits();
177       bool isExact;
178       (void) Flt.convertToInteger(x, IntBitWidth, /*isSigned=*/true,
179                                 APFloat::rmTowardZero, &isExact);
180       if (isExact) {
181         APInt IntVal(IntBitWidth, 2, x);
182
183         unsigned IntegerReg =
184           getRegForValue(ConstantInt::get(V->getContext(), IntVal));
185         if (IntegerReg != 0)
186           Reg = FastEmit_r(IntVT.getSimpleVT(), VT, ISD::SINT_TO_FP,
187                            IntegerReg, /*Kill=*/false);
188       }
189     }
190   } else if (const Operator *Op = dyn_cast<Operator>(V)) {
191     if (!SelectOperator(Op, Op->getOpcode()))
192       if (!isa<Instruction>(Op) ||
193           !TargetSelectInstruction(cast<Instruction>(Op)))
194         return 0;
195     Reg = lookUpRegForValue(Op);
196   } else if (isa<UndefValue>(V)) {
197     Reg = createResultReg(TLI.getRegClassFor(VT));
198     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL,
199             TII.get(TargetOpcode::IMPLICIT_DEF), Reg);
200   }
201
202   // If target-independent code couldn't handle the value, give target-specific
203   // code a try.
204   if (!Reg && isa<Constant>(V))
205     Reg = TargetMaterializeConstant(cast<Constant>(V));
206
207   // Don't cache constant materializations in the general ValueMap.
208   // To do so would require tracking what uses they dominate.
209   if (Reg != 0) {
210     LocalValueMap[V] = Reg;
211     LastLocalValue = MRI.getVRegDef(Reg);
212   }
213   return Reg;
214 }
215
216 unsigned FastISel::lookUpRegForValue(const Value *V) {
217   // Look up the value to see if we already have a register for it. We
218   // cache values defined by Instructions across blocks, and other values
219   // only locally. This is because Instructions already have the SSA
220   // def-dominates-use requirement enforced.
221   DenseMap<const Value *, unsigned>::iterator I = FuncInfo.ValueMap.find(V);
222   if (I != FuncInfo.ValueMap.end())
223     return I->second;
224   return LocalValueMap[V];
225 }
226
227 /// UpdateValueMap - Update the value map to include the new mapping for this
228 /// instruction, or insert an extra copy to get the result in a previous
229 /// determined register.
230 /// NOTE: This is only necessary because we might select a block that uses
231 /// a value before we select the block that defines the value.  It might be
232 /// possible to fix this by selecting blocks in reverse postorder.
233 unsigned FastISel::UpdateValueMap(const Value *I, unsigned Reg) {
234   if (!isa<Instruction>(I)) {
235     LocalValueMap[I] = Reg;
236     return Reg;
237   }
238
239   unsigned &AssignedReg = FuncInfo.ValueMap[I];
240   if (AssignedReg == 0)
241     // Use the new register.
242     AssignedReg = Reg;
243   else if (Reg != AssignedReg) {
244     // Arrange for uses of AssignedReg to be replaced by uses of Reg.
245     FuncInfo.RegFixups[AssignedReg] = Reg;
246
247     AssignedReg = Reg;
248   }
249
250   return AssignedReg;
251 }
252
253 std::pair<unsigned, bool> FastISel::getRegForGEPIndex(const Value *Idx) {
254   unsigned IdxN = getRegForValue(Idx);
255   if (IdxN == 0)
256     // Unhandled operand. Halt "fast" selection and bail.
257     return std::pair<unsigned, bool>(0, false);
258
259   bool IdxNIsKill = hasTrivialKill(Idx);
260
261   // If the index is smaller or larger than intptr_t, truncate or extend it.
262   MVT PtrVT = TLI.getPointerTy();
263   EVT IdxVT = EVT::getEVT(Idx->getType(), /*HandleUnknown=*/false);
264   if (IdxVT.bitsLT(PtrVT)) {
265     IdxN = FastEmit_r(IdxVT.getSimpleVT(), PtrVT, ISD::SIGN_EXTEND,
266                       IdxN, IdxNIsKill);
267     IdxNIsKill = true;
268   }
269   else if (IdxVT.bitsGT(PtrVT)) {
270     IdxN = FastEmit_r(IdxVT.getSimpleVT(), PtrVT, ISD::TRUNCATE,
271                       IdxN, IdxNIsKill);
272     IdxNIsKill = true;
273   }
274   return std::pair<unsigned, bool>(IdxN, IdxNIsKill);
275 }
276
277 void FastISel::recomputeInsertPt() {
278   if (getLastLocalValue()) {
279     FuncInfo.InsertPt = getLastLocalValue();
280     FuncInfo.MBB = FuncInfo.InsertPt->getParent();
281     ++FuncInfo.InsertPt;
282   } else
283     FuncInfo.InsertPt = FuncInfo.MBB->getFirstNonPHI();
284
285   // Now skip past any EH_LABELs, which must remain at the beginning.
286   while (FuncInfo.InsertPt != FuncInfo.MBB->end() &&
287          FuncInfo.InsertPt->getOpcode() == TargetOpcode::EH_LABEL)
288     ++FuncInfo.InsertPt;
289 }
290
291 FastISel::SavePoint FastISel::enterLocalValueArea() {
292   MachineBasicBlock::iterator OldInsertPt = FuncInfo.InsertPt;
293   DebugLoc OldDL = DL;
294   recomputeInsertPt();
295   DL = DebugLoc();
296   SavePoint SP = { OldInsertPt, OldDL };
297   return SP;
298 }
299
300 void FastISel::leaveLocalValueArea(SavePoint OldInsertPt) {
301   if (FuncInfo.InsertPt != FuncInfo.MBB->begin())
302     LastLocalValue = llvm::prior(FuncInfo.InsertPt);
303
304   // Restore the previous insert position.
305   FuncInfo.InsertPt = OldInsertPt.InsertPt;
306   DL = OldInsertPt.DL;
307 }
308
309 /// SelectBinaryOp - Select and emit code for a binary operator instruction,
310 /// which has an opcode which directly corresponds to the given ISD opcode.
311 ///
312 bool FastISel::SelectBinaryOp(const User *I, unsigned ISDOpcode) {
313   EVT VT = EVT::getEVT(I->getType(), /*HandleUnknown=*/true);
314   if (VT == MVT::Other || !VT.isSimple())
315     // Unhandled type. Halt "fast" selection and bail.
316     return false;
317
318   // We only handle legal types. For example, on x86-32 the instruction
319   // selector contains all of the 64-bit instructions from x86-64,
320   // under the assumption that i64 won't be used if the target doesn't
321   // support it.
322   if (!TLI.isTypeLegal(VT)) {
323     // MVT::i1 is special. Allow AND, OR, or XOR because they
324     // don't require additional zeroing, which makes them easy.
325     if (VT == MVT::i1 &&
326         (ISDOpcode == ISD::AND || ISDOpcode == ISD::OR ||
327          ISDOpcode == ISD::XOR))
328       VT = TLI.getTypeToTransformTo(I->getContext(), VT);
329     else
330       return false;
331   }
332
333   // Check if the first operand is a constant, and handle it as "ri".  At -O0,
334   // we don't have anything that canonicalizes operand order.
335   if (ConstantInt *CI = dyn_cast<ConstantInt>(I->getOperand(0)))
336     if (isa<Instruction>(I) && cast<Instruction>(I)->isCommutative()) {
337       unsigned Op1 = getRegForValue(I->getOperand(1));
338       if (Op1 == 0) return false;
339
340       bool Op1IsKill = hasTrivialKill(I->getOperand(1));
341       
342       unsigned ResultReg = FastEmit_ri_(VT.getSimpleVT(), ISDOpcode, Op1,
343                                         Op1IsKill, CI->getZExtValue(),
344                                         VT.getSimpleVT());
345       if (ResultReg == 0) return false;
346       
347       // We successfully emitted code for the given LLVM Instruction.
348       UpdateValueMap(I, ResultReg);
349       return true;
350     }
351   
352   
353   unsigned Op0 = getRegForValue(I->getOperand(0));
354   if (Op0 == 0)   // Unhandled operand. Halt "fast" selection and bail.
355     return false;
356
357   bool Op0IsKill = hasTrivialKill(I->getOperand(0));
358
359   // Check if the second operand is a constant and handle it appropriately.
360   if (ConstantInt *CI = dyn_cast<ConstantInt>(I->getOperand(1))) {
361     uint64_t Imm = CI->getZExtValue();
362     
363     unsigned ResultReg = FastEmit_ri_(VT.getSimpleVT(), ISDOpcode, Op0,
364                                       Op0IsKill, Imm, VT.getSimpleVT());
365     if (ResultReg == 0) return false;
366     
367     // We successfully emitted code for the given LLVM Instruction.
368     UpdateValueMap(I, ResultReg);
369     return true;
370   }
371
372   // Check if the second operand is a constant float.
373   if (ConstantFP *CF = dyn_cast<ConstantFP>(I->getOperand(1))) {
374     unsigned ResultReg = FastEmit_rf(VT.getSimpleVT(), VT.getSimpleVT(),
375                                      ISDOpcode, Op0, Op0IsKill, CF);
376     if (ResultReg != 0) {
377       // We successfully emitted code for the given LLVM Instruction.
378       UpdateValueMap(I, ResultReg);
379       return true;
380     }
381   }
382
383   unsigned Op1 = getRegForValue(I->getOperand(1));
384   if (Op1 == 0)
385     // Unhandled operand. Halt "fast" selection and bail.
386     return false;
387
388   bool Op1IsKill = hasTrivialKill(I->getOperand(1));
389
390   // Now we have both operands in registers. Emit the instruction.
391   unsigned ResultReg = FastEmit_rr(VT.getSimpleVT(), VT.getSimpleVT(),
392                                    ISDOpcode,
393                                    Op0, Op0IsKill,
394                                    Op1, Op1IsKill);
395   if (ResultReg == 0)
396     // Target-specific code wasn't able to find a machine opcode for
397     // the given ISD opcode and type. Halt "fast" selection and bail.
398     return false;
399
400   // We successfully emitted code for the given LLVM Instruction.
401   UpdateValueMap(I, ResultReg);
402   return true;
403 }
404
405 bool FastISel::SelectGetElementPtr(const User *I) {
406   unsigned N = getRegForValue(I->getOperand(0));
407   if (N == 0)
408     // Unhandled operand. Halt "fast" selection and bail.
409     return false;
410
411   bool NIsKill = hasTrivialKill(I->getOperand(0));
412
413   const Type *Ty = I->getOperand(0)->getType();
414   MVT VT = TLI.getPointerTy();
415   for (GetElementPtrInst::const_op_iterator OI = I->op_begin()+1,
416        E = I->op_end(); OI != E; ++OI) {
417     const Value *Idx = *OI;
418     if (const StructType *StTy = dyn_cast<StructType>(Ty)) {
419       unsigned Field = cast<ConstantInt>(Idx)->getZExtValue();
420       if (Field) {
421         // N = N + Offset
422         uint64_t Offs = TD.getStructLayout(StTy)->getElementOffset(Field);
423         // FIXME: This can be optimized by combining the add with a
424         // subsequent one.
425         N = FastEmit_ri_(VT, ISD::ADD, N, NIsKill, Offs, VT);
426         if (N == 0)
427           // Unhandled operand. Halt "fast" selection and bail.
428           return false;
429         NIsKill = true;
430       }
431       Ty = StTy->getElementType(Field);
432     } else {
433       Ty = cast<SequentialType>(Ty)->getElementType();
434
435       // If this is a constant subscript, handle it quickly.
436       if (const ConstantInt *CI = dyn_cast<ConstantInt>(Idx)) {
437         if (CI->isZero()) continue;
438         uint64_t Offs =
439           TD.getTypeAllocSize(Ty)*cast<ConstantInt>(CI)->getSExtValue();
440         N = FastEmit_ri_(VT, ISD::ADD, N, NIsKill, Offs, VT);
441         if (N == 0)
442           // Unhandled operand. Halt "fast" selection and bail.
443           return false;
444         NIsKill = true;
445         continue;
446       }
447
448       // N = N + Idx * ElementSize;
449       uint64_t ElementSize = TD.getTypeAllocSize(Ty);
450       std::pair<unsigned, bool> Pair = getRegForGEPIndex(Idx);
451       unsigned IdxN = Pair.first;
452       bool IdxNIsKill = Pair.second;
453       if (IdxN == 0)
454         // Unhandled operand. Halt "fast" selection and bail.
455         return false;
456
457       if (ElementSize != 1) {
458         IdxN = FastEmit_ri_(VT, ISD::MUL, IdxN, IdxNIsKill, ElementSize, VT);
459         if (IdxN == 0)
460           // Unhandled operand. Halt "fast" selection and bail.
461           return false;
462         IdxNIsKill = true;
463       }
464       N = FastEmit_rr(VT, VT, ISD::ADD, N, NIsKill, IdxN, IdxNIsKill);
465       if (N == 0)
466         // Unhandled operand. Halt "fast" selection and bail.
467         return false;
468     }
469   }
470
471   // We successfully emitted code for the given LLVM Instruction.
472   UpdateValueMap(I, N);
473   return true;
474 }
475
476 bool FastISel::SelectCall(const User *I) {
477   const Function *F = cast<CallInst>(I)->getCalledFunction();
478   if (!F) return false;
479
480   // Handle selected intrinsic function calls.
481   unsigned IID = F->getIntrinsicID();
482   switch (IID) {
483   default: break;
484   case Intrinsic::dbg_declare: {
485     const DbgDeclareInst *DI = cast<DbgDeclareInst>(I);
486     if (!DIVariable(DI->getVariable()).Verify() ||
487         !FuncInfo.MF->getMMI().hasDebugInfo())
488       return true;
489
490     const Value *Address = DI->getAddress();
491     if (!Address || isa<UndefValue>(Address) || isa<AllocaInst>(Address))
492       return true;
493
494     unsigned Reg = 0;
495     unsigned Offset = 0;
496     if (const Argument *Arg = dyn_cast<Argument>(Address)) {
497       if (Arg->hasByValAttr()) {
498         // Byval arguments' frame index is recorded during argument lowering.
499         // Use this info directly.
500         Offset = FuncInfo.getByValArgumentFrameIndex(Arg);
501         if (Offset)
502           Reg = TRI.getFrameRegister(*FuncInfo.MF);
503       }
504     }
505     if (!Reg)
506       Reg = getRegForValue(Address);
507
508     if (Reg)
509       BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL,
510               TII.get(TargetOpcode::DBG_VALUE))
511         .addReg(Reg, RegState::Debug).addImm(Offset)
512         .addMetadata(DI->getVariable());
513     return true;
514   }
515   case Intrinsic::dbg_value: {
516     // This form of DBG_VALUE is target-independent.
517     const DbgValueInst *DI = cast<DbgValueInst>(I);
518     const TargetInstrDesc &II = TII.get(TargetOpcode::DBG_VALUE);
519     const Value *V = DI->getValue();
520     if (!V) {
521       // Currently the optimizer can produce this; insert an undef to
522       // help debugging.  Probably the optimizer should not do this.
523       BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
524         .addReg(0U).addImm(DI->getOffset())
525         .addMetadata(DI->getVariable());
526     } else if (const ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
527       BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
528         .addImm(CI->getZExtValue()).addImm(DI->getOffset())
529         .addMetadata(DI->getVariable());
530     } else if (const ConstantFP *CF = dyn_cast<ConstantFP>(V)) {
531       BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
532         .addFPImm(CF).addImm(DI->getOffset())
533         .addMetadata(DI->getVariable());
534     } else if (unsigned Reg = lookUpRegForValue(V)) {
535       BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
536         .addReg(Reg, RegState::Debug).addImm(DI->getOffset())
537         .addMetadata(DI->getVariable());
538     } else {
539       // We can't yet handle anything else here because it would require
540       // generating code, thus altering codegen because of debug info.
541       DEBUG(dbgs() << "Dropping debug info for " << DI);
542     }
543     return true;
544   }
545   case Intrinsic::eh_exception: {
546     EVT VT = TLI.getValueType(I->getType());
547     switch (TLI.getOperationAction(ISD::EXCEPTIONADDR, VT)) {
548     default: break;
549     case TargetLowering::Expand: {
550       assert(FuncInfo.MBB->isLandingPad() &&
551              "Call to eh.exception not in landing pad!");
552       unsigned Reg = TLI.getExceptionAddressRegister();
553       const TargetRegisterClass *RC = TLI.getRegClassFor(VT);
554       unsigned ResultReg = createResultReg(RC);
555       BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
556               ResultReg).addReg(Reg);
557       UpdateValueMap(I, ResultReg);
558       return true;
559     }
560     }
561     break;
562   }
563   case Intrinsic::eh_selector: {
564     EVT VT = TLI.getValueType(I->getType());
565     switch (TLI.getOperationAction(ISD::EHSELECTION, VT)) {
566     default: break;
567     case TargetLowering::Expand: {
568       if (FuncInfo.MBB->isLandingPad())
569         AddCatchInfo(*cast<CallInst>(I), &FuncInfo.MF->getMMI(), FuncInfo.MBB);
570       else {
571 #ifndef NDEBUG
572         FuncInfo.CatchInfoLost.insert(cast<CallInst>(I));
573 #endif
574         // FIXME: Mark exception selector register as live in.  Hack for PR1508.
575         unsigned Reg = TLI.getExceptionSelectorRegister();
576         if (Reg) FuncInfo.MBB->addLiveIn(Reg);
577       }
578
579       unsigned Reg = TLI.getExceptionSelectorRegister();
580       EVT SrcVT = TLI.getPointerTy();
581       const TargetRegisterClass *RC = TLI.getRegClassFor(SrcVT);
582       unsigned ResultReg = createResultReg(RC);
583       BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
584               ResultReg).addReg(Reg);
585
586       bool ResultRegIsKill = hasTrivialKill(I);
587
588       // Cast the register to the type of the selector.
589       if (SrcVT.bitsGT(MVT::i32))
590         ResultReg = FastEmit_r(SrcVT.getSimpleVT(), MVT::i32, ISD::TRUNCATE,
591                                ResultReg, ResultRegIsKill);
592       else if (SrcVT.bitsLT(MVT::i32))
593         ResultReg = FastEmit_r(SrcVT.getSimpleVT(), MVT::i32,
594                                ISD::SIGN_EXTEND, ResultReg, ResultRegIsKill);
595       if (ResultReg == 0)
596         // Unhandled operand. Halt "fast" selection and bail.
597         return false;
598
599       UpdateValueMap(I, ResultReg);
600
601       return true;
602     }
603     }
604     break;
605   }
606   }
607
608   // An arbitrary call. Bail.
609   return false;
610 }
611
612 bool FastISel::SelectCast(const User *I, unsigned Opcode) {
613   EVT SrcVT = TLI.getValueType(I->getOperand(0)->getType());
614   EVT DstVT = TLI.getValueType(I->getType());
615
616   if (SrcVT == MVT::Other || !SrcVT.isSimple() ||
617       DstVT == MVT::Other || !DstVT.isSimple())
618     // Unhandled type. Halt "fast" selection and bail.
619     return false;
620
621   // Check if the destination type is legal. Or as a special case,
622   // it may be i1 if we're doing a truncate because that's
623   // easy and somewhat common.
624   if (!TLI.isTypeLegal(DstVT))
625     if (DstVT != MVT::i1 || Opcode != ISD::TRUNCATE)
626       // Unhandled type. Halt "fast" selection and bail.
627       return false;
628
629   // Check if the source operand is legal. Or as a special case,
630   // it may be i1 if we're doing zero-extension because that's
631   // easy and somewhat common.
632   if (!TLI.isTypeLegal(SrcVT))
633     if (SrcVT != MVT::i1 || Opcode != ISD::ZERO_EXTEND)
634       // Unhandled type. Halt "fast" selection and bail.
635       return false;
636
637   unsigned InputReg = getRegForValue(I->getOperand(0));
638   if (!InputReg)
639     // Unhandled operand.  Halt "fast" selection and bail.
640     return false;
641
642   bool InputRegIsKill = hasTrivialKill(I->getOperand(0));
643
644   // If the operand is i1, arrange for the high bits in the register to be zero.
645   if (SrcVT == MVT::i1) {
646    SrcVT = TLI.getTypeToTransformTo(I->getContext(), SrcVT);
647    InputReg = FastEmitZExtFromI1(SrcVT.getSimpleVT(), InputReg, InputRegIsKill);
648    if (!InputReg)
649      return false;
650    InputRegIsKill = true;
651   }
652   // If the result is i1, truncate to the target's type for i1 first.
653   if (DstVT == MVT::i1)
654     DstVT = TLI.getTypeToTransformTo(I->getContext(), DstVT);
655
656   unsigned ResultReg = FastEmit_r(SrcVT.getSimpleVT(),
657                                   DstVT.getSimpleVT(),
658                                   Opcode,
659                                   InputReg, InputRegIsKill);
660   if (!ResultReg)
661     return false;
662
663   UpdateValueMap(I, ResultReg);
664   return true;
665 }
666
667 bool FastISel::SelectBitCast(const User *I) {
668   // If the bitcast doesn't change the type, just use the operand value.
669   if (I->getType() == I->getOperand(0)->getType()) {
670     unsigned Reg = getRegForValue(I->getOperand(0));
671     if (Reg == 0)
672       return false;
673     UpdateValueMap(I, Reg);
674     return true;
675   }
676
677   // Bitcasts of other values become reg-reg copies or BITCAST operators.
678   EVT SrcVT = TLI.getValueType(I->getOperand(0)->getType());
679   EVT DstVT = TLI.getValueType(I->getType());
680
681   if (SrcVT == MVT::Other || !SrcVT.isSimple() ||
682       DstVT == MVT::Other || !DstVT.isSimple() ||
683       !TLI.isTypeLegal(SrcVT) || !TLI.isTypeLegal(DstVT))
684     // Unhandled type. Halt "fast" selection and bail.
685     return false;
686
687   unsigned Op0 = getRegForValue(I->getOperand(0));
688   if (Op0 == 0)
689     // Unhandled operand. Halt "fast" selection and bail.
690     return false;
691
692   bool Op0IsKill = hasTrivialKill(I->getOperand(0));
693
694   // First, try to perform the bitcast by inserting a reg-reg copy.
695   unsigned ResultReg = 0;
696   if (SrcVT.getSimpleVT() == DstVT.getSimpleVT()) {
697     TargetRegisterClass* SrcClass = TLI.getRegClassFor(SrcVT);
698     TargetRegisterClass* DstClass = TLI.getRegClassFor(DstVT);
699     // Don't attempt a cross-class copy. It will likely fail.
700     if (SrcClass == DstClass) {
701       ResultReg = createResultReg(DstClass);
702       BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
703               ResultReg).addReg(Op0);
704     }
705   }
706
707   // If the reg-reg copy failed, select a BITCAST opcode.
708   if (!ResultReg)
709     ResultReg = FastEmit_r(SrcVT.getSimpleVT(), DstVT.getSimpleVT(),
710                            ISD::BITCAST, Op0, Op0IsKill);
711
712   if (!ResultReg)
713     return false;
714
715   UpdateValueMap(I, ResultReg);
716   return true;
717 }
718
719 bool
720 FastISel::SelectInstruction(const Instruction *I) {
721   // Just before the terminator instruction, insert instructions to
722   // feed PHI nodes in successor blocks.
723   if (isa<TerminatorInst>(I))
724     if (!HandlePHINodesInSuccessorBlocks(I->getParent()))
725       return false;
726
727   DL = I->getDebugLoc();
728
729   // First, try doing target-independent selection.
730   if (SelectOperator(I, I->getOpcode())) {
731     DL = DebugLoc();
732     return true;
733   }
734
735   // Next, try calling the target to attempt to handle the instruction.
736   if (TargetSelectInstruction(I)) {
737     DL = DebugLoc();
738     return true;
739   }
740
741   DL = DebugLoc();
742   return false;
743 }
744
745 /// FastEmitBranch - Emit an unconditional branch to the given block,
746 /// unless it is the immediate (fall-through) successor, and update
747 /// the CFG.
748 void
749 FastISel::FastEmitBranch(MachineBasicBlock *MSucc, DebugLoc DL) {
750   if (FuncInfo.MBB->isLayoutSuccessor(MSucc)) {
751     // The unconditional fall-through case, which needs no instructions.
752   } else {
753     // The unconditional branch case.
754     TII.InsertBranch(*FuncInfo.MBB, MSucc, NULL,
755                      SmallVector<MachineOperand, 0>(), DL);
756   }
757   FuncInfo.MBB->addSuccessor(MSucc);
758 }
759
760 /// SelectFNeg - Emit an FNeg operation.
761 ///
762 bool
763 FastISel::SelectFNeg(const User *I) {
764   unsigned OpReg = getRegForValue(BinaryOperator::getFNegArgument(I));
765   if (OpReg == 0) return false;
766
767   bool OpRegIsKill = hasTrivialKill(I);
768
769   // If the target has ISD::FNEG, use it.
770   EVT VT = TLI.getValueType(I->getType());
771   unsigned ResultReg = FastEmit_r(VT.getSimpleVT(), VT.getSimpleVT(),
772                                   ISD::FNEG, OpReg, OpRegIsKill);
773   if (ResultReg != 0) {
774     UpdateValueMap(I, ResultReg);
775     return true;
776   }
777
778   // Bitcast the value to integer, twiddle the sign bit with xor,
779   // and then bitcast it back to floating-point.
780   if (VT.getSizeInBits() > 64) return false;
781   EVT IntVT = EVT::getIntegerVT(I->getContext(), VT.getSizeInBits());
782   if (!TLI.isTypeLegal(IntVT))
783     return false;
784
785   unsigned IntReg = FastEmit_r(VT.getSimpleVT(), IntVT.getSimpleVT(),
786                                ISD::BITCAST, OpReg, OpRegIsKill);
787   if (IntReg == 0)
788     return false;
789
790   unsigned IntResultReg = FastEmit_ri_(IntVT.getSimpleVT(), ISD::XOR,
791                                        IntReg, /*Kill=*/true,
792                                        UINT64_C(1) << (VT.getSizeInBits()-1),
793                                        IntVT.getSimpleVT());
794   if (IntResultReg == 0)
795     return false;
796
797   ResultReg = FastEmit_r(IntVT.getSimpleVT(), VT.getSimpleVT(),
798                          ISD::BITCAST, IntResultReg, /*Kill=*/true);
799   if (ResultReg == 0)
800     return false;
801
802   UpdateValueMap(I, ResultReg);
803   return true;
804 }
805
806 bool
807 FastISel::SelectOperator(const User *I, unsigned Opcode) {
808   switch (Opcode) {
809   case Instruction::Add:
810     return SelectBinaryOp(I, ISD::ADD);
811   case Instruction::FAdd:
812     return SelectBinaryOp(I, ISD::FADD);
813   case Instruction::Sub:
814     return SelectBinaryOp(I, ISD::SUB);
815   case Instruction::FSub:
816     // FNeg is currently represented in LLVM IR as a special case of FSub.
817     if (BinaryOperator::isFNeg(I))
818       return SelectFNeg(I);
819     return SelectBinaryOp(I, ISD::FSUB);
820   case Instruction::Mul:
821     return SelectBinaryOp(I, ISD::MUL);
822   case Instruction::FMul:
823     return SelectBinaryOp(I, ISD::FMUL);
824   case Instruction::SDiv:
825     return SelectBinaryOp(I, ISD::SDIV);
826   case Instruction::UDiv:
827     return SelectBinaryOp(I, ISD::UDIV);
828   case Instruction::FDiv:
829     return SelectBinaryOp(I, ISD::FDIV);
830   case Instruction::SRem:
831     return SelectBinaryOp(I, ISD::SREM);
832   case Instruction::URem:
833     return SelectBinaryOp(I, ISD::UREM);
834   case Instruction::FRem:
835     return SelectBinaryOp(I, ISD::FREM);
836   case Instruction::Shl:
837     return SelectBinaryOp(I, ISD::SHL);
838   case Instruction::LShr:
839     return SelectBinaryOp(I, ISD::SRL);
840   case Instruction::AShr:
841     return SelectBinaryOp(I, ISD::SRA);
842   case Instruction::And:
843     return SelectBinaryOp(I, ISD::AND);
844   case Instruction::Or:
845     return SelectBinaryOp(I, ISD::OR);
846   case Instruction::Xor:
847     return SelectBinaryOp(I, ISD::XOR);
848
849   case Instruction::GetElementPtr:
850     return SelectGetElementPtr(I);
851
852   case Instruction::Br: {
853     const BranchInst *BI = cast<BranchInst>(I);
854
855     if (BI->isUnconditional()) {
856       const BasicBlock *LLVMSucc = BI->getSuccessor(0);
857       MachineBasicBlock *MSucc = FuncInfo.MBBMap[LLVMSucc];
858       FastEmitBranch(MSucc, BI->getDebugLoc());
859       return true;
860     }
861
862     // Conditional branches are not handed yet.
863     // Halt "fast" selection and bail.
864     return false;
865   }
866
867   case Instruction::Unreachable:
868     // Nothing to emit.
869     return true;
870
871   case Instruction::Alloca:
872     // FunctionLowering has the static-sized case covered.
873     if (FuncInfo.StaticAllocaMap.count(cast<AllocaInst>(I)))
874       return true;
875
876     // Dynamic-sized alloca is not handled yet.
877     return false;
878
879   case Instruction::Call:
880     return SelectCall(I);
881
882   case Instruction::BitCast:
883     return SelectBitCast(I);
884
885   case Instruction::FPToSI:
886     return SelectCast(I, ISD::FP_TO_SINT);
887   case Instruction::ZExt:
888     return SelectCast(I, ISD::ZERO_EXTEND);
889   case Instruction::SExt:
890     return SelectCast(I, ISD::SIGN_EXTEND);
891   case Instruction::Trunc:
892     return SelectCast(I, ISD::TRUNCATE);
893   case Instruction::SIToFP:
894     return SelectCast(I, ISD::SINT_TO_FP);
895
896   case Instruction::IntToPtr: // Deliberate fall-through.
897   case Instruction::PtrToInt: {
898     EVT SrcVT = TLI.getValueType(I->getOperand(0)->getType());
899     EVT DstVT = TLI.getValueType(I->getType());
900     if (DstVT.bitsGT(SrcVT))
901       return SelectCast(I, ISD::ZERO_EXTEND);
902     if (DstVT.bitsLT(SrcVT))
903       return SelectCast(I, ISD::TRUNCATE);
904     unsigned Reg = getRegForValue(I->getOperand(0));
905     if (Reg == 0) return false;
906     UpdateValueMap(I, Reg);
907     return true;
908   }
909
910   case Instruction::PHI:
911     llvm_unreachable("FastISel shouldn't visit PHI nodes!");
912
913   default:
914     // Unhandled instruction. Halt "fast" selection and bail.
915     return false;
916   }
917 }
918
919 FastISel::FastISel(FunctionLoweringInfo &funcInfo)
920   : FuncInfo(funcInfo),
921     MRI(FuncInfo.MF->getRegInfo()),
922     MFI(*FuncInfo.MF->getFrameInfo()),
923     MCP(*FuncInfo.MF->getConstantPool()),
924     TM(FuncInfo.MF->getTarget()),
925     TD(*TM.getTargetData()),
926     TII(*TM.getInstrInfo()),
927     TLI(*TM.getTargetLowering()),
928     TRI(*TM.getRegisterInfo()) {
929 }
930
931 FastISel::~FastISel() {}
932
933 unsigned FastISel::FastEmit_(MVT, MVT,
934                              unsigned) {
935   return 0;
936 }
937
938 unsigned FastISel::FastEmit_r(MVT, MVT,
939                               unsigned,
940                               unsigned /*Op0*/, bool /*Op0IsKill*/) {
941   return 0;
942 }
943
944 unsigned FastISel::FastEmit_rr(MVT, MVT,
945                                unsigned,
946                                unsigned /*Op0*/, bool /*Op0IsKill*/,
947                                unsigned /*Op1*/, bool /*Op1IsKill*/) {
948   return 0;
949 }
950
951 unsigned FastISel::FastEmit_i(MVT, MVT, unsigned, uint64_t /*Imm*/) {
952   return 0;
953 }
954
955 unsigned FastISel::FastEmit_f(MVT, MVT,
956                               unsigned, const ConstantFP * /*FPImm*/) {
957   return 0;
958 }
959
960 unsigned FastISel::FastEmit_ri(MVT, MVT,
961                                unsigned,
962                                unsigned /*Op0*/, bool /*Op0IsKill*/,
963                                uint64_t /*Imm*/) {
964   return 0;
965 }
966
967 unsigned FastISel::FastEmit_rf(MVT, MVT,
968                                unsigned,
969                                unsigned /*Op0*/, bool /*Op0IsKill*/,
970                                const ConstantFP * /*FPImm*/) {
971   return 0;
972 }
973
974 unsigned FastISel::FastEmit_rri(MVT, MVT,
975                                 unsigned,
976                                 unsigned /*Op0*/, bool /*Op0IsKill*/,
977                                 unsigned /*Op1*/, bool /*Op1IsKill*/,
978                                 uint64_t /*Imm*/) {
979   return 0;
980 }
981
982 /// FastEmit_ri_ - This method is a wrapper of FastEmit_ri. It first tries
983 /// to emit an instruction with an immediate operand using FastEmit_ri.
984 /// If that fails, it materializes the immediate into a register and try
985 /// FastEmit_rr instead.
986 unsigned FastISel::FastEmit_ri_(MVT VT, unsigned Opcode,
987                                 unsigned Op0, bool Op0IsKill,
988                                 uint64_t Imm, MVT ImmType) {
989   // If this is a multiply by a power of two, emit this as a shift left.
990   if (Opcode == ISD::MUL && isPowerOf2_64(Imm)) {
991     Opcode = ISD::SHL;
992     Imm = Log2_64(Imm);
993   }
994   
995   // Horrible hack (to be removed), check to make sure shift amounts are
996   // in-range.
997   if ((Opcode == ISD::SHL || Opcode == ISD::SRA || Opcode == ISD::SRL) &&
998       Imm >= VT.getSizeInBits())
999     return 0;
1000   
1001   // First check if immediate type is legal. If not, we can't use the ri form.
1002   unsigned ResultReg = FastEmit_ri(VT, VT, Opcode, Op0, Op0IsKill, Imm);
1003   if (ResultReg != 0)
1004     return ResultReg;
1005   unsigned MaterialReg = FastEmit_i(ImmType, ImmType, ISD::Constant, Imm);
1006   if (MaterialReg == 0)
1007     return 0;
1008   return FastEmit_rr(VT, VT, Opcode,
1009                      Op0, Op0IsKill,
1010                      MaterialReg, /*Kill=*/true);
1011 }
1012
1013 /// FastEmit_rf_ - This method is a wrapper of FastEmit_ri. It first tries
1014 /// to emit an instruction with a floating-point immediate operand using
1015 /// FastEmit_rf. If that fails, it materializes the immediate into a register
1016 /// and try FastEmit_rr instead.
1017 unsigned FastISel::FastEmit_rf_(MVT VT, unsigned Opcode,
1018                                 unsigned Op0, bool Op0IsKill,
1019                                 const ConstantFP *FPImm, MVT ImmType) {
1020   // First check if immediate type is legal. If not, we can't use the rf form.
1021   unsigned ResultReg = FastEmit_rf(VT, VT, Opcode, Op0, Op0IsKill, FPImm);
1022   if (ResultReg != 0)
1023     return ResultReg;
1024
1025   // Materialize the constant in a register.
1026   unsigned MaterialReg = FastEmit_f(ImmType, ImmType, ISD::ConstantFP, FPImm);
1027   if (MaterialReg == 0) {
1028     // If the target doesn't have a way to directly enter a floating-point
1029     // value into a register, use an alternate approach.
1030     // TODO: The current approach only supports floating-point constants
1031     // that can be constructed by conversion from integer values. This should
1032     // be replaced by code that creates a load from a constant-pool entry,
1033     // which will require some target-specific work.
1034     const APFloat &Flt = FPImm->getValueAPF();
1035     EVT IntVT = TLI.getPointerTy();
1036
1037     uint64_t x[2];
1038     uint32_t IntBitWidth = IntVT.getSizeInBits();
1039     bool isExact;
1040     (void) Flt.convertToInteger(x, IntBitWidth, /*isSigned=*/true,
1041                              APFloat::rmTowardZero, &isExact);
1042     if (!isExact)
1043       return 0;
1044     APInt IntVal(IntBitWidth, 2, x);
1045
1046     unsigned IntegerReg = FastEmit_i(IntVT.getSimpleVT(), IntVT.getSimpleVT(),
1047                                      ISD::Constant, IntVal.getZExtValue());
1048     if (IntegerReg == 0)
1049       return 0;
1050     MaterialReg = FastEmit_r(IntVT.getSimpleVT(), VT,
1051                              ISD::SINT_TO_FP, IntegerReg, /*Kill=*/true);
1052     if (MaterialReg == 0)
1053       return 0;
1054   }
1055   return FastEmit_rr(VT, VT, Opcode,
1056                      Op0, Op0IsKill,
1057                      MaterialReg, /*Kill=*/true);
1058 }
1059
1060 unsigned FastISel::createResultReg(const TargetRegisterClass* RC) {
1061   return MRI.createVirtualRegister(RC);
1062 }
1063
1064 unsigned FastISel::FastEmitInst_(unsigned MachineInstOpcode,
1065                                  const TargetRegisterClass* RC) {
1066   unsigned ResultReg = createResultReg(RC);
1067   const TargetInstrDesc &II = TII.get(MachineInstOpcode);
1068
1069   BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II, ResultReg);
1070   return ResultReg;
1071 }
1072
1073 unsigned FastISel::FastEmitInst_r(unsigned MachineInstOpcode,
1074                                   const TargetRegisterClass *RC,
1075                                   unsigned Op0, bool Op0IsKill) {
1076   unsigned ResultReg = createResultReg(RC);
1077   const TargetInstrDesc &II = TII.get(MachineInstOpcode);
1078
1079   if (II.getNumDefs() >= 1)
1080     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II, ResultReg)
1081       .addReg(Op0, Op0IsKill * RegState::Kill);
1082   else {
1083     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
1084       .addReg(Op0, Op0IsKill * RegState::Kill);
1085     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
1086             ResultReg).addReg(II.ImplicitDefs[0]);
1087   }
1088
1089   return ResultReg;
1090 }
1091
1092 unsigned FastISel::FastEmitInst_rr(unsigned MachineInstOpcode,
1093                                    const TargetRegisterClass *RC,
1094                                    unsigned Op0, bool Op0IsKill,
1095                                    unsigned Op1, bool Op1IsKill) {
1096   unsigned ResultReg = createResultReg(RC);
1097   const TargetInstrDesc &II = TII.get(MachineInstOpcode);
1098
1099   if (II.getNumDefs() >= 1)
1100     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II, ResultReg)
1101       .addReg(Op0, Op0IsKill * RegState::Kill)
1102       .addReg(Op1, Op1IsKill * RegState::Kill);
1103   else {
1104     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
1105       .addReg(Op0, Op0IsKill * RegState::Kill)
1106       .addReg(Op1, Op1IsKill * RegState::Kill);
1107     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
1108             ResultReg).addReg(II.ImplicitDefs[0]);
1109   }
1110   return ResultReg;
1111 }
1112
1113 unsigned FastISel::FastEmitInst_ri(unsigned MachineInstOpcode,
1114                                    const TargetRegisterClass *RC,
1115                                    unsigned Op0, bool Op0IsKill,
1116                                    uint64_t Imm) {
1117   unsigned ResultReg = createResultReg(RC);
1118   const TargetInstrDesc &II = TII.get(MachineInstOpcode);
1119
1120   if (II.getNumDefs() >= 1)
1121     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II, ResultReg)
1122       .addReg(Op0, Op0IsKill * RegState::Kill)
1123       .addImm(Imm);
1124   else {
1125     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
1126       .addReg(Op0, Op0IsKill * RegState::Kill)
1127       .addImm(Imm);
1128     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
1129             ResultReg).addReg(II.ImplicitDefs[0]);
1130   }
1131   return ResultReg;
1132 }
1133
1134 unsigned FastISel::FastEmitInst_rii(unsigned MachineInstOpcode,
1135                                    const TargetRegisterClass *RC,
1136                                    unsigned Op0, bool Op0IsKill,
1137                                    uint64_t Imm1, uint64_t Imm2) {
1138   unsigned ResultReg = createResultReg(RC);
1139   const TargetInstrDesc &II = TII.get(MachineInstOpcode);
1140
1141   if (II.getNumDefs() >= 1)
1142     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II, ResultReg)
1143       .addReg(Op0, Op0IsKill * RegState::Kill)
1144       .addImm(Imm1)
1145       .addImm(Imm2);
1146   else {
1147     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
1148       .addReg(Op0, Op0IsKill * RegState::Kill)
1149       .addImm(Imm1)
1150       .addImm(Imm2);
1151     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
1152             ResultReg).addReg(II.ImplicitDefs[0]);
1153   }
1154   return ResultReg;
1155 }
1156
1157 unsigned FastISel::FastEmitInst_rf(unsigned MachineInstOpcode,
1158                                    const TargetRegisterClass *RC,
1159                                    unsigned Op0, bool Op0IsKill,
1160                                    const ConstantFP *FPImm) {
1161   unsigned ResultReg = createResultReg(RC);
1162   const TargetInstrDesc &II = TII.get(MachineInstOpcode);
1163
1164   if (II.getNumDefs() >= 1)
1165     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II, ResultReg)
1166       .addReg(Op0, Op0IsKill * RegState::Kill)
1167       .addFPImm(FPImm);
1168   else {
1169     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
1170       .addReg(Op0, Op0IsKill * RegState::Kill)
1171       .addFPImm(FPImm);
1172     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
1173             ResultReg).addReg(II.ImplicitDefs[0]);
1174   }
1175   return ResultReg;
1176 }
1177
1178 unsigned FastISel::FastEmitInst_rri(unsigned MachineInstOpcode,
1179                                     const TargetRegisterClass *RC,
1180                                     unsigned Op0, bool Op0IsKill,
1181                                     unsigned Op1, bool Op1IsKill,
1182                                     uint64_t Imm) {
1183   unsigned ResultReg = createResultReg(RC);
1184   const TargetInstrDesc &II = TII.get(MachineInstOpcode);
1185
1186   if (II.getNumDefs() >= 1)
1187     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II, ResultReg)
1188       .addReg(Op0, Op0IsKill * RegState::Kill)
1189       .addReg(Op1, Op1IsKill * RegState::Kill)
1190       .addImm(Imm);
1191   else {
1192     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II)
1193       .addReg(Op0, Op0IsKill * RegState::Kill)
1194       .addReg(Op1, Op1IsKill * RegState::Kill)
1195       .addImm(Imm);
1196     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
1197             ResultReg).addReg(II.ImplicitDefs[0]);
1198   }
1199   return ResultReg;
1200 }
1201
1202 unsigned FastISel::FastEmitInst_i(unsigned MachineInstOpcode,
1203                                   const TargetRegisterClass *RC,
1204                                   uint64_t Imm) {
1205   unsigned ResultReg = createResultReg(RC);
1206   const TargetInstrDesc &II = TII.get(MachineInstOpcode);
1207
1208   if (II.getNumDefs() >= 1)
1209     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II, ResultReg).addImm(Imm);
1210   else {
1211     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, II).addImm(Imm);
1212     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
1213             ResultReg).addReg(II.ImplicitDefs[0]);
1214   }
1215   return ResultReg;
1216 }
1217
1218 unsigned FastISel::FastEmitInst_extractsubreg(MVT RetVT,
1219                                               unsigned Op0, bool Op0IsKill,
1220                                               uint32_t Idx) {
1221   unsigned ResultReg = createResultReg(TLI.getRegClassFor(RetVT));
1222   assert(TargetRegisterInfo::isVirtualRegister(Op0) &&
1223          "Cannot yet extract from physregs");
1224   BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt,
1225           DL, TII.get(TargetOpcode::COPY), ResultReg)
1226     .addReg(Op0, getKillRegState(Op0IsKill), Idx);
1227   return ResultReg;
1228 }
1229
1230 /// FastEmitZExtFromI1 - Emit MachineInstrs to compute the value of Op
1231 /// with all but the least significant bit set to zero.
1232 unsigned FastISel::FastEmitZExtFromI1(MVT VT, unsigned Op0, bool Op0IsKill) {
1233   return FastEmit_ri(VT, VT, ISD::AND, Op0, Op0IsKill, 1);
1234 }
1235
1236 /// HandlePHINodesInSuccessorBlocks - Handle PHI nodes in successor blocks.
1237 /// Emit code to ensure constants are copied into registers when needed.
1238 /// Remember the virtual registers that need to be added to the Machine PHI
1239 /// nodes as input.  We cannot just directly add them, because expansion
1240 /// might result in multiple MBB's for one BB.  As such, the start of the
1241 /// BB might correspond to a different MBB than the end.
1242 bool FastISel::HandlePHINodesInSuccessorBlocks(const BasicBlock *LLVMBB) {
1243   const TerminatorInst *TI = LLVMBB->getTerminator();
1244
1245   SmallPtrSet<MachineBasicBlock *, 4> SuccsHandled;
1246   unsigned OrigNumPHINodesToUpdate = FuncInfo.PHINodesToUpdate.size();
1247
1248   // Check successor nodes' PHI nodes that expect a constant to be available
1249   // from this block.
1250   for (unsigned succ = 0, e = TI->getNumSuccessors(); succ != e; ++succ) {
1251     const BasicBlock *SuccBB = TI->getSuccessor(succ);
1252     if (!isa<PHINode>(SuccBB->begin())) continue;
1253     MachineBasicBlock *SuccMBB = FuncInfo.MBBMap[SuccBB];
1254
1255     // If this terminator has multiple identical successors (common for
1256     // switches), only handle each succ once.
1257     if (!SuccsHandled.insert(SuccMBB)) continue;
1258
1259     MachineBasicBlock::iterator MBBI = SuccMBB->begin();
1260
1261     // At this point we know that there is a 1-1 correspondence between LLVM PHI
1262     // nodes and Machine PHI nodes, but the incoming operands have not been
1263     // emitted yet.
1264     for (BasicBlock::const_iterator I = SuccBB->begin();
1265          const PHINode *PN = dyn_cast<PHINode>(I); ++I) {
1266
1267       // Ignore dead phi's.
1268       if (PN->use_empty()) continue;
1269
1270       // Only handle legal types. Two interesting things to note here. First,
1271       // by bailing out early, we may leave behind some dead instructions,
1272       // since SelectionDAG's HandlePHINodesInSuccessorBlocks will insert its
1273       // own moves. Second, this check is necessary because FastISel doesn't
1274       // use CreateRegs to create registers, so it always creates
1275       // exactly one register for each non-void instruction.
1276       EVT VT = TLI.getValueType(PN->getType(), /*AllowUnknown=*/true);
1277       if (VT == MVT::Other || !TLI.isTypeLegal(VT)) {
1278         // Promote MVT::i1.
1279         if (VT == MVT::i1)
1280           VT = TLI.getTypeToTransformTo(LLVMBB->getContext(), VT);
1281         else {
1282           FuncInfo.PHINodesToUpdate.resize(OrigNumPHINodesToUpdate);
1283           return false;
1284         }
1285       }
1286
1287       const Value *PHIOp = PN->getIncomingValueForBlock(LLVMBB);
1288
1289       // Set the DebugLoc for the copy. Prefer the location of the operand
1290       // if there is one; use the location of the PHI otherwise.
1291       DL = PN->getDebugLoc();
1292       if (const Instruction *Inst = dyn_cast<Instruction>(PHIOp))
1293         DL = Inst->getDebugLoc();
1294
1295       unsigned Reg = getRegForValue(PHIOp);
1296       if (Reg == 0) {
1297         FuncInfo.PHINodesToUpdate.resize(OrigNumPHINodesToUpdate);
1298         return false;
1299       }
1300       FuncInfo.PHINodesToUpdate.push_back(std::make_pair(MBBI++, Reg));
1301       DL = DebugLoc();
1302     }
1303   }
1304
1305   return true;
1306 }