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