Delete dead function.
[oota-llvm.git] / lib / CodeGen / TwoAddressInstructionPass.cpp
1 //===-- TwoAddressInstructionPass.cpp - Two-Address instruction pass ------===//
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 implements the TwoAddress instruction pass which is used
11 // by most register allocators. Two-Address instructions are rewritten
12 // from:
13 //
14 //     A = B op C
15 //
16 // to:
17 //
18 //     A = B
19 //     A op= C
20 //
21 // Note that if a register allocator chooses to use this pass, that it
22 // has to be capable of handling the non-SSA nature of these rewritten
23 // virtual registers.
24 //
25 // It is also worth noting that the duplicate operand of the two
26 // address instruction is removed.
27 //
28 //===----------------------------------------------------------------------===//
29
30 #define DEBUG_TYPE "twoaddrinstr"
31 #include "llvm/CodeGen/Passes.h"
32 #include "llvm/Function.h"
33 #include "llvm/CodeGen/LiveVariables.h"
34 #include "llvm/CodeGen/MachineFunctionPass.h"
35 #include "llvm/CodeGen/MachineInstr.h"
36 #include "llvm/CodeGen/MachineInstrBuilder.h"
37 #include "llvm/CodeGen/MachineRegisterInfo.h"
38 #include "llvm/Analysis/AliasAnalysis.h"
39 #include "llvm/MC/MCInstrItineraries.h"
40 #include "llvm/Target/TargetRegisterInfo.h"
41 #include "llvm/Target/TargetInstrInfo.h"
42 #include "llvm/Target/TargetMachine.h"
43 #include "llvm/Target/TargetOptions.h"
44 #include "llvm/Support/Debug.h"
45 #include "llvm/Support/ErrorHandling.h"
46 #include "llvm/ADT/BitVector.h"
47 #include "llvm/ADT/DenseMap.h"
48 #include "llvm/ADT/SmallSet.h"
49 #include "llvm/ADT/Statistic.h"
50 #include "llvm/ADT/STLExtras.h"
51 using namespace llvm;
52
53 STATISTIC(NumTwoAddressInstrs, "Number of two-address instructions");
54 STATISTIC(NumCommuted        , "Number of instructions commuted to coalesce");
55 STATISTIC(NumAggrCommuted    , "Number of instructions aggressively commuted");
56 STATISTIC(NumConvertedTo3Addr, "Number of instructions promoted to 3-address");
57 STATISTIC(Num3AddrSunk,        "Number of 3-address instructions sunk");
58 STATISTIC(NumReSchedUps,       "Number of instructions re-scheduled up");
59 STATISTIC(NumReSchedDowns,     "Number of instructions re-scheduled down");
60
61 namespace {
62   class TwoAddressInstructionPass : public MachineFunctionPass {
63     const TargetInstrInfo *TII;
64     const TargetRegisterInfo *TRI;
65     const InstrItineraryData *InstrItins;
66     MachineRegisterInfo *MRI;
67     LiveVariables *LV;
68     AliasAnalysis *AA;
69     CodeGenOpt::Level OptLevel;
70
71     // DistanceMap - Keep track the distance of a MI from the start of the
72     // current basic block.
73     DenseMap<MachineInstr*, unsigned> DistanceMap;
74
75     // SrcRegMap - A map from virtual registers to physical registers which
76     // are likely targets to be coalesced to due to copies from physical
77     // registers to virtual registers. e.g. v1024 = move r0.
78     DenseMap<unsigned, unsigned> SrcRegMap;
79
80     // DstRegMap - A map from virtual registers to physical registers which
81     // are likely targets to be coalesced to due to copies to physical
82     // registers from virtual registers. e.g. r1 = move v1024.
83     DenseMap<unsigned, unsigned> DstRegMap;
84
85     /// RegSequences - Keep track the list of REG_SEQUENCE instructions seen
86     /// during the initial walk of the machine function.
87     SmallVector<MachineInstr*, 16> RegSequences;
88
89     bool Sink3AddrInstruction(MachineBasicBlock *MBB, MachineInstr *MI,
90                               unsigned Reg,
91                               MachineBasicBlock::iterator OldPos);
92
93     bool NoUseAfterLastDef(unsigned Reg, MachineBasicBlock *MBB, unsigned Dist,
94                            unsigned &LastDef);
95
96     bool isProfitableToCommute(unsigned regA, unsigned regB, unsigned regC,
97                                MachineInstr *MI, MachineBasicBlock *MBB,
98                                unsigned Dist);
99
100     bool CommuteInstruction(MachineBasicBlock::iterator &mi,
101                             MachineFunction::iterator &mbbi,
102                             unsigned RegB, unsigned RegC, unsigned Dist);
103
104     bool isProfitableToConv3Addr(unsigned RegA, unsigned RegB);
105
106     bool ConvertInstTo3Addr(MachineBasicBlock::iterator &mi,
107                             MachineBasicBlock::iterator &nmi,
108                             MachineFunction::iterator &mbbi,
109                             unsigned RegA, unsigned RegB, unsigned Dist);
110
111     bool isDefTooClose(unsigned Reg, unsigned Dist,
112                        MachineInstr *MI, MachineBasicBlock *MBB);
113
114     bool RescheduleMIBelowKill(MachineBasicBlock *MBB,
115                                MachineBasicBlock::iterator &mi,
116                                MachineBasicBlock::iterator &nmi,
117                                unsigned Reg);
118     bool RescheduleKillAboveMI(MachineBasicBlock *MBB,
119                                MachineBasicBlock::iterator &mi,
120                                MachineBasicBlock::iterator &nmi,
121                                unsigned Reg);
122
123     bool TryInstructionTransform(MachineBasicBlock::iterator &mi,
124                                  MachineBasicBlock::iterator &nmi,
125                                  MachineFunction::iterator &mbbi,
126                                  unsigned SrcIdx, unsigned DstIdx,
127                                  unsigned Dist,
128                                  SmallPtrSet<MachineInstr*, 8> &Processed);
129
130     void ScanUses(unsigned DstReg, MachineBasicBlock *MBB,
131                   SmallPtrSet<MachineInstr*, 8> &Processed);
132
133     void ProcessCopy(MachineInstr *MI, MachineBasicBlock *MBB,
134                      SmallPtrSet<MachineInstr*, 8> &Processed);
135
136     void CoalesceExtSubRegs(SmallVector<unsigned,4> &Srcs, unsigned DstReg);
137
138     /// EliminateRegSequences - Eliminate REG_SEQUENCE instructions as part
139     /// of the de-ssa process. This replaces sources of REG_SEQUENCE as
140     /// sub-register references of the register defined by REG_SEQUENCE.
141     bool EliminateRegSequences();
142
143   public:
144     static char ID; // Pass identification, replacement for typeid
145     TwoAddressInstructionPass() : MachineFunctionPass(ID) {
146       initializeTwoAddressInstructionPassPass(*PassRegistry::getPassRegistry());
147     }
148
149     virtual void getAnalysisUsage(AnalysisUsage &AU) const {
150       AU.setPreservesCFG();
151       AU.addRequired<AliasAnalysis>();
152       AU.addPreserved<LiveVariables>();
153       AU.addPreservedID(MachineLoopInfoID);
154       AU.addPreservedID(MachineDominatorsID);
155       MachineFunctionPass::getAnalysisUsage(AU);
156     }
157
158     /// runOnMachineFunction - Pass entry point.
159     bool runOnMachineFunction(MachineFunction&);
160   };
161 }
162
163 char TwoAddressInstructionPass::ID = 0;
164 INITIALIZE_PASS_BEGIN(TwoAddressInstructionPass, "twoaddressinstruction",
165                 "Two-Address instruction pass", false, false)
166 INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
167 INITIALIZE_PASS_END(TwoAddressInstructionPass, "twoaddressinstruction",
168                 "Two-Address instruction pass", false, false)
169
170 char &llvm::TwoAddressInstructionPassID = TwoAddressInstructionPass::ID;
171
172 /// Sink3AddrInstruction - A two-address instruction has been converted to a
173 /// three-address instruction to avoid clobbering a register. Try to sink it
174 /// past the instruction that would kill the above mentioned register to reduce
175 /// register pressure.
176 bool TwoAddressInstructionPass::Sink3AddrInstruction(MachineBasicBlock *MBB,
177                                            MachineInstr *MI, unsigned SavedReg,
178                                            MachineBasicBlock::iterator OldPos) {
179   // FIXME: Shouldn't we be trying to do this before we three-addressify the
180   // instruction?  After this transformation is done, we no longer need
181   // the instruction to be in three-address form.
182
183   // Check if it's safe to move this instruction.
184   bool SeenStore = true; // Be conservative.
185   if (!MI->isSafeToMove(TII, AA, SeenStore))
186     return false;
187
188   unsigned DefReg = 0;
189   SmallSet<unsigned, 4> UseRegs;
190
191   for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
192     const MachineOperand &MO = MI->getOperand(i);
193     if (!MO.isReg())
194       continue;
195     unsigned MOReg = MO.getReg();
196     if (!MOReg)
197       continue;
198     if (MO.isUse() && MOReg != SavedReg)
199       UseRegs.insert(MO.getReg());
200     if (!MO.isDef())
201       continue;
202     if (MO.isImplicit())
203       // Don't try to move it if it implicitly defines a register.
204       return false;
205     if (DefReg)
206       // For now, don't move any instructions that define multiple registers.
207       return false;
208     DefReg = MO.getReg();
209   }
210
211   // Find the instruction that kills SavedReg.
212   MachineInstr *KillMI = NULL;
213   for (MachineRegisterInfo::use_nodbg_iterator
214          UI = MRI->use_nodbg_begin(SavedReg),
215          UE = MRI->use_nodbg_end(); UI != UE; ++UI) {
216     MachineOperand &UseMO = UI.getOperand();
217     if (!UseMO.isKill())
218       continue;
219     KillMI = UseMO.getParent();
220     break;
221   }
222
223   // If we find the instruction that kills SavedReg, and it is in an
224   // appropriate location, we can try to sink the current instruction
225   // past it.
226   if (!KillMI || KillMI->getParent() != MBB || KillMI == MI ||
227       KillMI->isTerminator())
228     return false;
229
230   // If any of the definitions are used by another instruction between the
231   // position and the kill use, then it's not safe to sink it.
232   //
233   // FIXME: This can be sped up if there is an easy way to query whether an
234   // instruction is before or after another instruction. Then we can use
235   // MachineRegisterInfo def / use instead.
236   MachineOperand *KillMO = NULL;
237   MachineBasicBlock::iterator KillPos = KillMI;
238   ++KillPos;
239
240   unsigned NumVisited = 0;
241   for (MachineBasicBlock::iterator I = llvm::next(OldPos); I != KillPos; ++I) {
242     MachineInstr *OtherMI = I;
243     // DBG_VALUE cannot be counted against the limit.
244     if (OtherMI->isDebugValue())
245       continue;
246     if (NumVisited > 30)  // FIXME: Arbitrary limit to reduce compile time cost.
247       return false;
248     ++NumVisited;
249     for (unsigned i = 0, e = OtherMI->getNumOperands(); i != e; ++i) {
250       MachineOperand &MO = OtherMI->getOperand(i);
251       if (!MO.isReg())
252         continue;
253       unsigned MOReg = MO.getReg();
254       if (!MOReg)
255         continue;
256       if (DefReg == MOReg)
257         return false;
258
259       if (MO.isKill()) {
260         if (OtherMI == KillMI && MOReg == SavedReg)
261           // Save the operand that kills the register. We want to unset the kill
262           // marker if we can sink MI past it.
263           KillMO = &MO;
264         else if (UseRegs.count(MOReg))
265           // One of the uses is killed before the destination.
266           return false;
267       }
268     }
269   }
270
271   // Update kill and LV information.
272   KillMO->setIsKill(false);
273   KillMO = MI->findRegisterUseOperand(SavedReg, false, TRI);
274   KillMO->setIsKill(true);
275
276   if (LV)
277     LV->replaceKillInstruction(SavedReg, KillMI, MI);
278
279   // Move instruction to its destination.
280   MBB->remove(MI);
281   MBB->insert(KillPos, MI);
282
283   ++Num3AddrSunk;
284   return true;
285 }
286
287 /// NoUseAfterLastDef - Return true if there are no intervening uses between the
288 /// last instruction in the MBB that defines the specified register and the
289 /// two-address instruction which is being processed. It also returns the last
290 /// def location by reference
291 bool TwoAddressInstructionPass::NoUseAfterLastDef(unsigned Reg,
292                                            MachineBasicBlock *MBB, unsigned Dist,
293                                            unsigned &LastDef) {
294   LastDef = 0;
295   unsigned LastUse = Dist;
296   for (MachineRegisterInfo::reg_iterator I = MRI->reg_begin(Reg),
297          E = MRI->reg_end(); I != E; ++I) {
298     MachineOperand &MO = I.getOperand();
299     MachineInstr *MI = MO.getParent();
300     if (MI->getParent() != MBB || MI->isDebugValue())
301       continue;
302     DenseMap<MachineInstr*, unsigned>::iterator DI = DistanceMap.find(MI);
303     if (DI == DistanceMap.end())
304       continue;
305     if (MO.isUse() && DI->second < LastUse)
306       LastUse = DI->second;
307     if (MO.isDef() && DI->second > LastDef)
308       LastDef = DI->second;
309   }
310
311   return !(LastUse > LastDef && LastUse < Dist);
312 }
313
314 /// isCopyToReg - Return true if the specified MI is a copy instruction or
315 /// a extract_subreg instruction. It also returns the source and destination
316 /// registers and whether they are physical registers by reference.
317 static bool isCopyToReg(MachineInstr &MI, const TargetInstrInfo *TII,
318                         unsigned &SrcReg, unsigned &DstReg,
319                         bool &IsSrcPhys, bool &IsDstPhys) {
320   SrcReg = 0;
321   DstReg = 0;
322   if (MI.isCopy()) {
323     DstReg = MI.getOperand(0).getReg();
324     SrcReg = MI.getOperand(1).getReg();
325   } else if (MI.isInsertSubreg() || MI.isSubregToReg()) {
326     DstReg = MI.getOperand(0).getReg();
327     SrcReg = MI.getOperand(2).getReg();
328   } else
329     return false;
330
331   IsSrcPhys = TargetRegisterInfo::isPhysicalRegister(SrcReg);
332   IsDstPhys = TargetRegisterInfo::isPhysicalRegister(DstReg);
333   return true;
334 }
335
336 /// isKilled - Test if the given register value, which is used by the given
337 /// instruction, is killed by the given instruction. This looks through
338 /// coalescable copies to see if the original value is potentially not killed.
339 ///
340 /// For example, in this code:
341 ///
342 ///   %reg1034 = copy %reg1024
343 ///   %reg1035 = copy %reg1025<kill>
344 ///   %reg1036 = add %reg1034<kill>, %reg1035<kill>
345 ///
346 /// %reg1034 is not considered to be killed, since it is copied from a
347 /// register which is not killed. Treating it as not killed lets the
348 /// normal heuristics commute the (two-address) add, which lets
349 /// coalescing eliminate the extra copy.
350 ///
351 static bool isKilled(MachineInstr &MI, unsigned Reg,
352                      const MachineRegisterInfo *MRI,
353                      const TargetInstrInfo *TII) {
354   MachineInstr *DefMI = &MI;
355   for (;;) {
356     if (!DefMI->killsRegister(Reg))
357       return false;
358     if (TargetRegisterInfo::isPhysicalRegister(Reg))
359       return true;
360     MachineRegisterInfo::def_iterator Begin = MRI->def_begin(Reg);
361     // If there are multiple defs, we can't do a simple analysis, so just
362     // go with what the kill flag says.
363     if (llvm::next(Begin) != MRI->def_end())
364       return true;
365     DefMI = &*Begin;
366     bool IsSrcPhys, IsDstPhys;
367     unsigned SrcReg,  DstReg;
368     // If the def is something other than a copy, then it isn't going to
369     // be coalesced, so follow the kill flag.
370     if (!isCopyToReg(*DefMI, TII, SrcReg, DstReg, IsSrcPhys, IsDstPhys))
371       return true;
372     Reg = SrcReg;
373   }
374 }
375
376 /// isTwoAddrUse - Return true if the specified MI uses the specified register
377 /// as a two-address use. If so, return the destination register by reference.
378 static bool isTwoAddrUse(MachineInstr &MI, unsigned Reg, unsigned &DstReg) {
379   const MCInstrDesc &MCID = MI.getDesc();
380   unsigned NumOps = MI.isInlineAsm()
381     ? MI.getNumOperands() : MCID.getNumOperands();
382   for (unsigned i = 0; i != NumOps; ++i) {
383     const MachineOperand &MO = MI.getOperand(i);
384     if (!MO.isReg() || !MO.isUse() || MO.getReg() != Reg)
385       continue;
386     unsigned ti;
387     if (MI.isRegTiedToDefOperand(i, &ti)) {
388       DstReg = MI.getOperand(ti).getReg();
389       return true;
390     }
391   }
392   return false;
393 }
394
395 /// findOnlyInterestingUse - Given a register, if has a single in-basic block
396 /// use, return the use instruction if it's a copy or a two-address use.
397 static
398 MachineInstr *findOnlyInterestingUse(unsigned Reg, MachineBasicBlock *MBB,
399                                      MachineRegisterInfo *MRI,
400                                      const TargetInstrInfo *TII,
401                                      bool &IsCopy,
402                                      unsigned &DstReg, bool &IsDstPhys) {
403   if (!MRI->hasOneNonDBGUse(Reg))
404     // None or more than one use.
405     return 0;
406   MachineInstr &UseMI = *MRI->use_nodbg_begin(Reg);
407   if (UseMI.getParent() != MBB)
408     return 0;
409   unsigned SrcReg;
410   bool IsSrcPhys;
411   if (isCopyToReg(UseMI, TII, SrcReg, DstReg, IsSrcPhys, IsDstPhys)) {
412     IsCopy = true;
413     return &UseMI;
414   }
415   IsDstPhys = false;
416   if (isTwoAddrUse(UseMI, Reg, DstReg)) {
417     IsDstPhys = TargetRegisterInfo::isPhysicalRegister(DstReg);
418     return &UseMI;
419   }
420   return 0;
421 }
422
423 /// getMappedReg - Return the physical register the specified virtual register
424 /// might be mapped to.
425 static unsigned
426 getMappedReg(unsigned Reg, DenseMap<unsigned, unsigned> &RegMap) {
427   while (TargetRegisterInfo::isVirtualRegister(Reg))  {
428     DenseMap<unsigned, unsigned>::iterator SI = RegMap.find(Reg);
429     if (SI == RegMap.end())
430       return 0;
431     Reg = SI->second;
432   }
433   if (TargetRegisterInfo::isPhysicalRegister(Reg))
434     return Reg;
435   return 0;
436 }
437
438 /// regsAreCompatible - Return true if the two registers are equal or aliased.
439 ///
440 static bool
441 regsAreCompatible(unsigned RegA, unsigned RegB, const TargetRegisterInfo *TRI) {
442   if (RegA == RegB)
443     return true;
444   if (!RegA || !RegB)
445     return false;
446   return TRI->regsOverlap(RegA, RegB);
447 }
448
449
450 /// isProfitableToCommute - Return true if it's potentially profitable to commute
451 /// the two-address instruction that's being processed.
452 bool
453 TwoAddressInstructionPass::isProfitableToCommute(unsigned regA, unsigned regB,
454                                        unsigned regC,
455                                        MachineInstr *MI, MachineBasicBlock *MBB,
456                                        unsigned Dist) {
457   if (OptLevel == CodeGenOpt::None)
458     return false;
459
460   // Determine if it's profitable to commute this two address instruction. In
461   // general, we want no uses between this instruction and the definition of
462   // the two-address register.
463   // e.g.
464   // %reg1028<def> = EXTRACT_SUBREG %reg1027<kill>, 1
465   // %reg1029<def> = MOV8rr %reg1028
466   // %reg1029<def> = SHR8ri %reg1029, 7, %EFLAGS<imp-def,dead>
467   // insert => %reg1030<def> = MOV8rr %reg1028
468   // %reg1030<def> = ADD8rr %reg1028<kill>, %reg1029<kill>, %EFLAGS<imp-def,dead>
469   // In this case, it might not be possible to coalesce the second MOV8rr
470   // instruction if the first one is coalesced. So it would be profitable to
471   // commute it:
472   // %reg1028<def> = EXTRACT_SUBREG %reg1027<kill>, 1
473   // %reg1029<def> = MOV8rr %reg1028
474   // %reg1029<def> = SHR8ri %reg1029, 7, %EFLAGS<imp-def,dead>
475   // insert => %reg1030<def> = MOV8rr %reg1029
476   // %reg1030<def> = ADD8rr %reg1029<kill>, %reg1028<kill>, %EFLAGS<imp-def,dead>
477
478   if (!MI->killsRegister(regC))
479     return false;
480
481   // Ok, we have something like:
482   // %reg1030<def> = ADD8rr %reg1028<kill>, %reg1029<kill>, %EFLAGS<imp-def,dead>
483   // let's see if it's worth commuting it.
484
485   // Look for situations like this:
486   // %reg1024<def> = MOV r1
487   // %reg1025<def> = MOV r0
488   // %reg1026<def> = ADD %reg1024, %reg1025
489   // r0            = MOV %reg1026
490   // Commute the ADD to hopefully eliminate an otherwise unavoidable copy.
491   unsigned ToRegA = getMappedReg(regA, DstRegMap);
492   if (ToRegA) {
493     unsigned FromRegB = getMappedReg(regB, SrcRegMap);
494     unsigned FromRegC = getMappedReg(regC, SrcRegMap);
495     bool BComp = !FromRegB || regsAreCompatible(FromRegB, ToRegA, TRI);
496     bool CComp = !FromRegC || regsAreCompatible(FromRegC, ToRegA, TRI);
497     if (BComp != CComp)
498       return !BComp && CComp;
499   }
500
501   // If there is a use of regC between its last def (could be livein) and this
502   // instruction, then bail.
503   unsigned LastDefC = 0;
504   if (!NoUseAfterLastDef(regC, MBB, Dist, LastDefC))
505     return false;
506
507   // If there is a use of regB between its last def (could be livein) and this
508   // instruction, then go ahead and make this transformation.
509   unsigned LastDefB = 0;
510   if (!NoUseAfterLastDef(regB, MBB, Dist, LastDefB))
511     return true;
512
513   // Since there are no intervening uses for both registers, then commute
514   // if the def of regC is closer. Its live interval is shorter.
515   return LastDefB && LastDefC && LastDefC > LastDefB;
516 }
517
518 /// CommuteInstruction - Commute a two-address instruction and update the basic
519 /// block, distance map, and live variables if needed. Return true if it is
520 /// successful.
521 bool
522 TwoAddressInstructionPass::CommuteInstruction(MachineBasicBlock::iterator &mi,
523                                MachineFunction::iterator &mbbi,
524                                unsigned RegB, unsigned RegC, unsigned Dist) {
525   MachineInstr *MI = mi;
526   DEBUG(dbgs() << "2addr: COMMUTING  : " << *MI);
527   MachineInstr *NewMI = TII->commuteInstruction(MI);
528
529   if (NewMI == 0) {
530     DEBUG(dbgs() << "2addr: COMMUTING FAILED!\n");
531     return false;
532   }
533
534   DEBUG(dbgs() << "2addr: COMMUTED TO: " << *NewMI);
535   // If the instruction changed to commute it, update livevar.
536   if (NewMI != MI) {
537     if (LV)
538       // Update live variables
539       LV->replaceKillInstruction(RegC, MI, NewMI);
540
541     mbbi->insert(mi, NewMI);           // Insert the new inst
542     mbbi->erase(mi);                   // Nuke the old inst.
543     mi = NewMI;
544     DistanceMap.insert(std::make_pair(NewMI, Dist));
545   }
546
547   // Update source register map.
548   unsigned FromRegC = getMappedReg(RegC, SrcRegMap);
549   if (FromRegC) {
550     unsigned RegA = MI->getOperand(0).getReg();
551     SrcRegMap[RegA] = FromRegC;
552   }
553
554   return true;
555 }
556
557 /// isProfitableToConv3Addr - Return true if it is profitable to convert the
558 /// given 2-address instruction to a 3-address one.
559 bool
560 TwoAddressInstructionPass::isProfitableToConv3Addr(unsigned RegA,unsigned RegB){
561   // Look for situations like this:
562   // %reg1024<def> = MOV r1
563   // %reg1025<def> = MOV r0
564   // %reg1026<def> = ADD %reg1024, %reg1025
565   // r2            = MOV %reg1026
566   // Turn ADD into a 3-address instruction to avoid a copy.
567   unsigned FromRegB = getMappedReg(RegB, SrcRegMap);
568   if (!FromRegB)
569     return false;
570   unsigned ToRegA = getMappedReg(RegA, DstRegMap);
571   return (ToRegA && !regsAreCompatible(FromRegB, ToRegA, TRI));
572 }
573
574 /// ConvertInstTo3Addr - Convert the specified two-address instruction into a
575 /// three address one. Return true if this transformation was successful.
576 bool
577 TwoAddressInstructionPass::ConvertInstTo3Addr(MachineBasicBlock::iterator &mi,
578                                               MachineBasicBlock::iterator &nmi,
579                                               MachineFunction::iterator &mbbi,
580                                               unsigned RegA, unsigned RegB,
581                                               unsigned Dist) {
582   MachineInstr *NewMI = TII->convertToThreeAddress(mbbi, mi, LV);
583   if (NewMI) {
584     DEBUG(dbgs() << "2addr: CONVERTING 2-ADDR: " << *mi);
585     DEBUG(dbgs() << "2addr:         TO 3-ADDR: " << *NewMI);
586     bool Sunk = false;
587
588     if (NewMI->findRegisterUseOperand(RegB, false, TRI))
589       // FIXME: Temporary workaround. If the new instruction doesn't
590       // uses RegB, convertToThreeAddress must have created more
591       // then one instruction.
592       Sunk = Sink3AddrInstruction(mbbi, NewMI, RegB, mi);
593
594     mbbi->erase(mi); // Nuke the old inst.
595
596     if (!Sunk) {
597       DistanceMap.insert(std::make_pair(NewMI, Dist));
598       mi = NewMI;
599       nmi = llvm::next(mi);
600     }
601
602     // Update source and destination register maps.
603     SrcRegMap.erase(RegA);
604     DstRegMap.erase(RegB);
605     return true;
606   }
607
608   return false;
609 }
610
611 /// ScanUses - Scan forward recursively for only uses, update maps if the use
612 /// is a copy or a two-address instruction.
613 void
614 TwoAddressInstructionPass::ScanUses(unsigned DstReg, MachineBasicBlock *MBB,
615                                     SmallPtrSet<MachineInstr*, 8> &Processed) {
616   SmallVector<unsigned, 4> VirtRegPairs;
617   bool IsDstPhys;
618   bool IsCopy = false;
619   unsigned NewReg = 0;
620   unsigned Reg = DstReg;
621   while (MachineInstr *UseMI = findOnlyInterestingUse(Reg, MBB, MRI, TII,IsCopy,
622                                                       NewReg, IsDstPhys)) {
623     if (IsCopy && !Processed.insert(UseMI))
624       break;
625
626     DenseMap<MachineInstr*, unsigned>::iterator DI = DistanceMap.find(UseMI);
627     if (DI != DistanceMap.end())
628       // Earlier in the same MBB.Reached via a back edge.
629       break;
630
631     if (IsDstPhys) {
632       VirtRegPairs.push_back(NewReg);
633       break;
634     }
635     bool isNew = SrcRegMap.insert(std::make_pair(NewReg, Reg)).second;
636     if (!isNew)
637       assert(SrcRegMap[NewReg] == Reg && "Can't map to two src registers!");
638     VirtRegPairs.push_back(NewReg);
639     Reg = NewReg;
640   }
641
642   if (!VirtRegPairs.empty()) {
643     unsigned ToReg = VirtRegPairs.back();
644     VirtRegPairs.pop_back();
645     while (!VirtRegPairs.empty()) {
646       unsigned FromReg = VirtRegPairs.back();
647       VirtRegPairs.pop_back();
648       bool isNew = DstRegMap.insert(std::make_pair(FromReg, ToReg)).second;
649       if (!isNew)
650         assert(DstRegMap[FromReg] == ToReg &&"Can't map to two dst registers!");
651       ToReg = FromReg;
652     }
653     bool isNew = DstRegMap.insert(std::make_pair(DstReg, ToReg)).second;
654     if (!isNew)
655       assert(DstRegMap[DstReg] == ToReg && "Can't map to two dst registers!");
656   }
657 }
658
659 /// ProcessCopy - If the specified instruction is not yet processed, process it
660 /// if it's a copy. For a copy instruction, we find the physical registers the
661 /// source and destination registers might be mapped to. These are kept in
662 /// point-to maps used to determine future optimizations. e.g.
663 /// v1024 = mov r0
664 /// v1025 = mov r1
665 /// v1026 = add v1024, v1025
666 /// r1    = mov r1026
667 /// If 'add' is a two-address instruction, v1024, v1026 are both potentially
668 /// coalesced to r0 (from the input side). v1025 is mapped to r1. v1026 is
669 /// potentially joined with r1 on the output side. It's worthwhile to commute
670 /// 'add' to eliminate a copy.
671 void TwoAddressInstructionPass::ProcessCopy(MachineInstr *MI,
672                                      MachineBasicBlock *MBB,
673                                      SmallPtrSet<MachineInstr*, 8> &Processed) {
674   if (Processed.count(MI))
675     return;
676
677   bool IsSrcPhys, IsDstPhys;
678   unsigned SrcReg, DstReg;
679   if (!isCopyToReg(*MI, TII, SrcReg, DstReg, IsSrcPhys, IsDstPhys))
680     return;
681
682   if (IsDstPhys && !IsSrcPhys)
683     DstRegMap.insert(std::make_pair(SrcReg, DstReg));
684   else if (!IsDstPhys && IsSrcPhys) {
685     bool isNew = SrcRegMap.insert(std::make_pair(DstReg, SrcReg)).second;
686     if (!isNew)
687       assert(SrcRegMap[DstReg] == SrcReg &&
688              "Can't map to two src physical registers!");
689
690     ScanUses(DstReg, MBB, Processed);
691   }
692
693   Processed.insert(MI);
694   return;
695 }
696
697 /// RescheduleMIBelowKill - If there is one more local instruction that reads
698 /// 'Reg' and it kills 'Reg, consider moving the instruction below the kill
699 /// instruction in order to eliminate the need for the copy.
700 bool
701 TwoAddressInstructionPass::RescheduleMIBelowKill(MachineBasicBlock *MBB,
702                                      MachineBasicBlock::iterator &mi,
703                                      MachineBasicBlock::iterator &nmi,
704                                      unsigned Reg) {
705   // Bail immediately if we don't have LV available. We use it to find kills
706   // efficiently.
707   if (!LV)
708     return false;
709
710   MachineInstr *MI = &*mi;
711   DenseMap<MachineInstr*, unsigned>::iterator DI = DistanceMap.find(MI);
712   if (DI == DistanceMap.end())
713     // Must be created from unfolded load. Don't waste time trying this.
714     return false;
715
716   MachineInstr *KillMI = LV->getVarInfo(Reg).findKill(MBB);
717   if (!KillMI || MI == KillMI || KillMI->isCopy() || KillMI->isCopyLike())
718     // Don't mess with copies, they may be coalesced later.
719     return false;
720
721   if (KillMI->hasUnmodeledSideEffects() || KillMI->isCall() ||
722       KillMI->isBranch() || KillMI->isTerminator())
723     // Don't move pass calls, etc.
724     return false;
725
726   unsigned DstReg;
727   if (isTwoAddrUse(*KillMI, Reg, DstReg))
728     return false;
729
730   bool SeenStore = true;
731   if (!MI->isSafeToMove(TII, AA, SeenStore))
732     return false;
733
734   if (TII->getInstrLatency(InstrItins, MI) > 1)
735     // FIXME: Needs more sophisticated heuristics.
736     return false;
737
738   SmallSet<unsigned, 2> Uses;
739   SmallSet<unsigned, 2> Kills;
740   SmallSet<unsigned, 2> Defs;
741   for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
742     const MachineOperand &MO = MI->getOperand(i);
743     if (!MO.isReg())
744       continue;
745     unsigned MOReg = MO.getReg();
746     if (!MOReg)
747       continue;
748     if (MO.isDef())
749       Defs.insert(MOReg);
750     else {
751       Uses.insert(MOReg);
752       if (MO.isKill() && MOReg != Reg)
753         Kills.insert(MOReg);
754     }
755   }
756
757   // Move the copies connected to MI down as well.
758   MachineBasicBlock::iterator From = MI;
759   MachineBasicBlock::iterator To = llvm::next(From);
760   while (To->isCopy() && Defs.count(To->getOperand(1).getReg())) {
761     Defs.insert(To->getOperand(0).getReg());
762     ++To;
763   }
764
765   // Check if the reschedule will not break depedencies.
766   unsigned NumVisited = 0;
767   MachineBasicBlock::iterator KillPos = KillMI;
768   ++KillPos;
769   for (MachineBasicBlock::iterator I = To; I != KillPos; ++I) {
770     MachineInstr *OtherMI = I;
771     // DBG_VALUE cannot be counted against the limit.
772     if (OtherMI->isDebugValue())
773       continue;
774     if (NumVisited > 10)  // FIXME: Arbitrary limit to reduce compile time cost.
775       return false;
776     ++NumVisited;
777     if (OtherMI->hasUnmodeledSideEffects() || OtherMI->isCall() ||
778         OtherMI->isBranch() || OtherMI->isTerminator())
779       // Don't move pass calls, etc.
780       return false;
781     for (unsigned i = 0, e = OtherMI->getNumOperands(); i != e; ++i) {
782       const MachineOperand &MO = OtherMI->getOperand(i);
783       if (!MO.isReg())
784         continue;
785       unsigned MOReg = MO.getReg();
786       if (!MOReg)
787         continue;
788       if (MO.isDef()) {
789         if (Uses.count(MOReg))
790           // Physical register use would be clobbered.
791           return false;
792         if (!MO.isDead() && Defs.count(MOReg))
793           // May clobber a physical register def.
794           // FIXME: This may be too conservative. It's ok if the instruction
795           // is sunken completely below the use.
796           return false;
797       } else {
798         if (Defs.count(MOReg))
799           return false;
800         if (MOReg != Reg &&
801             ((MO.isKill() && Uses.count(MOReg)) || Kills.count(MOReg)))
802           // Don't want to extend other live ranges and update kills.
803           return false;
804         if (MOReg == Reg && !MO.isKill())
805           // We can't schedule across a use of the register in question.
806           return false;
807         // Ensure that if this is register in question, its the kill we expect.
808         assert((MOReg != Reg || OtherMI == KillMI) &&
809                "Found multiple kills of a register in a basic block");
810       }
811     }
812   }
813
814   // Move debug info as well.
815   while (From != MBB->begin() && llvm::prior(From)->isDebugValue())
816     --From;
817
818   // Copies following MI may have been moved as well.
819   nmi = To;
820   MBB->splice(KillPos, MBB, From, To);
821   DistanceMap.erase(DI);
822
823   // Update live variables
824   LV->removeVirtualRegisterKilled(Reg, KillMI);
825   LV->addVirtualRegisterKilled(Reg, MI);
826
827   DEBUG(dbgs() << "\trescheduled below kill: " << *KillMI);
828   return true;
829 }
830
831 /// isDefTooClose - Return true if the re-scheduling will put the given
832 /// instruction too close to the defs of its register dependencies.
833 bool TwoAddressInstructionPass::isDefTooClose(unsigned Reg, unsigned Dist,
834                                               MachineInstr *MI,
835                                               MachineBasicBlock *MBB) {
836   for (MachineRegisterInfo::def_iterator DI = MRI->def_begin(Reg),
837          DE = MRI->def_end(); DI != DE; ++DI) {
838     MachineInstr *DefMI = &*DI;
839     if (DefMI->getParent() != MBB || DefMI->isCopy() || DefMI->isCopyLike())
840       continue;
841     if (DefMI == MI)
842       return true; // MI is defining something KillMI uses
843     DenseMap<MachineInstr*, unsigned>::iterator DDI = DistanceMap.find(DefMI);
844     if (DDI == DistanceMap.end())
845       return true;  // Below MI
846     unsigned DefDist = DDI->second;
847     assert(Dist > DefDist && "Visited def already?");
848     if (TII->getInstrLatency(InstrItins, DefMI) > (Dist - DefDist))
849       return true;
850   }
851   return false;
852 }
853
854 /// RescheduleKillAboveMI - If there is one more local instruction that reads
855 /// 'Reg' and it kills 'Reg, consider moving the kill instruction above the
856 /// current two-address instruction in order to eliminate the need for the
857 /// copy.
858 bool
859 TwoAddressInstructionPass::RescheduleKillAboveMI(MachineBasicBlock *MBB,
860                                      MachineBasicBlock::iterator &mi,
861                                      MachineBasicBlock::iterator &nmi,
862                                      unsigned Reg) {
863   // Bail immediately if we don't have LV available. We use it to find kills
864   // efficiently.
865   if (!LV)
866     return false;
867
868   MachineInstr *MI = &*mi;
869   DenseMap<MachineInstr*, unsigned>::iterator DI = DistanceMap.find(MI);
870   if (DI == DistanceMap.end())
871     // Must be created from unfolded load. Don't waste time trying this.
872     return false;
873
874   MachineInstr *KillMI = LV->getVarInfo(Reg).findKill(MBB);
875   if (!KillMI || MI == KillMI || KillMI->isCopy() || KillMI->isCopyLike())
876     // Don't mess with copies, they may be coalesced later.
877     return false;
878
879   unsigned DstReg;
880   if (isTwoAddrUse(*KillMI, Reg, DstReg))
881     return false;
882
883   bool SeenStore = true;
884   if (!KillMI->isSafeToMove(TII, AA, SeenStore))
885     return false;
886
887   SmallSet<unsigned, 2> Uses;
888   SmallSet<unsigned, 2> Kills;
889   SmallSet<unsigned, 2> Defs;
890   SmallSet<unsigned, 2> LiveDefs;
891   for (unsigned i = 0, e = KillMI->getNumOperands(); i != e; ++i) {
892     const MachineOperand &MO = KillMI->getOperand(i);
893     if (!MO.isReg())
894       continue;
895     unsigned MOReg = MO.getReg();
896     if (MO.isUse()) {
897       if (!MOReg)
898         continue;
899       if (isDefTooClose(MOReg, DI->second, MI, MBB))
900         return false;
901       if (MOReg == Reg && !MO.isKill())
902         return false;
903       Uses.insert(MOReg);
904       if (MO.isKill() && MOReg != Reg)
905         Kills.insert(MOReg);
906     } else if (TargetRegisterInfo::isPhysicalRegister(MOReg)) {
907       Defs.insert(MOReg);
908       if (!MO.isDead())
909         LiveDefs.insert(MOReg);
910     }
911   }
912
913   // Check if the reschedule will not break depedencies.
914   unsigned NumVisited = 0;
915   MachineBasicBlock::iterator KillPos = KillMI;
916   for (MachineBasicBlock::iterator I = mi; I != KillPos; ++I) {
917     MachineInstr *OtherMI = I;
918     // DBG_VALUE cannot be counted against the limit.
919     if (OtherMI->isDebugValue())
920       continue;
921     if (NumVisited > 10)  // FIXME: Arbitrary limit to reduce compile time cost.
922       return false;
923     ++NumVisited;
924     if (OtherMI->hasUnmodeledSideEffects() || OtherMI->isCall() ||
925         OtherMI->isBranch() || OtherMI->isTerminator())
926       // Don't move pass calls, etc.
927       return false;
928     SmallVector<unsigned, 2> OtherDefs;
929     for (unsigned i = 0, e = OtherMI->getNumOperands(); i != e; ++i) {
930       const MachineOperand &MO = OtherMI->getOperand(i);
931       if (!MO.isReg())
932         continue;
933       unsigned MOReg = MO.getReg();
934       if (!MOReg)
935         continue;
936       if (MO.isUse()) {
937         if (Defs.count(MOReg))
938           // Moving KillMI can clobber the physical register if the def has
939           // not been seen.
940           return false;
941         if (Kills.count(MOReg))
942           // Don't want to extend other live ranges and update kills.
943           return false;
944         if (OtherMI != MI && MOReg == Reg && !MO.isKill())
945           // We can't schedule across a use of the register in question.
946           return false;
947       } else {
948         OtherDefs.push_back(MOReg);
949       }
950     }
951
952     for (unsigned i = 0, e = OtherDefs.size(); i != e; ++i) {
953       unsigned MOReg = OtherDefs[i];
954       if (Uses.count(MOReg))
955         return false;
956       if (TargetRegisterInfo::isPhysicalRegister(MOReg) &&
957           LiveDefs.count(MOReg))
958         return false;
959       // Physical register def is seen.
960       Defs.erase(MOReg);
961     }
962   }
963
964   // Move the old kill above MI, don't forget to move debug info as well.
965   MachineBasicBlock::iterator InsertPos = mi;
966   while (InsertPos != MBB->begin() && llvm::prior(InsertPos)->isDebugValue())
967     --InsertPos;
968   MachineBasicBlock::iterator From = KillMI;
969   MachineBasicBlock::iterator To = llvm::next(From);
970   while (llvm::prior(From)->isDebugValue())
971     --From;
972   MBB->splice(InsertPos, MBB, From, To);
973
974   nmi = llvm::prior(InsertPos); // Backtrack so we process the moved instr.
975   DistanceMap.erase(DI);
976
977   // Update live variables
978   LV->removeVirtualRegisterKilled(Reg, KillMI);
979   LV->addVirtualRegisterKilled(Reg, MI);
980
981   DEBUG(dbgs() << "\trescheduled kill: " << *KillMI);
982   return true;
983 }
984
985 /// TryInstructionTransform - For the case where an instruction has a single
986 /// pair of tied register operands, attempt some transformations that may
987 /// either eliminate the tied operands or improve the opportunities for
988 /// coalescing away the register copy.  Returns true if no copy needs to be
989 /// inserted to untie mi's operands (either because they were untied, or
990 /// because mi was rescheduled, and will be visited again later).
991 bool TwoAddressInstructionPass::
992 TryInstructionTransform(MachineBasicBlock::iterator &mi,
993                         MachineBasicBlock::iterator &nmi,
994                         MachineFunction::iterator &mbbi,
995                         unsigned SrcIdx, unsigned DstIdx, unsigned Dist,
996                         SmallPtrSet<MachineInstr*, 8> &Processed) {
997   if (OptLevel == CodeGenOpt::None)
998     return false;
999
1000   MachineInstr &MI = *mi;
1001   unsigned regA = MI.getOperand(DstIdx).getReg();
1002   unsigned regB = MI.getOperand(SrcIdx).getReg();
1003
1004   assert(TargetRegisterInfo::isVirtualRegister(regB) &&
1005          "cannot make instruction into two-address form");
1006   bool regBKilled = isKilled(MI, regB, MRI, TII);
1007
1008   if (TargetRegisterInfo::isVirtualRegister(regA))
1009     ScanUses(regA, &*mbbi, Processed);
1010
1011   // Check if it is profitable to commute the operands.
1012   unsigned SrcOp1, SrcOp2;
1013   unsigned regC = 0;
1014   unsigned regCIdx = ~0U;
1015   bool TryCommute = false;
1016   bool AggressiveCommute = false;
1017   if (MI.isCommutable() && MI.getNumOperands() >= 3 &&
1018       TII->findCommutedOpIndices(&MI, SrcOp1, SrcOp2)) {
1019     if (SrcIdx == SrcOp1)
1020       regCIdx = SrcOp2;
1021     else if (SrcIdx == SrcOp2)
1022       regCIdx = SrcOp1;
1023
1024     if (regCIdx != ~0U) {
1025       regC = MI.getOperand(regCIdx).getReg();
1026       if (!regBKilled && isKilled(MI, regC, MRI, TII))
1027         // If C dies but B does not, swap the B and C operands.
1028         // This makes the live ranges of A and C joinable.
1029         TryCommute = true;
1030       else if (isProfitableToCommute(regA, regB, regC, &MI, mbbi, Dist)) {
1031         TryCommute = true;
1032         AggressiveCommute = true;
1033       }
1034     }
1035   }
1036
1037   // If it's profitable to commute, try to do so.
1038   if (TryCommute && CommuteInstruction(mi, mbbi, regB, regC, Dist)) {
1039     ++NumCommuted;
1040     if (AggressiveCommute)
1041       ++NumAggrCommuted;
1042     return false;
1043   }
1044
1045   // If there is one more use of regB later in the same MBB, consider
1046   // re-schedule this MI below it.
1047   if (RescheduleMIBelowKill(mbbi, mi, nmi, regB)) {
1048     ++NumReSchedDowns;
1049     return true;
1050   }
1051
1052   if (MI.isConvertibleTo3Addr()) {
1053     // This instruction is potentially convertible to a true
1054     // three-address instruction.  Check if it is profitable.
1055     if (!regBKilled || isProfitableToConv3Addr(regA, regB)) {
1056       // Try to convert it.
1057       if (ConvertInstTo3Addr(mi, nmi, mbbi, regA, regB, Dist)) {
1058         ++NumConvertedTo3Addr;
1059         return true; // Done with this instruction.
1060       }
1061     }
1062   }
1063
1064   // If there is one more use of regB later in the same MBB, consider
1065   // re-schedule it before this MI if it's legal.
1066   if (RescheduleKillAboveMI(mbbi, mi, nmi, regB)) {
1067     ++NumReSchedUps;
1068     return true;
1069   }
1070
1071   // If this is an instruction with a load folded into it, try unfolding
1072   // the load, e.g. avoid this:
1073   //   movq %rdx, %rcx
1074   //   addq (%rax), %rcx
1075   // in favor of this:
1076   //   movq (%rax), %rcx
1077   //   addq %rdx, %rcx
1078   // because it's preferable to schedule a load than a register copy.
1079   if (MI.mayLoad() && !regBKilled) {
1080     // Determine if a load can be unfolded.
1081     unsigned LoadRegIndex;
1082     unsigned NewOpc =
1083       TII->getOpcodeAfterMemoryUnfold(MI.getOpcode(),
1084                                       /*UnfoldLoad=*/true,
1085                                       /*UnfoldStore=*/false,
1086                                       &LoadRegIndex);
1087     if (NewOpc != 0) {
1088       const MCInstrDesc &UnfoldMCID = TII->get(NewOpc);
1089       if (UnfoldMCID.getNumDefs() == 1) {
1090         MachineFunction &MF = *mbbi->getParent();
1091
1092         // Unfold the load.
1093         DEBUG(dbgs() << "2addr:   UNFOLDING: " << MI);
1094         const TargetRegisterClass *RC =
1095           TRI->getAllocatableClass(
1096             TII->getRegClass(UnfoldMCID, LoadRegIndex, TRI, MF));
1097         unsigned Reg = MRI->createVirtualRegister(RC);
1098         SmallVector<MachineInstr *, 2> NewMIs;
1099         if (!TII->unfoldMemoryOperand(MF, &MI, Reg,
1100                                       /*UnfoldLoad=*/true,/*UnfoldStore=*/false,
1101                                       NewMIs)) {
1102           DEBUG(dbgs() << "2addr: ABANDONING UNFOLD\n");
1103           return false;
1104         }
1105         assert(NewMIs.size() == 2 &&
1106                "Unfolded a load into multiple instructions!");
1107         // The load was previously folded, so this is the only use.
1108         NewMIs[1]->addRegisterKilled(Reg, TRI);
1109
1110         // Tentatively insert the instructions into the block so that they
1111         // look "normal" to the transformation logic.
1112         mbbi->insert(mi, NewMIs[0]);
1113         mbbi->insert(mi, NewMIs[1]);
1114
1115         DEBUG(dbgs() << "2addr:    NEW LOAD: " << *NewMIs[0]
1116                      << "2addr:    NEW INST: " << *NewMIs[1]);
1117
1118         // Transform the instruction, now that it no longer has a load.
1119         unsigned NewDstIdx = NewMIs[1]->findRegisterDefOperandIdx(regA);
1120         unsigned NewSrcIdx = NewMIs[1]->findRegisterUseOperandIdx(regB);
1121         MachineBasicBlock::iterator NewMI = NewMIs[1];
1122         bool TransformSuccess =
1123           TryInstructionTransform(NewMI, mi, mbbi,
1124                                   NewSrcIdx, NewDstIdx, Dist, Processed);
1125         if (TransformSuccess ||
1126             NewMIs[1]->getOperand(NewSrcIdx).isKill()) {
1127           // Success, or at least we made an improvement. Keep the unfolded
1128           // instructions and discard the original.
1129           if (LV) {
1130             for (unsigned i = 0, e = MI.getNumOperands(); i != e; ++i) {
1131               MachineOperand &MO = MI.getOperand(i);
1132               if (MO.isReg() &&
1133                   TargetRegisterInfo::isVirtualRegister(MO.getReg())) {
1134                 if (MO.isUse()) {
1135                   if (MO.isKill()) {
1136                     if (NewMIs[0]->killsRegister(MO.getReg()))
1137                       LV->replaceKillInstruction(MO.getReg(), &MI, NewMIs[0]);
1138                     else {
1139                       assert(NewMIs[1]->killsRegister(MO.getReg()) &&
1140                              "Kill missing after load unfold!");
1141                       LV->replaceKillInstruction(MO.getReg(), &MI, NewMIs[1]);
1142                     }
1143                   }
1144                 } else if (LV->removeVirtualRegisterDead(MO.getReg(), &MI)) {
1145                   if (NewMIs[1]->registerDefIsDead(MO.getReg()))
1146                     LV->addVirtualRegisterDead(MO.getReg(), NewMIs[1]);
1147                   else {
1148                     assert(NewMIs[0]->registerDefIsDead(MO.getReg()) &&
1149                            "Dead flag missing after load unfold!");
1150                     LV->addVirtualRegisterDead(MO.getReg(), NewMIs[0]);
1151                   }
1152                 }
1153               }
1154             }
1155             LV->addVirtualRegisterKilled(Reg, NewMIs[1]);
1156           }
1157           MI.eraseFromParent();
1158           mi = NewMIs[1];
1159           if (TransformSuccess)
1160             return true;
1161         } else {
1162           // Transforming didn't eliminate the tie and didn't lead to an
1163           // improvement. Clean up the unfolded instructions and keep the
1164           // original.
1165           DEBUG(dbgs() << "2addr: ABANDONING UNFOLD\n");
1166           NewMIs[0]->eraseFromParent();
1167           NewMIs[1]->eraseFromParent();
1168         }
1169       }
1170     }
1171   }
1172
1173   return false;
1174 }
1175
1176 /// runOnMachineFunction - Reduce two-address instructions to two operands.
1177 ///
1178 bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &MF) {
1179   const TargetMachine &TM = MF.getTarget();
1180   MRI = &MF.getRegInfo();
1181   TII = TM.getInstrInfo();
1182   TRI = TM.getRegisterInfo();
1183   InstrItins = TM.getInstrItineraryData();
1184   LV = getAnalysisIfAvailable<LiveVariables>();
1185   AA = &getAnalysis<AliasAnalysis>();
1186   OptLevel = TM.getOptLevel();
1187
1188   bool MadeChange = false;
1189
1190   DEBUG(dbgs() << "********** REWRITING TWO-ADDR INSTRS **********\n");
1191   DEBUG(dbgs() << "********** Function: "
1192         << MF.getFunction()->getName() << '\n');
1193
1194   // This pass takes the function out of SSA form.
1195   MRI->leaveSSA();
1196
1197   // ReMatRegs - Keep track of the registers whose def's are remat'ed.
1198   BitVector ReMatRegs(MRI->getNumVirtRegs());
1199
1200   typedef DenseMap<unsigned, SmallVector<std::pair<unsigned, unsigned>, 4> >
1201     TiedOperandMap;
1202   TiedOperandMap TiedOperands(4);
1203
1204   SmallPtrSet<MachineInstr*, 8> Processed;
1205   for (MachineFunction::iterator mbbi = MF.begin(), mbbe = MF.end();
1206        mbbi != mbbe; ++mbbi) {
1207     unsigned Dist = 0;
1208     DistanceMap.clear();
1209     SrcRegMap.clear();
1210     DstRegMap.clear();
1211     Processed.clear();
1212     for (MachineBasicBlock::iterator mi = mbbi->begin(), me = mbbi->end();
1213          mi != me; ) {
1214       MachineBasicBlock::iterator nmi = llvm::next(mi);
1215       if (mi->isDebugValue()) {
1216         mi = nmi;
1217         continue;
1218       }
1219
1220       // Remember REG_SEQUENCE instructions, we'll deal with them later.
1221       if (mi->isRegSequence())
1222         RegSequences.push_back(&*mi);
1223
1224       const MCInstrDesc &MCID = mi->getDesc();
1225       bool FirstTied = true;
1226
1227       DistanceMap.insert(std::make_pair(mi, ++Dist));
1228
1229       ProcessCopy(&*mi, &*mbbi, Processed);
1230
1231       // First scan through all the tied register uses in this instruction
1232       // and record a list of pairs of tied operands for each register.
1233       unsigned NumOps = mi->isInlineAsm()
1234         ? mi->getNumOperands() : MCID.getNumOperands();
1235       for (unsigned SrcIdx = 0; SrcIdx < NumOps; ++SrcIdx) {
1236         unsigned DstIdx = 0;
1237         if (!mi->isRegTiedToDefOperand(SrcIdx, &DstIdx))
1238           continue;
1239
1240         if (FirstTied) {
1241           FirstTied = false;
1242           ++NumTwoAddressInstrs;
1243           DEBUG(dbgs() << '\t' << *mi);
1244         }
1245
1246         assert(mi->getOperand(SrcIdx).isReg() &&
1247                mi->getOperand(SrcIdx).getReg() &&
1248                mi->getOperand(SrcIdx).isUse() &&
1249                "two address instruction invalid");
1250
1251         unsigned regB = mi->getOperand(SrcIdx).getReg();
1252
1253         // Deal with <undef> uses immediately - simply rewrite the src operand.
1254         if (mi->getOperand(SrcIdx).isUndef()) {
1255           unsigned DstReg = mi->getOperand(DstIdx).getReg();
1256           // Constrain the DstReg register class if required.
1257           if (TargetRegisterInfo::isVirtualRegister(DstReg))
1258             if (const TargetRegisterClass *RC = TII->getRegClass(MCID, SrcIdx,
1259                                                                  TRI, MF))
1260               MRI->constrainRegClass(DstReg, RC);
1261           mi->getOperand(SrcIdx).setReg(DstReg);
1262           DEBUG(dbgs() << "\t\trewrite undef:\t" << *mi);
1263           continue;
1264         }
1265         TiedOperands[regB].push_back(std::make_pair(SrcIdx, DstIdx));
1266       }
1267
1268       // If the instruction has a single pair of tied operands, try some
1269       // transformations that may either eliminate the tied operands or
1270       // improve the opportunities for coalescing away the register copy.
1271       if (TiedOperands.size() == 1) {
1272         SmallVector<std::pair<unsigned, unsigned>, 4> &TiedPairs
1273           = TiedOperands.begin()->second;
1274         if (TiedPairs.size() == 1) {
1275           unsigned SrcIdx = TiedPairs[0].first;
1276           unsigned DstIdx = TiedPairs[0].second;
1277           unsigned SrcReg = mi->getOperand(SrcIdx).getReg();
1278           unsigned DstReg = mi->getOperand(DstIdx).getReg();
1279           if (SrcReg != DstReg &&
1280               TryInstructionTransform(mi, nmi, mbbi, SrcIdx, DstIdx, Dist,
1281                                       Processed)) {
1282             // The tied operands have been eliminated or shifted further down the
1283             // block to ease elimination. Continue processing with 'nmi'.
1284             TiedOperands.clear();
1285             mi = nmi;
1286             continue;
1287           }
1288         }
1289       }
1290
1291       // Now iterate over the information collected above.
1292       for (TiedOperandMap::iterator OI = TiedOperands.begin(),
1293              OE = TiedOperands.end(); OI != OE; ++OI) {
1294         SmallVector<std::pair<unsigned, unsigned>, 4> &TiedPairs = OI->second;
1295
1296         bool IsEarlyClobber = false;
1297         bool RemovedKillFlag = false;
1298         bool AllUsesCopied = true;
1299         unsigned LastCopiedReg = 0;
1300         unsigned regB = OI->first;
1301         for (unsigned tpi = 0, tpe = TiedPairs.size(); tpi != tpe; ++tpi) {
1302           unsigned SrcIdx = TiedPairs[tpi].first;
1303           unsigned DstIdx = TiedPairs[tpi].second;
1304
1305           const MachineOperand &DstMO = mi->getOperand(DstIdx);
1306           unsigned regA = DstMO.getReg();
1307           IsEarlyClobber |= DstMO.isEarlyClobber();
1308
1309           // Grab regB from the instruction because it may have changed if the
1310           // instruction was commuted.
1311           regB = mi->getOperand(SrcIdx).getReg();
1312
1313           if (regA == regB) {
1314             // The register is tied to multiple destinations (or else we would
1315             // not have continued this far), but this use of the register
1316             // already matches the tied destination.  Leave it.
1317             AllUsesCopied = false;
1318             continue;
1319           }
1320           LastCopiedReg = regA;
1321
1322           assert(TargetRegisterInfo::isVirtualRegister(regB) &&
1323                  "cannot make instruction into two-address form");
1324
1325 #ifndef NDEBUG
1326           // First, verify that we don't have a use of "a" in the instruction
1327           // (a = b + a for example) because our transformation will not
1328           // work. This should never occur because we are in SSA form.
1329           for (unsigned i = 0; i != mi->getNumOperands(); ++i)
1330             assert(i == DstIdx ||
1331                    !mi->getOperand(i).isReg() ||
1332                    mi->getOperand(i).getReg() != regA);
1333 #endif
1334
1335           // Emit a copy.
1336           BuildMI(*mbbi, mi, mi->getDebugLoc(), TII->get(TargetOpcode::COPY),
1337                   regA).addReg(regB);
1338
1339           // Update DistanceMap.
1340           MachineBasicBlock::iterator prevMI = prior(mi);
1341           DistanceMap.insert(std::make_pair(prevMI, Dist));
1342           DistanceMap[mi] = ++Dist;
1343
1344           DEBUG(dbgs() << "\t\tprepend:\t" << *prevMI);
1345
1346           MachineOperand &MO = mi->getOperand(SrcIdx);
1347           assert(MO.isReg() && MO.getReg() == regB && MO.isUse() &&
1348                  "inconsistent operand info for 2-reg pass");
1349           if (MO.isKill()) {
1350             MO.setIsKill(false);
1351             RemovedKillFlag = true;
1352           }
1353
1354           // Make sure regA is a legal regclass for the SrcIdx operand.
1355           if (TargetRegisterInfo::isVirtualRegister(regA) &&
1356               TargetRegisterInfo::isVirtualRegister(regB))
1357             MRI->constrainRegClass(regA, MRI->getRegClass(regB));
1358
1359           MO.setReg(regA);
1360
1361           // Propagate SrcRegMap.
1362           SrcRegMap[regA] = regB;
1363         }
1364
1365         if (AllUsesCopied) {
1366           if (!IsEarlyClobber) {
1367             // Replace other (un-tied) uses of regB with LastCopiedReg.
1368             for (unsigned i = 0, e = mi->getNumOperands(); i != e; ++i) {
1369               MachineOperand &MO = mi->getOperand(i);
1370               if (MO.isReg() && MO.getReg() == regB && MO.isUse()) {
1371                 if (MO.isKill()) {
1372                   MO.setIsKill(false);
1373                   RemovedKillFlag = true;
1374                 }
1375                 MO.setReg(LastCopiedReg);
1376               }
1377             }
1378           }
1379
1380           // Update live variables for regB.
1381           if (RemovedKillFlag && LV && LV->getVarInfo(regB).removeKill(mi))
1382             LV->addVirtualRegisterKilled(regB, prior(mi));
1383
1384         } else if (RemovedKillFlag) {
1385           // Some tied uses of regB matched their destination registers, so
1386           // regB is still used in this instruction, but a kill flag was
1387           // removed from a different tied use of regB, so now we need to add
1388           // a kill flag to one of the remaining uses of regB.
1389           for (unsigned i = 0, e = mi->getNumOperands(); i != e; ++i) {
1390             MachineOperand &MO = mi->getOperand(i);
1391             if (MO.isReg() && MO.getReg() == regB && MO.isUse()) {
1392               MO.setIsKill(true);
1393               break;
1394             }
1395           }
1396         }
1397
1398         // We didn't change anything if there was a single tied pair, and that
1399         // pair didn't require copies.
1400         if (AllUsesCopied || TiedPairs.size() > 1) {
1401           MadeChange = true;
1402
1403           // Schedule the source copy / remat inserted to form two-address
1404           // instruction. FIXME: Does it matter the distance map may not be
1405           // accurate after it's scheduled?
1406           TII->scheduleTwoAddrSource(prior(mi), mi, *TRI);
1407         }
1408
1409         DEBUG(dbgs() << "\t\trewrite to:\t" << *mi);
1410       }
1411
1412       // Rewrite INSERT_SUBREG as COPY now that we no longer need SSA form.
1413       if (mi->isInsertSubreg()) {
1414         // From %reg = INSERT_SUBREG %reg, %subreg, subidx
1415         // To   %reg:subidx = COPY %subreg
1416         unsigned SubIdx = mi->getOperand(3).getImm();
1417         mi->RemoveOperand(3);
1418         assert(mi->getOperand(0).getSubReg() == 0 && "Unexpected subreg idx");
1419         mi->getOperand(0).setSubReg(SubIdx);
1420         mi->getOperand(0).setIsUndef(mi->getOperand(1).isUndef());
1421         mi->RemoveOperand(1);
1422         mi->setDesc(TII->get(TargetOpcode::COPY));
1423         DEBUG(dbgs() << "\t\tconvert to:\t" << *mi);
1424       }
1425
1426       // Clear TiedOperands here instead of at the top of the loop
1427       // since most instructions do not have tied operands.
1428       TiedOperands.clear();
1429       mi = nmi;
1430     }
1431   }
1432
1433   // Some remat'ed instructions are dead.
1434   for (int i = ReMatRegs.find_first(); i != -1; i = ReMatRegs.find_next(i)) {
1435     unsigned VReg = TargetRegisterInfo::index2VirtReg(i);
1436     if (MRI->use_nodbg_empty(VReg)) {
1437       MachineInstr *DefMI = MRI->getVRegDef(VReg);
1438       DefMI->eraseFromParent();
1439     }
1440   }
1441
1442   // Eliminate REG_SEQUENCE instructions. Their whole purpose was to preseve
1443   // SSA form. It's now safe to de-SSA.
1444   MadeChange |= EliminateRegSequences();
1445
1446   return MadeChange;
1447 }
1448
1449 static void UpdateRegSequenceSrcs(unsigned SrcReg,
1450                                   unsigned DstReg, unsigned SubIdx,
1451                                   MachineRegisterInfo *MRI,
1452                                   const TargetRegisterInfo &TRI) {
1453   for (MachineRegisterInfo::reg_iterator RI = MRI->reg_begin(SrcReg),
1454          RE = MRI->reg_end(); RI != RE; ) {
1455     MachineOperand &MO = RI.getOperand();
1456     ++RI;
1457     MO.substVirtReg(DstReg, SubIdx, TRI);
1458   }
1459 }
1460
1461 // Find the first def of Reg, assuming they are all in the same basic block.
1462 static MachineInstr *findFirstDef(unsigned Reg, MachineRegisterInfo *MRI) {
1463   SmallPtrSet<MachineInstr*, 8> Defs;
1464   MachineInstr *First = 0;
1465   for (MachineRegisterInfo::def_iterator RI = MRI->def_begin(Reg);
1466        MachineInstr *MI = RI.skipInstruction(); Defs.insert(MI))
1467     First = MI;
1468   if (!First)
1469     return 0;
1470
1471   MachineBasicBlock *MBB = First->getParent();
1472   MachineBasicBlock::iterator A = First, B = First;
1473   bool Moving;
1474   do {
1475     Moving = false;
1476     if (A != MBB->begin()) {
1477       Moving = true;
1478       --A;
1479       if (Defs.erase(A)) First = A;
1480     }
1481     if (B != MBB->end()) {
1482       Defs.erase(B);
1483       ++B;
1484       Moving = true;
1485     }
1486   } while (Moving && !Defs.empty());
1487   assert(Defs.empty() && "Instructions outside basic block!");
1488   return First;
1489 }
1490
1491 /// CoalesceExtSubRegs - If a number of sources of the REG_SEQUENCE are
1492 /// EXTRACT_SUBREG from the same register and to the same virtual register
1493 /// with different sub-register indices, attempt to combine the
1494 /// EXTRACT_SUBREGs and pre-coalesce them. e.g.
1495 /// %reg1026<def> = VLDMQ %reg1025<kill>, 260, pred:14, pred:%reg0
1496 /// %reg1029:6<def> = EXTRACT_SUBREG %reg1026, 6
1497 /// %reg1029:5<def> = EXTRACT_SUBREG %reg1026<kill>, 5
1498 /// Since D subregs 5, 6 can combine to a Q register, we can coalesce
1499 /// reg1026 to reg1029.
1500 void
1501 TwoAddressInstructionPass::CoalesceExtSubRegs(SmallVector<unsigned,4> &Srcs,
1502                                               unsigned DstReg) {
1503   SmallSet<unsigned, 4> Seen;
1504   for (unsigned i = 0, e = Srcs.size(); i != e; ++i) {
1505     unsigned SrcReg = Srcs[i];
1506     if (!Seen.insert(SrcReg))
1507       continue;
1508
1509     // Check that the instructions are all in the same basic block.
1510     MachineInstr *SrcDefMI = MRI->getUniqueVRegDef(SrcReg);
1511     MachineInstr *DstDefMI = MRI->getUniqueVRegDef(DstReg);
1512     if (!SrcDefMI || !DstDefMI ||
1513         SrcDefMI->getParent() != DstDefMI->getParent())
1514       continue;
1515
1516     // If there are no other uses than copies which feed into
1517     // the reg_sequence, then we might be able to coalesce them.
1518     bool CanCoalesce = true;
1519     SmallVector<unsigned, 4> SrcSubIndices, DstSubIndices;
1520     for (MachineRegisterInfo::use_nodbg_iterator
1521            UI = MRI->use_nodbg_begin(SrcReg),
1522            UE = MRI->use_nodbg_end(); UI != UE; ++UI) {
1523       MachineInstr *UseMI = &*UI;
1524       if (!UseMI->isCopy() || UseMI->getOperand(0).getReg() != DstReg) {
1525         CanCoalesce = false;
1526         break;
1527       }
1528       SrcSubIndices.push_back(UseMI->getOperand(1).getSubReg());
1529       DstSubIndices.push_back(UseMI->getOperand(0).getSubReg());
1530     }
1531
1532     if (!CanCoalesce || SrcSubIndices.size() < 2)
1533       continue;
1534
1535     // Check that the source subregisters can be combined.
1536     std::sort(SrcSubIndices.begin(), SrcSubIndices.end());
1537     unsigned NewSrcSubIdx = 0;
1538     if (!TRI->canCombineSubRegIndices(MRI->getRegClass(SrcReg), SrcSubIndices,
1539                                       NewSrcSubIdx))
1540       continue;
1541
1542     // Check that the destination subregisters can also be combined.
1543     std::sort(DstSubIndices.begin(), DstSubIndices.end());
1544     unsigned NewDstSubIdx = 0;
1545     if (!TRI->canCombineSubRegIndices(MRI->getRegClass(DstReg), DstSubIndices,
1546                                       NewDstSubIdx))
1547       continue;
1548
1549     // If neither source nor destination can be combined to the full register,
1550     // just give up.  This could be improved if it ever matters.
1551     if (NewSrcSubIdx != 0 && NewDstSubIdx != 0)
1552       continue;
1553
1554     // Now that we know that all the uses are extract_subregs and that those
1555     // subregs can somehow be combined, scan all the extract_subregs again to
1556     // make sure the subregs are in the right order and can be composed.
1557     MachineInstr *SomeMI = 0;
1558     CanCoalesce = true;
1559     for (MachineRegisterInfo::use_nodbg_iterator
1560            UI = MRI->use_nodbg_begin(SrcReg),
1561            UE = MRI->use_nodbg_end(); UI != UE; ++UI) {
1562       MachineInstr *UseMI = &*UI;
1563       assert(UseMI->isCopy());
1564       unsigned DstSubIdx = UseMI->getOperand(0).getSubReg();
1565       unsigned SrcSubIdx = UseMI->getOperand(1).getSubReg();
1566       assert(DstSubIdx != 0 && "missing subreg from RegSequence elimination");
1567       if ((NewDstSubIdx == 0 &&
1568            TRI->composeSubRegIndices(NewSrcSubIdx, DstSubIdx) != SrcSubIdx) ||
1569           (NewSrcSubIdx == 0 &&
1570            TRI->composeSubRegIndices(NewDstSubIdx, SrcSubIdx) != DstSubIdx)) {
1571         CanCoalesce = false;
1572         break;
1573       }
1574       // Keep track of one of the uses.  Preferably the first one which has a
1575       // <def,undef> flag.
1576       if (!SomeMI || UseMI->getOperand(0).isUndef())
1577         SomeMI = UseMI;
1578     }
1579     if (!CanCoalesce)
1580       continue;
1581
1582     // Insert a copy to replace the original.
1583     MachineInstr *CopyMI = BuildMI(*SomeMI->getParent(), SomeMI,
1584                                    SomeMI->getDebugLoc(),
1585                                    TII->get(TargetOpcode::COPY))
1586       .addReg(DstReg, RegState::Define |
1587                       getUndefRegState(SomeMI->getOperand(0).isUndef()),
1588               NewDstSubIdx)
1589       .addReg(SrcReg, 0, NewSrcSubIdx);
1590
1591     // Remove all the old extract instructions.
1592     for (MachineRegisterInfo::use_nodbg_iterator
1593            UI = MRI->use_nodbg_begin(SrcReg),
1594            UE = MRI->use_nodbg_end(); UI != UE; ) {
1595       MachineInstr *UseMI = &*UI;
1596       ++UI;
1597       if (UseMI == CopyMI)
1598         continue;
1599       assert(UseMI->isCopy());
1600       // Move any kills to the new copy or extract instruction.
1601       if (UseMI->getOperand(1).isKill()) {
1602         CopyMI->getOperand(1).setIsKill();
1603         if (LV)
1604           // Update live variables
1605           LV->replaceKillInstruction(SrcReg, UseMI, &*CopyMI);
1606       }
1607       UseMI->eraseFromParent();
1608     }
1609   }
1610 }
1611
1612 static bool HasOtherRegSequenceUses(unsigned Reg, MachineInstr *RegSeq,
1613                                     MachineRegisterInfo *MRI) {
1614   for (MachineRegisterInfo::use_iterator UI = MRI->use_begin(Reg),
1615          UE = MRI->use_end(); UI != UE; ++UI) {
1616     MachineInstr *UseMI = &*UI;
1617     if (UseMI != RegSeq && UseMI->isRegSequence())
1618       return true;
1619   }
1620   return false;
1621 }
1622
1623 /// EliminateRegSequences - Eliminate REG_SEQUENCE instructions as part
1624 /// of the de-ssa process. This replaces sources of REG_SEQUENCE as
1625 /// sub-register references of the register defined by REG_SEQUENCE. e.g.
1626 ///
1627 /// %reg1029<def>, %reg1030<def> = VLD1q16 %reg1024<kill>, ...
1628 /// %reg1031<def> = REG_SEQUENCE %reg1029<kill>, 5, %reg1030<kill>, 6
1629 /// =>
1630 /// %reg1031:5<def>, %reg1031:6<def> = VLD1q16 %reg1024<kill>, ...
1631 bool TwoAddressInstructionPass::EliminateRegSequences() {
1632   if (RegSequences.empty())
1633     return false;
1634
1635   for (unsigned i = 0, e = RegSequences.size(); i != e; ++i) {
1636     MachineInstr *MI = RegSequences[i];
1637     unsigned DstReg = MI->getOperand(0).getReg();
1638     if (MI->getOperand(0).getSubReg() ||
1639         TargetRegisterInfo::isPhysicalRegister(DstReg) ||
1640         !(MI->getNumOperands() & 1)) {
1641       DEBUG(dbgs() << "Illegal REG_SEQUENCE instruction:" << *MI);
1642       llvm_unreachable(0);
1643     }
1644
1645     bool IsImpDef = true;
1646     SmallVector<unsigned, 4> RealSrcs;
1647     SmallSet<unsigned, 4> Seen;
1648     for (unsigned i = 1, e = MI->getNumOperands(); i < e; i += 2) {
1649       // Nothing needs to be inserted for <undef> operands.
1650       if (MI->getOperand(i).isUndef()) {
1651         MI->getOperand(i).setReg(0);
1652         continue;
1653       }
1654       unsigned SrcReg = MI->getOperand(i).getReg();
1655       unsigned SrcSubIdx = MI->getOperand(i).getSubReg();
1656       unsigned SubIdx = MI->getOperand(i+1).getImm();
1657       // DefMI of NULL means the value does not have a vreg in this block
1658       // i.e., its a physical register or a subreg.
1659       // In either case we force a copy to be generated.
1660       MachineInstr *DefMI = NULL;
1661       if (!MI->getOperand(i).getSubReg() &&
1662           !TargetRegisterInfo::isPhysicalRegister(SrcReg)) {
1663         DefMI = MRI->getUniqueVRegDef(SrcReg);
1664       }
1665
1666       if (DefMI && DefMI->isImplicitDef()) {
1667         DefMI->eraseFromParent();
1668         continue;
1669       }
1670       IsImpDef = false;
1671
1672       // Remember COPY sources. These might be candidate for coalescing.
1673       if (DefMI && DefMI->isCopy() && DefMI->getOperand(1).getSubReg())
1674         RealSrcs.push_back(DefMI->getOperand(1).getReg());
1675
1676       bool isKill = MI->getOperand(i).isKill();
1677       if (!DefMI || !Seen.insert(SrcReg) ||
1678           MI->getParent() != DefMI->getParent() ||
1679           !isKill || HasOtherRegSequenceUses(SrcReg, MI, MRI) ||
1680           !TRI->getMatchingSuperRegClass(MRI->getRegClass(DstReg),
1681                                          MRI->getRegClass(SrcReg), SubIdx)) {
1682         // REG_SEQUENCE cannot have duplicated operands, add a copy.
1683         // Also add an copy if the source is live-in the block. We don't want
1684         // to end up with a partial-redef of a livein, e.g.
1685         // BB0:
1686         // reg1051:10<def> =
1687         // ...
1688         // BB1:
1689         // ... = reg1051:10
1690         // BB2:
1691         // reg1051:9<def> =
1692         // LiveIntervalAnalysis won't like it.
1693         //
1694         // If the REG_SEQUENCE doesn't kill its source, keeping live variables
1695         // correctly up to date becomes very difficult. Insert a copy.
1696
1697         // Defer any kill flag to the last operand using SrcReg. Otherwise, we
1698         // might insert a COPY that uses SrcReg after is was killed.
1699         if (isKill)
1700           for (unsigned j = i + 2; j < e; j += 2)
1701             if (MI->getOperand(j).getReg() == SrcReg) {
1702               MI->getOperand(j).setIsKill();
1703               isKill = false;
1704               break;
1705             }
1706
1707         MachineBasicBlock::iterator InsertLoc = MI;
1708         MachineInstr *CopyMI = BuildMI(*MI->getParent(), InsertLoc,
1709                                 MI->getDebugLoc(), TII->get(TargetOpcode::COPY))
1710             .addReg(DstReg, RegState::Define, SubIdx)
1711             .addReg(SrcReg, getKillRegState(isKill), SrcSubIdx);
1712         MI->getOperand(i).setReg(0);
1713         if (LV && isKill && !TargetRegisterInfo::isPhysicalRegister(SrcReg))
1714           LV->replaceKillInstruction(SrcReg, MI, CopyMI);
1715         DEBUG(dbgs() << "Inserted: " << *CopyMI);
1716       }
1717     }
1718
1719     for (unsigned i = 1, e = MI->getNumOperands(); i < e; i += 2) {
1720       unsigned SrcReg = MI->getOperand(i).getReg();
1721       if (!SrcReg) continue;
1722       unsigned SubIdx = MI->getOperand(i+1).getImm();
1723       UpdateRegSequenceSrcs(SrcReg, DstReg, SubIdx, MRI, *TRI);
1724     }
1725
1726     // Set <def,undef> flags on the first DstReg def in the basic block.
1727     // It marks the beginning of the live range. All the other defs are
1728     // read-modify-write.
1729     if (MachineInstr *Def = findFirstDef(DstReg, MRI)) {
1730       for (unsigned i = 0, e = Def->getNumOperands(); i != e; ++i) {
1731         MachineOperand &MO = Def->getOperand(i);
1732         if (MO.isReg() && MO.isDef() && MO.getReg() == DstReg)
1733           MO.setIsUndef();
1734       }
1735       // Make sure there is a full non-subreg imp-def operand on the
1736       // instruction.  This shouldn't be necessary, but it seems that at least
1737       // RAFast requires it.
1738       Def->addRegisterDefined(DstReg, TRI);
1739       DEBUG(dbgs() << "First def: " << *Def);
1740     }
1741
1742     if (IsImpDef) {
1743       DEBUG(dbgs() << "Turned: " << *MI << " into an IMPLICIT_DEF");
1744       MI->setDesc(TII->get(TargetOpcode::IMPLICIT_DEF));
1745       for (int j = MI->getNumOperands() - 1, ee = 0; j > ee; --j)
1746         MI->RemoveOperand(j);
1747     } else {
1748       DEBUG(dbgs() << "Eliminated: " << *MI);
1749       MI->eraseFromParent();
1750     }
1751
1752     // Try coalescing some EXTRACT_SUBREG instructions. This can create
1753     // INSERT_SUBREG instructions that must have <undef> flags added by
1754     // LiveIntervalAnalysis, so only run it when LiveVariables is available.
1755     if (LV)
1756       CoalesceExtSubRegs(RealSrcs, DstReg);
1757   }
1758
1759   RegSequences.clear();
1760   return true;
1761 }