Arrange for FastISel code to have access to the MachineModuleInfo
[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 //===----------------------------------------------------------------------===//
13
14 #include "llvm/Instructions.h"
15 #include "llvm/CodeGen/FastISel.h"
16 #include "llvm/CodeGen/MachineInstrBuilder.h"
17 #include "llvm/CodeGen/MachineRegisterInfo.h"
18 #include "llvm/Target/TargetData.h"
19 #include "llvm/Target/TargetInstrInfo.h"
20 #include "llvm/Target/TargetLowering.h"
21 #include "llvm/Target/TargetMachine.h"
22 using namespace llvm;
23
24 unsigned FastISel::getRegForValue(Value *V) {
25   // Look up the value to see if we already have a register for it. We
26   // cache values defined by Instructions across blocks, and other values
27   // only locally. This is because Instructions already have the SSA
28   // def-dominatess-use requirement enforced.
29   if (ValueMap.count(V))
30     return ValueMap[V];
31   unsigned Reg = LocalValueMap[V];
32   if (Reg != 0)
33     return Reg;
34
35   MVT::SimpleValueType VT = TLI.getValueType(V->getType()).getSimpleVT();
36
37   // Ignore illegal types.
38   if (!TLI.isTypeLegal(VT)) {
39     // Promote MVT::i1 to a legal type though, because it's common and easy.
40     if (VT == MVT::i1)
41       VT = TLI.getTypeToTransformTo(VT).getSimpleVT();
42     else
43       return 0;
44   }
45
46   if (ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
47     if (CI->getValue().getActiveBits() <= 64)
48       Reg = FastEmit_i(VT, VT, ISD::Constant, CI->getZExtValue());
49   } else if (isa<AllocaInst>(V)) {
50     Reg = TargetMaterializeAlloca(cast<AllocaInst>(V));
51   } else if (isa<ConstantPointerNull>(V)) {
52     Reg = FastEmit_i(VT, VT, ISD::Constant, 0);
53   } else if (ConstantFP *CF = dyn_cast<ConstantFP>(V)) {
54     Reg = FastEmit_f(VT, VT, ISD::ConstantFP, CF);
55
56     if (!Reg) {
57       const APFloat &Flt = CF->getValueAPF();
58       MVT IntVT = TLI.getPointerTy();
59
60       uint64_t x[2];
61       uint32_t IntBitWidth = IntVT.getSizeInBits();
62       if (!Flt.convertToInteger(x, IntBitWidth, /*isSigned=*/true,
63                                 APFloat::rmTowardZero) != APFloat::opOK) {
64         APInt IntVal(IntBitWidth, 2, x);
65
66         unsigned IntegerReg = FastEmit_i(IntVT.getSimpleVT(), IntVT.getSimpleVT(),
67                                          ISD::Constant, IntVal.getZExtValue());
68         if (IntegerReg != 0)
69           Reg = FastEmit_r(IntVT.getSimpleVT(), VT, ISD::SINT_TO_FP, IntegerReg);
70       }
71     }
72   } else if (ConstantExpr *CE = dyn_cast<ConstantExpr>(V)) {
73     if (!SelectOperator(CE, CE->getOpcode())) return 0;
74     Reg = LocalValueMap[CE];
75   } else if (isa<UndefValue>(V)) {
76     Reg = createResultReg(TLI.getRegClassFor(VT));
77     BuildMI(MBB, TII.get(TargetInstrInfo::IMPLICIT_DEF), Reg);
78   } else {
79     return 0;
80   }
81   
82   if (!Reg && isa<Constant>(V))
83     Reg = TargetMaterializeConstant(cast<Constant>(V));
84   
85   // Don't cache constant materializations in the general ValueMap.
86   // To do so would require tracking what uses they dominate.
87   LocalValueMap[V] = Reg;
88   return Reg;
89 }
90
91 unsigned FastISel::lookUpRegForValue(Value *V) {
92   // Look up the value to see if we already have a register for it. We
93   // cache values defined by Instructions across blocks, and other values
94   // only locally. This is because Instructions already have the SSA
95   // def-dominatess-use requirement enforced.
96   if (ValueMap.count(V))
97     return ValueMap[V];
98   return LocalValueMap[V];
99 }
100
101 /// UpdateValueMap - Update the value map to include the new mapping for this
102 /// instruction, or insert an extra copy to get the result in a previous
103 /// determined register.
104 /// NOTE: This is only necessary because we might select a block that uses
105 /// a value before we select the block that defines the value.  It might be
106 /// possible to fix this by selecting blocks in reverse postorder.
107 void FastISel::UpdateValueMap(Value* I, unsigned Reg) {
108   if (!isa<Instruction>(I)) {
109     LocalValueMap[I] = Reg;
110     return;
111   }
112   if (!ValueMap.count(I))
113     ValueMap[I] = Reg;
114   else
115     TII.copyRegToReg(*MBB, MBB->end(), ValueMap[I],
116                      Reg, MRI.getRegClass(Reg), MRI.getRegClass(Reg));
117 }
118
119 /// SelectBinaryOp - Select and emit code for a binary operator instruction,
120 /// which has an opcode which directly corresponds to the given ISD opcode.
121 ///
122 bool FastISel::SelectBinaryOp(User *I, ISD::NodeType ISDOpcode) {
123   MVT VT = MVT::getMVT(I->getType(), /*HandleUnknown=*/true);
124   if (VT == MVT::Other || !VT.isSimple())
125     // Unhandled type. Halt "fast" selection and bail.
126     return false;
127
128   // We only handle legal types. For example, on x86-32 the instruction
129   // selector contains all of the 64-bit instructions from x86-64,
130   // under the assumption that i64 won't be used if the target doesn't
131   // support it.
132   if (!TLI.isTypeLegal(VT)) {
133     // MVT::i1 is special. Allow AND and OR (but not XOR) because they
134     // don't require additional zeroing, which makes them easy.
135     if (VT == MVT::i1 &&
136         (ISDOpcode == ISD::AND || ISDOpcode == ISD::OR))
137       VT = TLI.getTypeToTransformTo(VT);
138     else
139       return false;
140   }
141
142   unsigned Op0 = getRegForValue(I->getOperand(0));
143   if (Op0 == 0)
144     // Unhandled operand. Halt "fast" selection and bail.
145     return false;
146
147   // Check if the second operand is a constant and handle it appropriately.
148   if (ConstantInt *CI = dyn_cast<ConstantInt>(I->getOperand(1))) {
149     unsigned ResultReg = FastEmit_ri(VT.getSimpleVT(), VT.getSimpleVT(),
150                                      ISDOpcode, Op0, CI->getZExtValue());
151     if (ResultReg != 0) {
152       // We successfully emitted code for the given LLVM Instruction.
153       UpdateValueMap(I, ResultReg);
154       return true;
155     }
156   }
157
158   // Check if the second operand is a constant float.
159   if (ConstantFP *CF = dyn_cast<ConstantFP>(I->getOperand(1))) {
160     unsigned ResultReg = FastEmit_rf(VT.getSimpleVT(), VT.getSimpleVT(),
161                                      ISDOpcode, Op0, CF);
162     if (ResultReg != 0) {
163       // We successfully emitted code for the given LLVM Instruction.
164       UpdateValueMap(I, ResultReg);
165       return true;
166     }
167   }
168
169   unsigned Op1 = getRegForValue(I->getOperand(1));
170   if (Op1 == 0)
171     // Unhandled operand. Halt "fast" selection and bail.
172     return false;
173
174   // Now we have both operands in registers. Emit the instruction.
175   unsigned ResultReg = FastEmit_rr(VT.getSimpleVT(), VT.getSimpleVT(),
176                                    ISDOpcode, Op0, Op1);
177   if (ResultReg == 0)
178     // Target-specific code wasn't able to find a machine opcode for
179     // the given ISD opcode and type. Halt "fast" selection and bail.
180     return false;
181
182   // We successfully emitted code for the given LLVM Instruction.
183   UpdateValueMap(I, ResultReg);
184   return true;
185 }
186
187 bool FastISel::SelectGetElementPtr(User *I) {
188   unsigned N = getRegForValue(I->getOperand(0));
189   if (N == 0)
190     // Unhandled operand. Halt "fast" selection and bail.
191     return false;
192
193   const Type *Ty = I->getOperand(0)->getType();
194   MVT::SimpleValueType VT = TLI.getPointerTy().getSimpleVT();
195   for (GetElementPtrInst::op_iterator OI = I->op_begin()+1, E = I->op_end();
196        OI != E; ++OI) {
197     Value *Idx = *OI;
198     if (const StructType *StTy = dyn_cast<StructType>(Ty)) {
199       unsigned Field = cast<ConstantInt>(Idx)->getZExtValue();
200       if (Field) {
201         // N = N + Offset
202         uint64_t Offs = TD.getStructLayout(StTy)->getElementOffset(Field);
203         // FIXME: This can be optimized by combining the add with a
204         // subsequent one.
205         N = FastEmit_ri_(VT, ISD::ADD, N, Offs, VT);
206         if (N == 0)
207           // Unhandled operand. Halt "fast" selection and bail.
208           return false;
209       }
210       Ty = StTy->getElementType(Field);
211     } else {
212       Ty = cast<SequentialType>(Ty)->getElementType();
213
214       // If this is a constant subscript, handle it quickly.
215       if (ConstantInt *CI = dyn_cast<ConstantInt>(Idx)) {
216         if (CI->getZExtValue() == 0) continue;
217         uint64_t Offs = 
218           TD.getABITypeSize(Ty)*cast<ConstantInt>(CI)->getSExtValue();
219         N = FastEmit_ri_(VT, ISD::ADD, N, Offs, VT);
220         if (N == 0)
221           // Unhandled operand. Halt "fast" selection and bail.
222           return false;
223         continue;
224       }
225       
226       // N = N + Idx * ElementSize;
227       uint64_t ElementSize = TD.getABITypeSize(Ty);
228       unsigned IdxN = getRegForValue(Idx);
229       if (IdxN == 0)
230         // Unhandled operand. Halt "fast" selection and bail.
231         return false;
232
233       // If the index is smaller or larger than intptr_t, truncate or extend
234       // it.
235       MVT IdxVT = MVT::getMVT(Idx->getType(), /*HandleUnknown=*/false);
236       if (IdxVT.bitsLT(VT))
237         IdxN = FastEmit_r(IdxVT.getSimpleVT(), VT, ISD::SIGN_EXTEND, IdxN);
238       else if (IdxVT.bitsGT(VT))
239         IdxN = FastEmit_r(IdxVT.getSimpleVT(), VT, ISD::TRUNCATE, IdxN);
240       if (IdxN == 0)
241         // Unhandled operand. Halt "fast" selection and bail.
242         return false;
243
244       if (ElementSize != 1) {
245         IdxN = FastEmit_ri_(VT, ISD::MUL, IdxN, ElementSize, VT);
246         if (IdxN == 0)
247           // Unhandled operand. Halt "fast" selection and bail.
248           return false;
249       }
250       N = FastEmit_rr(VT, VT, ISD::ADD, N, IdxN);
251       if (N == 0)
252         // Unhandled operand. Halt "fast" selection and bail.
253         return false;
254     }
255   }
256
257   // We successfully emitted code for the given LLVM Instruction.
258   UpdateValueMap(I, N);
259   return true;
260 }
261
262 bool FastISel::SelectCast(User *I, ISD::NodeType Opcode) {
263   MVT SrcVT = TLI.getValueType(I->getOperand(0)->getType());
264   MVT DstVT = TLI.getValueType(I->getType());
265     
266   if (SrcVT == MVT::Other || !SrcVT.isSimple() ||
267       DstVT == MVT::Other || !DstVT.isSimple() ||
268       !TLI.isTypeLegal(SrcVT) || !TLI.isTypeLegal(DstVT))
269     // Unhandled type. Halt "fast" selection and bail.
270     return false;
271     
272   unsigned InputReg = getRegForValue(I->getOperand(0));
273   if (!InputReg)
274     // Unhandled operand.  Halt "fast" selection and bail.
275     return false;
276     
277   unsigned ResultReg = FastEmit_r(SrcVT.getSimpleVT(),
278                                   DstVT.getSimpleVT(),
279                                   Opcode,
280                                   InputReg);
281   if (!ResultReg)
282     return false;
283     
284   UpdateValueMap(I, ResultReg);
285   return true;
286 }
287
288 bool FastISel::SelectBitCast(User *I) {
289   // If the bitcast doesn't change the type, just use the operand value.
290   if (I->getType() == I->getOperand(0)->getType()) {
291     unsigned Reg = getRegForValue(I->getOperand(0));
292     if (Reg == 0)
293       return false;
294     UpdateValueMap(I, Reg);
295     return true;
296   }
297
298   // Bitcasts of other values become reg-reg copies or BIT_CONVERT operators.
299   MVT SrcVT = TLI.getValueType(I->getOperand(0)->getType());
300   MVT DstVT = TLI.getValueType(I->getType());
301   
302   if (SrcVT == MVT::Other || !SrcVT.isSimple() ||
303       DstVT == MVT::Other || !DstVT.isSimple() ||
304       !TLI.isTypeLegal(SrcVT) || !TLI.isTypeLegal(DstVT))
305     // Unhandled type. Halt "fast" selection and bail.
306     return false;
307   
308   unsigned Op0 = getRegForValue(I->getOperand(0));
309   if (Op0 == 0)
310     // Unhandled operand. Halt "fast" selection and bail.
311     return false;
312   
313   // First, try to perform the bitcast by inserting a reg-reg copy.
314   unsigned ResultReg = 0;
315   if (SrcVT.getSimpleVT() == DstVT.getSimpleVT()) {
316     TargetRegisterClass* SrcClass = TLI.getRegClassFor(SrcVT);
317     TargetRegisterClass* DstClass = TLI.getRegClassFor(DstVT);
318     ResultReg = createResultReg(DstClass);
319     
320     bool InsertedCopy = TII.copyRegToReg(*MBB, MBB->end(), ResultReg,
321                                          Op0, DstClass, SrcClass);
322     if (!InsertedCopy)
323       ResultReg = 0;
324   }
325   
326   // If the reg-reg copy failed, select a BIT_CONVERT opcode.
327   if (!ResultReg)
328     ResultReg = FastEmit_r(SrcVT.getSimpleVT(), DstVT.getSimpleVT(),
329                            ISD::BIT_CONVERT, Op0);
330   
331   if (!ResultReg)
332     return false;
333   
334   UpdateValueMap(I, ResultReg);
335   return true;
336 }
337
338 bool
339 FastISel::SelectInstruction(Instruction *I) {
340   return SelectOperator(I, I->getOpcode());
341 }
342
343 bool
344 FastISel::SelectOperator(User *I, unsigned Opcode) {
345   switch (Opcode) {
346   case Instruction::Add: {
347     ISD::NodeType Opc = I->getType()->isFPOrFPVector() ? ISD::FADD : ISD::ADD;
348     return SelectBinaryOp(I, Opc);
349   }
350   case Instruction::Sub: {
351     ISD::NodeType Opc = I->getType()->isFPOrFPVector() ? ISD::FSUB : ISD::SUB;
352     return SelectBinaryOp(I, Opc);
353   }
354   case Instruction::Mul: {
355     ISD::NodeType Opc = I->getType()->isFPOrFPVector() ? ISD::FMUL : ISD::MUL;
356     return SelectBinaryOp(I, Opc);
357   }
358   case Instruction::SDiv:
359     return SelectBinaryOp(I, ISD::SDIV);
360   case Instruction::UDiv:
361     return SelectBinaryOp(I, ISD::UDIV);
362   case Instruction::FDiv:
363     return SelectBinaryOp(I, ISD::FDIV);
364   case Instruction::SRem:
365     return SelectBinaryOp(I, ISD::SREM);
366   case Instruction::URem:
367     return SelectBinaryOp(I, ISD::UREM);
368   case Instruction::FRem:
369     return SelectBinaryOp(I, ISD::FREM);
370   case Instruction::Shl:
371     return SelectBinaryOp(I, ISD::SHL);
372   case Instruction::LShr:
373     return SelectBinaryOp(I, ISD::SRL);
374   case Instruction::AShr:
375     return SelectBinaryOp(I, ISD::SRA);
376   case Instruction::And:
377     return SelectBinaryOp(I, ISD::AND);
378   case Instruction::Or:
379     return SelectBinaryOp(I, ISD::OR);
380   case Instruction::Xor:
381     return SelectBinaryOp(I, ISD::XOR);
382
383   case Instruction::GetElementPtr:
384     return SelectGetElementPtr(I);
385
386   case Instruction::Br: {
387     BranchInst *BI = cast<BranchInst>(I);
388
389     if (BI->isUnconditional()) {
390       MachineFunction::iterator NextMBB =
391          next(MachineFunction::iterator(MBB));
392       BasicBlock *LLVMSucc = BI->getSuccessor(0);
393       MachineBasicBlock *MSucc = MBBMap[LLVMSucc];
394
395       if (NextMBB != MF.end() && MSucc == NextMBB) {
396         // The unconditional fall-through case, which needs no instructions.
397       } else {
398         // The unconditional branch case.
399         TII.InsertBranch(*MBB, MSucc, NULL, SmallVector<MachineOperand, 0>());
400       }
401       MBB->addSuccessor(MSucc);
402       return true;
403     }
404
405     // Conditional branches are not handed yet.
406     // Halt "fast" selection and bail.
407     return false;
408   }
409
410   case Instruction::Unreachable:
411     // Nothing to emit.
412     return true;
413
414   case Instruction::PHI:
415     // PHI nodes are already emitted.
416     return true;
417
418   case Instruction::Alloca:
419     // FunctionLowering has the static-sized case covered.
420     if (StaticAllocaMap.count(cast<AllocaInst>(I)))
421       return true;
422
423     // Dynamic-sized alloca is not handled yet.
424     return false;
425     
426   case Instruction::BitCast:
427     return SelectBitCast(I);
428
429   case Instruction::FPToSI:
430     return SelectCast(I, ISD::FP_TO_SINT);
431   case Instruction::ZExt:
432     return SelectCast(I, ISD::ZERO_EXTEND);
433   case Instruction::SExt:
434     return SelectCast(I, ISD::SIGN_EXTEND);
435   case Instruction::Trunc:
436     return SelectCast(I, ISD::TRUNCATE);
437   case Instruction::SIToFP:
438     return SelectCast(I, ISD::SINT_TO_FP);
439
440   case Instruction::IntToPtr: // Deliberate fall-through.
441   case Instruction::PtrToInt: {
442     MVT SrcVT = TLI.getValueType(I->getOperand(0)->getType());
443     MVT DstVT = TLI.getValueType(I->getType());
444     if (DstVT.bitsGT(SrcVT))
445       return SelectCast(I, ISD::ZERO_EXTEND);
446     if (DstVT.bitsLT(SrcVT))
447       return SelectCast(I, ISD::TRUNCATE);
448     unsigned Reg = getRegForValue(I->getOperand(0));
449     if (Reg == 0) return false;
450     UpdateValueMap(I, Reg);
451     return true;
452   }
453
454   default:
455     // Unhandled instruction. Halt "fast" selection and bail.
456     return false;
457   }
458 }
459
460 FastISel::FastISel(MachineFunction &mf,
461                    MachineModuleInfo *mmi,
462                    DenseMap<const Value *, unsigned> &vm,
463                    DenseMap<const BasicBlock *, MachineBasicBlock *> &bm,
464                    DenseMap<const AllocaInst *, int> &am)
465   : MBB(0),
466     ValueMap(vm),
467     MBBMap(bm),
468     StaticAllocaMap(am),
469     MF(mf),
470     MMI(mmi),
471     MRI(MF.getRegInfo()),
472     MFI(*MF.getFrameInfo()),
473     MCP(*MF.getConstantPool()),
474     TM(MF.getTarget()),
475     TD(*TM.getTargetData()),
476     TII(*TM.getInstrInfo()),
477     TLI(*TM.getTargetLowering()) {
478 }
479
480 FastISel::~FastISel() {}
481
482 unsigned FastISel::FastEmit_(MVT::SimpleValueType, MVT::SimpleValueType,
483                              ISD::NodeType) {
484   return 0;
485 }
486
487 unsigned FastISel::FastEmit_r(MVT::SimpleValueType, MVT::SimpleValueType,
488                               ISD::NodeType, unsigned /*Op0*/) {
489   return 0;
490 }
491
492 unsigned FastISel::FastEmit_rr(MVT::SimpleValueType, MVT::SimpleValueType, 
493                                ISD::NodeType, unsigned /*Op0*/,
494                                unsigned /*Op0*/) {
495   return 0;
496 }
497
498 unsigned FastISel::FastEmit_i(MVT::SimpleValueType, MVT::SimpleValueType,
499                               ISD::NodeType, uint64_t /*Imm*/) {
500   return 0;
501 }
502
503 unsigned FastISel::FastEmit_f(MVT::SimpleValueType, MVT::SimpleValueType,
504                               ISD::NodeType, ConstantFP * /*FPImm*/) {
505   return 0;
506 }
507
508 unsigned FastISel::FastEmit_ri(MVT::SimpleValueType, MVT::SimpleValueType,
509                                ISD::NodeType, unsigned /*Op0*/,
510                                uint64_t /*Imm*/) {
511   return 0;
512 }
513
514 unsigned FastISel::FastEmit_rf(MVT::SimpleValueType, MVT::SimpleValueType,
515                                ISD::NodeType, unsigned /*Op0*/,
516                                ConstantFP * /*FPImm*/) {
517   return 0;
518 }
519
520 unsigned FastISel::FastEmit_rri(MVT::SimpleValueType, MVT::SimpleValueType,
521                                 ISD::NodeType,
522                                 unsigned /*Op0*/, unsigned /*Op1*/,
523                                 uint64_t /*Imm*/) {
524   return 0;
525 }
526
527 /// FastEmit_ri_ - This method is a wrapper of FastEmit_ri. It first tries
528 /// to emit an instruction with an immediate operand using FastEmit_ri.
529 /// If that fails, it materializes the immediate into a register and try
530 /// FastEmit_rr instead.
531 unsigned FastISel::FastEmit_ri_(MVT::SimpleValueType VT, ISD::NodeType Opcode,
532                                 unsigned Op0, uint64_t Imm,
533                                 MVT::SimpleValueType ImmType) {
534   // First check if immediate type is legal. If not, we can't use the ri form.
535   unsigned ResultReg = FastEmit_ri(VT, VT, Opcode, Op0, Imm);
536   if (ResultReg != 0)
537     return ResultReg;
538   unsigned MaterialReg = FastEmit_i(ImmType, ImmType, ISD::Constant, Imm);
539   if (MaterialReg == 0)
540     return 0;
541   return FastEmit_rr(VT, VT, Opcode, Op0, MaterialReg);
542 }
543
544 /// FastEmit_rf_ - This method is a wrapper of FastEmit_ri. It first tries
545 /// to emit an instruction with a floating-point immediate operand using
546 /// FastEmit_rf. If that fails, it materializes the immediate into a register
547 /// and try FastEmit_rr instead.
548 unsigned FastISel::FastEmit_rf_(MVT::SimpleValueType VT, ISD::NodeType Opcode,
549                                 unsigned Op0, ConstantFP *FPImm,
550                                 MVT::SimpleValueType ImmType) {
551   // First check if immediate type is legal. If not, we can't use the rf form.
552   unsigned ResultReg = FastEmit_rf(VT, VT, Opcode, Op0, FPImm);
553   if (ResultReg != 0)
554     return ResultReg;
555
556   // Materialize the constant in a register.
557   unsigned MaterialReg = FastEmit_f(ImmType, ImmType, ISD::ConstantFP, FPImm);
558   if (MaterialReg == 0) {
559     // If the target doesn't have a way to directly enter a floating-point
560     // value into a register, use an alternate approach.
561     // TODO: The current approach only supports floating-point constants
562     // that can be constructed by conversion from integer values. This should
563     // be replaced by code that creates a load from a constant-pool entry,
564     // which will require some target-specific work.
565     const APFloat &Flt = FPImm->getValueAPF();
566     MVT IntVT = TLI.getPointerTy();
567
568     uint64_t x[2];
569     uint32_t IntBitWidth = IntVT.getSizeInBits();
570     if (Flt.convertToInteger(x, IntBitWidth, /*isSigned=*/true,
571                              APFloat::rmTowardZero) != APFloat::opOK)
572       return 0;
573     APInt IntVal(IntBitWidth, 2, x);
574
575     unsigned IntegerReg = FastEmit_i(IntVT.getSimpleVT(), IntVT.getSimpleVT(),
576                                      ISD::Constant, IntVal.getZExtValue());
577     if (IntegerReg == 0)
578       return 0;
579     MaterialReg = FastEmit_r(IntVT.getSimpleVT(), VT,
580                              ISD::SINT_TO_FP, IntegerReg);
581     if (MaterialReg == 0)
582       return 0;
583   }
584   return FastEmit_rr(VT, VT, Opcode, Op0, MaterialReg);
585 }
586
587 unsigned FastISel::createResultReg(const TargetRegisterClass* RC) {
588   return MRI.createVirtualRegister(RC);
589 }
590
591 unsigned FastISel::FastEmitInst_(unsigned MachineInstOpcode,
592                                  const TargetRegisterClass* RC) {
593   unsigned ResultReg = createResultReg(RC);
594   const TargetInstrDesc &II = TII.get(MachineInstOpcode);
595
596   BuildMI(MBB, II, ResultReg);
597   return ResultReg;
598 }
599
600 unsigned FastISel::FastEmitInst_r(unsigned MachineInstOpcode,
601                                   const TargetRegisterClass *RC,
602                                   unsigned Op0) {
603   unsigned ResultReg = createResultReg(RC);
604   const TargetInstrDesc &II = TII.get(MachineInstOpcode);
605
606   if (II.getNumDefs() >= 1)
607     BuildMI(MBB, II, ResultReg).addReg(Op0);
608   else {
609     BuildMI(MBB, II).addReg(Op0);
610     bool InsertedCopy = TII.copyRegToReg(*MBB, MBB->end(), ResultReg,
611                                          II.ImplicitDefs[0], RC, RC);
612     if (!InsertedCopy)
613       ResultReg = 0;
614   }
615
616   return ResultReg;
617 }
618
619 unsigned FastISel::FastEmitInst_rr(unsigned MachineInstOpcode,
620                                    const TargetRegisterClass *RC,
621                                    unsigned Op0, unsigned Op1) {
622   unsigned ResultReg = createResultReg(RC);
623   const TargetInstrDesc &II = TII.get(MachineInstOpcode);
624
625   if (II.getNumDefs() >= 1)
626     BuildMI(MBB, II, ResultReg).addReg(Op0).addReg(Op1);
627   else {
628     BuildMI(MBB, II).addReg(Op0).addReg(Op1);
629     bool InsertedCopy = TII.copyRegToReg(*MBB, MBB->end(), ResultReg,
630                                          II.ImplicitDefs[0], RC, RC);
631     if (!InsertedCopy)
632       ResultReg = 0;
633   }
634   return ResultReg;
635 }
636
637 unsigned FastISel::FastEmitInst_ri(unsigned MachineInstOpcode,
638                                    const TargetRegisterClass *RC,
639                                    unsigned Op0, uint64_t Imm) {
640   unsigned ResultReg = createResultReg(RC);
641   const TargetInstrDesc &II = TII.get(MachineInstOpcode);
642
643   if (II.getNumDefs() >= 1)
644     BuildMI(MBB, II, ResultReg).addReg(Op0).addImm(Imm);
645   else {
646     BuildMI(MBB, II).addReg(Op0).addImm(Imm);
647     bool InsertedCopy = TII.copyRegToReg(*MBB, MBB->end(), ResultReg,
648                                          II.ImplicitDefs[0], RC, RC);
649     if (!InsertedCopy)
650       ResultReg = 0;
651   }
652   return ResultReg;
653 }
654
655 unsigned FastISel::FastEmitInst_rf(unsigned MachineInstOpcode,
656                                    const TargetRegisterClass *RC,
657                                    unsigned Op0, ConstantFP *FPImm) {
658   unsigned ResultReg = createResultReg(RC);
659   const TargetInstrDesc &II = TII.get(MachineInstOpcode);
660
661   if (II.getNumDefs() >= 1)
662     BuildMI(MBB, II, ResultReg).addReg(Op0).addFPImm(FPImm);
663   else {
664     BuildMI(MBB, II).addReg(Op0).addFPImm(FPImm);
665     bool InsertedCopy = TII.copyRegToReg(*MBB, MBB->end(), ResultReg,
666                                          II.ImplicitDefs[0], RC, RC);
667     if (!InsertedCopy)
668       ResultReg = 0;
669   }
670   return ResultReg;
671 }
672
673 unsigned FastISel::FastEmitInst_rri(unsigned MachineInstOpcode,
674                                     const TargetRegisterClass *RC,
675                                     unsigned Op0, unsigned Op1, uint64_t Imm) {
676   unsigned ResultReg = createResultReg(RC);
677   const TargetInstrDesc &II = TII.get(MachineInstOpcode);
678
679   if (II.getNumDefs() >= 1)
680     BuildMI(MBB, II, ResultReg).addReg(Op0).addReg(Op1).addImm(Imm);
681   else {
682     BuildMI(MBB, II).addReg(Op0).addReg(Op1).addImm(Imm);
683     bool InsertedCopy = TII.copyRegToReg(*MBB, MBB->end(), ResultReg,
684                                          II.ImplicitDefs[0], RC, RC);
685     if (!InsertedCopy)
686       ResultReg = 0;
687   }
688   return ResultReg;
689 }
690
691 unsigned FastISel::FastEmitInst_i(unsigned MachineInstOpcode,
692                                   const TargetRegisterClass *RC,
693                                   uint64_t Imm) {
694   unsigned ResultReg = createResultReg(RC);
695   const TargetInstrDesc &II = TII.get(MachineInstOpcode);
696   
697   if (II.getNumDefs() >= 1)
698     BuildMI(MBB, II, ResultReg).addImm(Imm);
699   else {
700     BuildMI(MBB, II).addImm(Imm);
701     bool InsertedCopy = TII.copyRegToReg(*MBB, MBB->end(), ResultReg,
702                                          II.ImplicitDefs[0], RC, RC);
703     if (!InsertedCopy)
704       ResultReg = 0;
705   }
706   return ResultReg;
707 }
708
709 unsigned FastISel::FastEmitInst_extractsubreg(unsigned Op0, uint32_t Idx) {
710   const TargetRegisterClass* RC = MRI.getRegClass(Op0);
711   const TargetRegisterClass* SRC = *(RC->subregclasses_begin()+Idx-1);
712   
713   unsigned ResultReg = createResultReg(SRC);
714   const TargetInstrDesc &II = TII.get(TargetInstrInfo::EXTRACT_SUBREG);
715   
716   if (II.getNumDefs() >= 1)
717     BuildMI(MBB, II, ResultReg).addReg(Op0).addImm(Idx);
718   else {
719     BuildMI(MBB, II).addReg(Op0).addImm(Idx);
720     bool InsertedCopy = TII.copyRegToReg(*MBB, MBB->end(), ResultReg,
721                                          II.ImplicitDefs[0], RC, RC);
722     if (!InsertedCopy)
723       ResultReg = 0;
724   }
725   return ResultReg;
726 }