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