6f619a9e567cc68a4e627b0e8fbec70da90d3261
[oota-llvm.git] / lib / Target / X86 / X86FloatingPoint.cpp
1 //===-- X86FloatingPoint.cpp - Floating point Reg -> Stack converter ------===//
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 defines the pass which converts floating point instructions from
11 // pseudo registers into register stack instructions.  This pass uses live
12 // variable information to indicate where the FPn registers are used and their
13 // lifetimes.
14 //
15 // The x87 hardware tracks liveness of the stack registers, so it is necessary
16 // to implement exact liveness tracking between basic blocks. The CFG edges are
17 // partitioned into bundles where the same FP registers must be live in
18 // identical stack positions. Instructions are inserted at the end of each basic
19 // block to rearrange the live registers to match the outgoing bundle.
20 //
21 // This approach avoids splitting critical edges at the potential cost of more
22 // live register shuffling instructions when critical edges are present.
23 //
24 //===----------------------------------------------------------------------===//
25
26 #define DEBUG_TYPE "x86-codegen"
27 #include "X86.h"
28 #include "X86InstrInfo.h"
29 #include "llvm/ADT/DepthFirstIterator.h"
30 #include "llvm/ADT/DenseMap.h"
31 #include "llvm/ADT/SmallPtrSet.h"
32 #include "llvm/ADT/SmallVector.h"
33 #include "llvm/ADT/Statistic.h"
34 #include "llvm/ADT/STLExtras.h"
35 #include "llvm/CodeGen/EdgeBundles.h"
36 #include "llvm/CodeGen/MachineFunctionPass.h"
37 #include "llvm/CodeGen/MachineInstrBuilder.h"
38 #include "llvm/CodeGen/MachineRegisterInfo.h"
39 #include "llvm/CodeGen/Passes.h"
40 #include "llvm/InlineAsm.h"
41 #include "llvm/Support/Debug.h"
42 #include "llvm/Support/ErrorHandling.h"
43 #include "llvm/Support/raw_ostream.h"
44 #include "llvm/Target/TargetInstrInfo.h"
45 #include "llvm/Target/TargetMachine.h"
46 #include <algorithm>
47 using namespace llvm;
48
49 STATISTIC(NumFXCH, "Number of fxch instructions inserted");
50 STATISTIC(NumFP  , "Number of floating point instructions");
51
52 namespace {
53   struct FPS : public MachineFunctionPass {
54     static char ID;
55     FPS() : MachineFunctionPass(ID) {
56       initializeEdgeBundlesPass(*PassRegistry::getPassRegistry());
57       // This is really only to keep valgrind quiet.
58       // The logic in isLive() is too much for it.
59       memset(Stack, 0, sizeof(Stack));
60       memset(RegMap, 0, sizeof(RegMap));
61     }
62
63     virtual void getAnalysisUsage(AnalysisUsage &AU) const {
64       AU.setPreservesCFG();
65       AU.addRequired<EdgeBundles>();
66       AU.addPreservedID(MachineLoopInfoID);
67       AU.addPreservedID(MachineDominatorsID);
68       MachineFunctionPass::getAnalysisUsage(AU);
69     }
70
71     virtual bool runOnMachineFunction(MachineFunction &MF);
72
73     virtual const char *getPassName() const { return "X86 FP Stackifier"; }
74
75   private:
76     const TargetInstrInfo *TII; // Machine instruction info.
77
78     // Two CFG edges are related if they leave the same block, or enter the same
79     // block. The transitive closure of an edge under this relation is a
80     // LiveBundle. It represents a set of CFG edges where the live FP stack
81     // registers must be allocated identically in the x87 stack.
82     //
83     // A LiveBundle is usually all the edges leaving a block, or all the edges
84     // entering a block, but it can contain more edges if critical edges are
85     // present.
86     //
87     // The set of live FP registers in a LiveBundle is calculated by bundleCFG,
88     // but the exact mapping of FP registers to stack slots is fixed later.
89     struct LiveBundle {
90       // Bit mask of live FP registers. Bit 0 = FP0, bit 1 = FP1, &c.
91       unsigned Mask;
92
93       // Number of pre-assigned live registers in FixStack. This is 0 when the
94       // stack order has not yet been fixed.
95       unsigned FixCount;
96
97       // Assigned stack order for live-in registers.
98       // FixStack[i] == getStackEntry(i) for all i < FixCount.
99       unsigned char FixStack[8];
100
101       LiveBundle() : Mask(0), FixCount(0) {}
102
103       // Have the live registers been assigned a stack order yet?
104       bool isFixed() const { return !Mask || FixCount; }
105     };
106
107     // Numbered LiveBundle structs. LiveBundles[0] is used for all CFG edges
108     // with no live FP registers.
109     SmallVector<LiveBundle, 8> LiveBundles;
110
111     // The edge bundle analysis provides indices into the LiveBundles vector.
112     EdgeBundles *Bundles;
113
114     // Return a bitmask of FP registers in block's live-in list.
115     unsigned calcLiveInMask(MachineBasicBlock *MBB) {
116       unsigned Mask = 0;
117       for (MachineBasicBlock::livein_iterator I = MBB->livein_begin(),
118            E = MBB->livein_end(); I != E; ++I) {
119         unsigned Reg = *I - X86::FP0;
120         if (Reg < 8)
121           Mask |= 1 << Reg;
122       }
123       return Mask;
124     }
125
126     // Partition all the CFG edges into LiveBundles.
127     void bundleCFG(MachineFunction &MF);
128
129     MachineBasicBlock *MBB;     // Current basic block
130
131     // The hardware keeps track of how many FP registers are live, so we have
132     // to model that exactly. Usually, each live register corresponds to an
133     // FP<n> register, but when dealing with calls, returns, and inline
134     // assembly, it is sometimes neccesary to have live scratch registers.
135     unsigned Stack[8];          // FP<n> Registers in each stack slot...
136     unsigned StackTop;          // The current top of the FP stack.
137
138     enum {
139       NumFPRegs = 16            // Including scratch pseudo-registers.
140     };
141
142     // For each live FP<n> register, point to its Stack[] entry.
143     // The first entries correspond to FP0-FP6, the rest are scratch registers
144     // used when we need slightly different live registers than what the
145     // register allocator thinks.
146     unsigned RegMap[NumFPRegs];
147
148     // Pending fixed registers - Inline assembly needs FP registers to appear
149     // in fixed stack slot positions. This is handled by copying FP registers
150     // to ST registers before the instruction, and copying back after the
151     // instruction.
152     //
153     // This is modeled with pending ST registers. NumPendingSTs is the number
154     // of ST registers (ST0-STn) we are tracking. PendingST[n] points to an FP
155     // register that holds the ST value. The ST registers are not moved into
156     // place until immediately before the instruction that needs them.
157     //
158     // It can happen that we need an ST register to be live when no FP register
159     // holds the value:
160     //
161     //   %ST0 = COPY %FP4<kill>
162     //
163     // When that happens, we allocate a scratch FP register to hold the ST
164     // value. That means every register in PendingST must be live.
165
166     unsigned NumPendingSTs;
167     unsigned char PendingST[8];
168
169     // Set up our stack model to match the incoming registers to MBB.
170     void setupBlockStack();
171
172     // Shuffle live registers to match the expectations of successor blocks.
173     void finishBlockStack();
174
175     void dumpStack() const {
176       dbgs() << "Stack contents:";
177       for (unsigned i = 0; i != StackTop; ++i) {
178         dbgs() << " FP" << Stack[i];
179         assert(RegMap[Stack[i]] == i && "Stack[] doesn't match RegMap[]!");
180       }
181       for (unsigned i = 0; i != NumPendingSTs; ++i)
182         dbgs() << ", ST" << i << " in FP" << unsigned(PendingST[i]);
183       dbgs() << "\n";
184     }
185
186     /// getSlot - Return the stack slot number a particular register number is
187     /// in.
188     unsigned getSlot(unsigned RegNo) const {
189       assert(RegNo < NumFPRegs && "Regno out of range!");
190       return RegMap[RegNo];
191     }
192
193     /// isLive - Is RegNo currently live in the stack?
194     bool isLive(unsigned RegNo) const {
195       unsigned Slot = getSlot(RegNo);
196       return Slot < StackTop && Stack[Slot] == RegNo;
197     }
198
199     /// getScratchReg - Return an FP register that is not currently in use.
200     unsigned getScratchReg() {
201       for (int i = NumFPRegs - 1; i >= 8; --i)
202         if (!isLive(i))
203           return i;
204       llvm_unreachable("Ran out of scratch FP registers");
205     }
206
207     /// isScratchReg - Returns trus if RegNo is a scratch FP register.
208     bool isScratchReg(unsigned RegNo) {
209       return RegNo > 8 && RegNo < NumFPRegs;
210     }
211
212     /// getStackEntry - Return the X86::FP<n> register in register ST(i).
213     unsigned getStackEntry(unsigned STi) const {
214       if (STi >= StackTop)
215         report_fatal_error("Access past stack top!");
216       return Stack[StackTop-1-STi];
217     }
218
219     /// getSTReg - Return the X86::ST(i) register which contains the specified
220     /// FP<RegNo> register.
221     unsigned getSTReg(unsigned RegNo) const {
222       return StackTop - 1 - getSlot(RegNo) + llvm::X86::ST0;
223     }
224
225     // pushReg - Push the specified FP<n> register onto the stack.
226     void pushReg(unsigned Reg) {
227       assert(Reg < NumFPRegs && "Register number out of range!");
228       if (StackTop >= 8)
229         report_fatal_error("Stack overflow!");
230       Stack[StackTop] = Reg;
231       RegMap[Reg] = StackTop++;
232     }
233
234     bool isAtTop(unsigned RegNo) const { return getSlot(RegNo) == StackTop-1; }
235     void moveToTop(unsigned RegNo, MachineBasicBlock::iterator I) {
236       DebugLoc dl = I == MBB->end() ? DebugLoc() : I->getDebugLoc();
237       if (isAtTop(RegNo)) return;
238
239       unsigned STReg = getSTReg(RegNo);
240       unsigned RegOnTop = getStackEntry(0);
241
242       // Swap the slots the regs are in.
243       std::swap(RegMap[RegNo], RegMap[RegOnTop]);
244
245       // Swap stack slot contents.
246       if (RegMap[RegOnTop] >= StackTop)
247         report_fatal_error("Access past stack top!");
248       std::swap(Stack[RegMap[RegOnTop]], Stack[StackTop-1]);
249
250       // Emit an fxch to update the runtime processors version of the state.
251       BuildMI(*MBB, I, dl, TII->get(X86::XCH_F)).addReg(STReg);
252       ++NumFXCH;
253     }
254
255     void duplicateToTop(unsigned RegNo, unsigned AsReg, MachineInstr *I) {
256       DebugLoc dl = I == MBB->end() ? DebugLoc() : I->getDebugLoc();
257       unsigned STReg = getSTReg(RegNo);
258       pushReg(AsReg);   // New register on top of stack
259
260       BuildMI(*MBB, I, dl, TII->get(X86::LD_Frr)).addReg(STReg);
261     }
262
263     /// popStackAfter - Pop the current value off of the top of the FP stack
264     /// after the specified instruction.
265     void popStackAfter(MachineBasicBlock::iterator &I);
266
267     /// freeStackSlotAfter - Free the specified register from the register
268     /// stack, so that it is no longer in a register.  If the register is
269     /// currently at the top of the stack, we just pop the current instruction,
270     /// otherwise we store the current top-of-stack into the specified slot,
271     /// then pop the top of stack.
272     void freeStackSlotAfter(MachineBasicBlock::iterator &I, unsigned Reg);
273
274     /// freeStackSlotBefore - Just the pop, no folding. Return the inserted
275     /// instruction.
276     MachineBasicBlock::iterator
277     freeStackSlotBefore(MachineBasicBlock::iterator I, unsigned FPRegNo);
278
279     /// Adjust the live registers to be the set in Mask.
280     void adjustLiveRegs(unsigned Mask, MachineBasicBlock::iterator I);
281
282     /// Shuffle the top FixCount stack entries such that FP reg FixStack[0] is
283     /// st(0), FP reg FixStack[1] is st(1) etc.
284     void shuffleStackTop(const unsigned char *FixStack, unsigned FixCount,
285                          MachineBasicBlock::iterator I);
286
287     bool processBasicBlock(MachineFunction &MF, MachineBasicBlock &MBB);
288
289     void handleZeroArgFP(MachineBasicBlock::iterator &I);
290     void handleOneArgFP(MachineBasicBlock::iterator &I);
291     void handleOneArgFPRW(MachineBasicBlock::iterator &I);
292     void handleTwoArgFP(MachineBasicBlock::iterator &I);
293     void handleCompareFP(MachineBasicBlock::iterator &I);
294     void handleCondMovFP(MachineBasicBlock::iterator &I);
295     void handleSpecialFP(MachineBasicBlock::iterator &I);
296
297     // Check if a COPY instruction is using FP registers.
298     bool isFPCopy(MachineInstr *MI) {
299       unsigned DstReg = MI->getOperand(0).getReg();
300       unsigned SrcReg = MI->getOperand(1).getReg();
301
302       return X86::RFP80RegClass.contains(DstReg) ||
303         X86::RFP80RegClass.contains(SrcReg);
304     }
305   };
306   char FPS::ID = 0;
307 }
308
309 FunctionPass *llvm::createX86FloatingPointStackifierPass() { return new FPS(); }
310
311 /// getFPReg - Return the X86::FPx register number for the specified operand.
312 /// For example, this returns 3 for X86::FP3.
313 static unsigned getFPReg(const MachineOperand &MO) {
314   assert(MO.isReg() && "Expected an FP register!");
315   unsigned Reg = MO.getReg();
316   assert(Reg >= X86::FP0 && Reg <= X86::FP6 && "Expected FP register!");
317   return Reg - X86::FP0;
318 }
319
320 /// runOnMachineFunction - Loop over all of the basic blocks, transforming FP
321 /// register references into FP stack references.
322 ///
323 bool FPS::runOnMachineFunction(MachineFunction &MF) {
324   // We only need to run this pass if there are any FP registers used in this
325   // function.  If it is all integer, there is nothing for us to do!
326   bool FPIsUsed = false;
327
328   assert(X86::FP6 == X86::FP0+6 && "Register enums aren't sorted right!");
329   for (unsigned i = 0; i <= 6; ++i)
330     if (MF.getRegInfo().isPhysRegUsed(X86::FP0+i)) {
331       FPIsUsed = true;
332       break;
333     }
334
335   // Early exit.
336   if (!FPIsUsed) return false;
337
338   Bundles = &getAnalysis<EdgeBundles>();
339   TII = MF.getTarget().getInstrInfo();
340
341   // Prepare cross-MBB liveness.
342   bundleCFG(MF);
343
344   StackTop = 0;
345
346   // Process the function in depth first order so that we process at least one
347   // of the predecessors for every reachable block in the function.
348   SmallPtrSet<MachineBasicBlock*, 8> Processed;
349   MachineBasicBlock *Entry = MF.begin();
350
351   bool Changed = false;
352   for (df_ext_iterator<MachineBasicBlock*, SmallPtrSet<MachineBasicBlock*, 8> >
353          I = df_ext_begin(Entry, Processed), E = df_ext_end(Entry, Processed);
354        I != E; ++I)
355     Changed |= processBasicBlock(MF, **I);
356
357   // Process any unreachable blocks in arbitrary order now.
358   if (MF.size() != Processed.size())
359     for (MachineFunction::iterator BB = MF.begin(), E = MF.end(); BB != E; ++BB)
360       if (Processed.insert(BB))
361         Changed |= processBasicBlock(MF, *BB);
362
363   LiveBundles.clear();
364
365   return Changed;
366 }
367
368 /// bundleCFG - Scan all the basic blocks to determine consistent live-in and
369 /// live-out sets for the FP registers. Consistent means that the set of
370 /// registers live-out from a block is identical to the live-in set of all
371 /// successors. This is not enforced by the normal live-in lists since
372 /// registers may be implicitly defined, or not used by all successors.
373 void FPS::bundleCFG(MachineFunction &MF) {
374   assert(LiveBundles.empty() && "Stale data in LiveBundles");
375   LiveBundles.resize(Bundles->getNumBundles());
376
377   // Gather the actual live-in masks for all MBBs.
378   for (MachineFunction::iterator I = MF.begin(), E = MF.end(); I != E; ++I) {
379     MachineBasicBlock *MBB = I;
380     const unsigned Mask = calcLiveInMask(MBB);
381     if (!Mask)
382       continue;
383     // Update MBB ingoing bundle mask.
384     LiveBundles[Bundles->getBundle(MBB->getNumber(), false)].Mask |= Mask;
385   }
386 }
387
388 /// processBasicBlock - Loop over all of the instructions in the basic block,
389 /// transforming FP instructions into their stack form.
390 ///
391 bool FPS::processBasicBlock(MachineFunction &MF, MachineBasicBlock &BB) {
392   bool Changed = false;
393   MBB = &BB;
394   NumPendingSTs = 0;
395
396   setupBlockStack();
397
398   for (MachineBasicBlock::iterator I = BB.begin(); I != BB.end(); ++I) {
399     MachineInstr *MI = I;
400     uint64_t Flags = MI->getDesc().TSFlags;
401
402     unsigned FPInstClass = Flags & X86II::FPTypeMask;
403     if (MI->isInlineAsm())
404       FPInstClass = X86II::SpecialFP;
405
406     if (MI->isCopy() && isFPCopy(MI))
407       FPInstClass = X86II::SpecialFP;
408
409     if (MI->isImplicitDef() &&
410         X86::RFP80RegClass.contains(MI->getOperand(0).getReg()))
411       FPInstClass = X86II::SpecialFP;
412
413     if (FPInstClass == X86II::NotFP)
414       continue;  // Efficiently ignore non-fp insts!
415
416     MachineInstr *PrevMI = 0;
417     if (I != BB.begin())
418       PrevMI = prior(I);
419
420     ++NumFP;  // Keep track of # of pseudo instrs
421     DEBUG(dbgs() << "\nFPInst:\t" << *MI);
422
423     // Get dead variables list now because the MI pointer may be deleted as part
424     // of processing!
425     SmallVector<unsigned, 8> DeadRegs;
426     for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
427       const MachineOperand &MO = MI->getOperand(i);
428       if (MO.isReg() && MO.isDead())
429         DeadRegs.push_back(MO.getReg());
430     }
431
432     switch (FPInstClass) {
433     case X86II::ZeroArgFP:  handleZeroArgFP(I); break;
434     case X86II::OneArgFP:   handleOneArgFP(I);  break;  // fstp ST(0)
435     case X86II::OneArgFPRW: handleOneArgFPRW(I); break; // ST(0) = fsqrt(ST(0))
436     case X86II::TwoArgFP:   handleTwoArgFP(I);  break;
437     case X86II::CompareFP:  handleCompareFP(I); break;
438     case X86II::CondMovFP:  handleCondMovFP(I); break;
439     case X86II::SpecialFP:  handleSpecialFP(I); break;
440     default: llvm_unreachable("Unknown FP Type!");
441     }
442
443     // Check to see if any of the values defined by this instruction are dead
444     // after definition.  If so, pop them.
445     for (unsigned i = 0, e = DeadRegs.size(); i != e; ++i) {
446       unsigned Reg = DeadRegs[i];
447       if (Reg >= X86::FP0 && Reg <= X86::FP6) {
448         DEBUG(dbgs() << "Register FP#" << Reg-X86::FP0 << " is dead!\n");
449         freeStackSlotAfter(I, Reg-X86::FP0);
450       }
451     }
452
453     // Print out all of the instructions expanded to if -debug
454     DEBUG(
455       MachineBasicBlock::iterator PrevI(PrevMI);
456       if (I == PrevI) {
457         dbgs() << "Just deleted pseudo instruction\n";
458       } else {
459         MachineBasicBlock::iterator Start = I;
460         // Rewind to first instruction newly inserted.
461         while (Start != BB.begin() && prior(Start) != PrevI) --Start;
462         dbgs() << "Inserted instructions:\n\t";
463         Start->print(dbgs(), &MF.getTarget());
464         while (++Start != llvm::next(I)) {}
465       }
466       dumpStack();
467     );
468
469     Changed = true;
470   }
471
472   finishBlockStack();
473
474   return Changed;
475 }
476
477 /// setupBlockStack - Use the live bundles to set up our model of the stack
478 /// to match predecessors' live out stack.
479 void FPS::setupBlockStack() {
480   DEBUG(dbgs() << "\nSetting up live-ins for BB#" << MBB->getNumber()
481                << " derived from " << MBB->getName() << ".\n");
482   StackTop = 0;
483   // Get the live-in bundle for MBB.
484   const LiveBundle &Bundle =
485     LiveBundles[Bundles->getBundle(MBB->getNumber(), false)];
486
487   if (!Bundle.Mask) {
488     DEBUG(dbgs() << "Block has no FP live-ins.\n");
489     return;
490   }
491
492   // Depth-first iteration should ensure that we always have an assigned stack.
493   assert(Bundle.isFixed() && "Reached block before any predecessors");
494
495   // Push the fixed live-in registers.
496   for (unsigned i = Bundle.FixCount; i > 0; --i) {
497     MBB->addLiveIn(X86::ST0+i-1);
498     DEBUG(dbgs() << "Live-in st(" << (i-1) << "): %FP"
499                  << unsigned(Bundle.FixStack[i-1]) << '\n');
500     pushReg(Bundle.FixStack[i-1]);
501   }
502
503   // Kill off unwanted live-ins. This can happen with a critical edge.
504   // FIXME: We could keep these live registers around as zombies. They may need
505   // to be revived at the end of a short block. It might save a few instrs.
506   adjustLiveRegs(calcLiveInMask(MBB), MBB->begin());
507   DEBUG(MBB->dump());
508 }
509
510 /// finishBlockStack - Revive live-outs that are implicitly defined out of
511 /// MBB. Shuffle live registers to match the expected fixed stack of any
512 /// predecessors, and ensure that all predecessors are expecting the same
513 /// stack.
514 void FPS::finishBlockStack() {
515   // The RET handling below takes care of return blocks for us.
516   if (MBB->succ_empty())
517     return;
518
519   DEBUG(dbgs() << "Setting up live-outs for BB#" << MBB->getNumber()
520                << " derived from " << MBB->getName() << ".\n");
521
522   // Get MBB's live-out bundle.
523   unsigned BundleIdx = Bundles->getBundle(MBB->getNumber(), true);
524   LiveBundle &Bundle = LiveBundles[BundleIdx];
525
526   // We may need to kill and define some registers to match successors.
527   // FIXME: This can probably be combined with the shuffle below.
528   MachineBasicBlock::iterator Term = MBB->getFirstTerminator();
529   adjustLiveRegs(Bundle.Mask, Term);
530
531   if (!Bundle.Mask) {
532     DEBUG(dbgs() << "No live-outs.\n");
533     return;
534   }
535
536   // Has the stack order been fixed yet?
537   DEBUG(dbgs() << "LB#" << BundleIdx << ": ");
538   if (Bundle.isFixed()) {
539     DEBUG(dbgs() << "Shuffling stack to match.\n");
540     shuffleStackTop(Bundle.FixStack, Bundle.FixCount, Term);
541   } else {
542     // Not fixed yet, we get to choose.
543     DEBUG(dbgs() << "Fixing stack order now.\n");
544     Bundle.FixCount = StackTop;
545     for (unsigned i = 0; i < StackTop; ++i)
546       Bundle.FixStack[i] = getStackEntry(i);
547   }
548 }
549
550
551 //===----------------------------------------------------------------------===//
552 // Efficient Lookup Table Support
553 //===----------------------------------------------------------------------===//
554
555 namespace {
556   struct TableEntry {
557     unsigned from;
558     unsigned to;
559     bool operator<(const TableEntry &TE) const { return from < TE.from; }
560     friend bool operator<(const TableEntry &TE, unsigned V) {
561       return TE.from < V;
562     }
563     friend bool LLVM_ATTRIBUTE_USED operator<(unsigned V,
564                                               const TableEntry &TE) {
565       return V < TE.from;
566     }
567   };
568 }
569
570 #ifndef NDEBUG
571 static bool TableIsSorted(const TableEntry *Table, unsigned NumEntries) {
572   for (unsigned i = 0; i != NumEntries-1; ++i)
573     if (!(Table[i] < Table[i+1])) return false;
574   return true;
575 }
576 #endif
577
578 static int Lookup(const TableEntry *Table, unsigned N, unsigned Opcode) {
579   const TableEntry *I = std::lower_bound(Table, Table+N, Opcode);
580   if (I != Table+N && I->from == Opcode)
581     return I->to;
582   return -1;
583 }
584
585 #ifdef NDEBUG
586 #define ASSERT_SORTED(TABLE)
587 #else
588 #define ASSERT_SORTED(TABLE)                                              \
589   { static bool TABLE##Checked = false;                                   \
590     if (!TABLE##Checked) {                                                \
591        assert(TableIsSorted(TABLE, array_lengthof(TABLE)) &&              \
592               "All lookup tables must be sorted for efficient access!");  \
593        TABLE##Checked = true;                                             \
594     }                                                                     \
595   }
596 #endif
597
598 //===----------------------------------------------------------------------===//
599 // Register File -> Register Stack Mapping Methods
600 //===----------------------------------------------------------------------===//
601
602 // OpcodeTable - Sorted map of register instructions to their stack version.
603 // The first element is an register file pseudo instruction, the second is the
604 // concrete X86 instruction which uses the register stack.
605 //
606 static const TableEntry OpcodeTable[] = {
607   { X86::ABS_Fp32     , X86::ABS_F     },
608   { X86::ABS_Fp64     , X86::ABS_F     },
609   { X86::ABS_Fp80     , X86::ABS_F     },
610   { X86::ADD_Fp32m    , X86::ADD_F32m  },
611   { X86::ADD_Fp64m    , X86::ADD_F64m  },
612   { X86::ADD_Fp64m32  , X86::ADD_F32m  },
613   { X86::ADD_Fp80m32  , X86::ADD_F32m  },
614   { X86::ADD_Fp80m64  , X86::ADD_F64m  },
615   { X86::ADD_FpI16m32 , X86::ADD_FI16m },
616   { X86::ADD_FpI16m64 , X86::ADD_FI16m },
617   { X86::ADD_FpI16m80 , X86::ADD_FI16m },
618   { X86::ADD_FpI32m32 , X86::ADD_FI32m },
619   { X86::ADD_FpI32m64 , X86::ADD_FI32m },
620   { X86::ADD_FpI32m80 , X86::ADD_FI32m },
621   { X86::CHS_Fp32     , X86::CHS_F     },
622   { X86::CHS_Fp64     , X86::CHS_F     },
623   { X86::CHS_Fp80     , X86::CHS_F     },
624   { X86::CMOVBE_Fp32  , X86::CMOVBE_F  },
625   { X86::CMOVBE_Fp64  , X86::CMOVBE_F  },
626   { X86::CMOVBE_Fp80  , X86::CMOVBE_F  },
627   { X86::CMOVB_Fp32   , X86::CMOVB_F   },
628   { X86::CMOVB_Fp64   , X86::CMOVB_F  },
629   { X86::CMOVB_Fp80   , X86::CMOVB_F  },
630   { X86::CMOVE_Fp32   , X86::CMOVE_F  },
631   { X86::CMOVE_Fp64   , X86::CMOVE_F   },
632   { X86::CMOVE_Fp80   , X86::CMOVE_F   },
633   { X86::CMOVNBE_Fp32 , X86::CMOVNBE_F },
634   { X86::CMOVNBE_Fp64 , X86::CMOVNBE_F },
635   { X86::CMOVNBE_Fp80 , X86::CMOVNBE_F },
636   { X86::CMOVNB_Fp32  , X86::CMOVNB_F  },
637   { X86::CMOVNB_Fp64  , X86::CMOVNB_F  },
638   { X86::CMOVNB_Fp80  , X86::CMOVNB_F  },
639   { X86::CMOVNE_Fp32  , X86::CMOVNE_F  },
640   { X86::CMOVNE_Fp64  , X86::CMOVNE_F  },
641   { X86::CMOVNE_Fp80  , X86::CMOVNE_F  },
642   { X86::CMOVNP_Fp32  , X86::CMOVNP_F  },
643   { X86::CMOVNP_Fp64  , X86::CMOVNP_F  },
644   { X86::CMOVNP_Fp80  , X86::CMOVNP_F  },
645   { X86::CMOVP_Fp32   , X86::CMOVP_F   },
646   { X86::CMOVP_Fp64   , X86::CMOVP_F   },
647   { X86::CMOVP_Fp80   , X86::CMOVP_F   },
648   { X86::COS_Fp32     , X86::COS_F     },
649   { X86::COS_Fp64     , X86::COS_F     },
650   { X86::COS_Fp80     , X86::COS_F     },
651   { X86::DIVR_Fp32m   , X86::DIVR_F32m },
652   { X86::DIVR_Fp64m   , X86::DIVR_F64m },
653   { X86::DIVR_Fp64m32 , X86::DIVR_F32m },
654   { X86::DIVR_Fp80m32 , X86::DIVR_F32m },
655   { X86::DIVR_Fp80m64 , X86::DIVR_F64m },
656   { X86::DIVR_FpI16m32, X86::DIVR_FI16m},
657   { X86::DIVR_FpI16m64, X86::DIVR_FI16m},
658   { X86::DIVR_FpI16m80, X86::DIVR_FI16m},
659   { X86::DIVR_FpI32m32, X86::DIVR_FI32m},
660   { X86::DIVR_FpI32m64, X86::DIVR_FI32m},
661   { X86::DIVR_FpI32m80, X86::DIVR_FI32m},
662   { X86::DIV_Fp32m    , X86::DIV_F32m  },
663   { X86::DIV_Fp64m    , X86::DIV_F64m  },
664   { X86::DIV_Fp64m32  , X86::DIV_F32m  },
665   { X86::DIV_Fp80m32  , X86::DIV_F32m  },
666   { X86::DIV_Fp80m64  , X86::DIV_F64m  },
667   { X86::DIV_FpI16m32 , X86::DIV_FI16m },
668   { X86::DIV_FpI16m64 , X86::DIV_FI16m },
669   { X86::DIV_FpI16m80 , X86::DIV_FI16m },
670   { X86::DIV_FpI32m32 , X86::DIV_FI32m },
671   { X86::DIV_FpI32m64 , X86::DIV_FI32m },
672   { X86::DIV_FpI32m80 , X86::DIV_FI32m },
673   { X86::ILD_Fp16m32  , X86::ILD_F16m  },
674   { X86::ILD_Fp16m64  , X86::ILD_F16m  },
675   { X86::ILD_Fp16m80  , X86::ILD_F16m  },
676   { X86::ILD_Fp32m32  , X86::ILD_F32m  },
677   { X86::ILD_Fp32m64  , X86::ILD_F32m  },
678   { X86::ILD_Fp32m80  , X86::ILD_F32m  },
679   { X86::ILD_Fp64m32  , X86::ILD_F64m  },
680   { X86::ILD_Fp64m64  , X86::ILD_F64m  },
681   { X86::ILD_Fp64m80  , X86::ILD_F64m  },
682   { X86::ISTT_Fp16m32 , X86::ISTT_FP16m},
683   { X86::ISTT_Fp16m64 , X86::ISTT_FP16m},
684   { X86::ISTT_Fp16m80 , X86::ISTT_FP16m},
685   { X86::ISTT_Fp32m32 , X86::ISTT_FP32m},
686   { X86::ISTT_Fp32m64 , X86::ISTT_FP32m},
687   { X86::ISTT_Fp32m80 , X86::ISTT_FP32m},
688   { X86::ISTT_Fp64m32 , X86::ISTT_FP64m},
689   { X86::ISTT_Fp64m64 , X86::ISTT_FP64m},
690   { X86::ISTT_Fp64m80 , X86::ISTT_FP64m},
691   { X86::IST_Fp16m32  , X86::IST_F16m  },
692   { X86::IST_Fp16m64  , X86::IST_F16m  },
693   { X86::IST_Fp16m80  , X86::IST_F16m  },
694   { X86::IST_Fp32m32  , X86::IST_F32m  },
695   { X86::IST_Fp32m64  , X86::IST_F32m  },
696   { X86::IST_Fp32m80  , X86::IST_F32m  },
697   { X86::IST_Fp64m32  , X86::IST_FP64m },
698   { X86::IST_Fp64m64  , X86::IST_FP64m },
699   { X86::IST_Fp64m80  , X86::IST_FP64m },
700   { X86::LD_Fp032     , X86::LD_F0     },
701   { X86::LD_Fp064     , X86::LD_F0     },
702   { X86::LD_Fp080     , X86::LD_F0     },
703   { X86::LD_Fp132     , X86::LD_F1     },
704   { X86::LD_Fp164     , X86::LD_F1     },
705   { X86::LD_Fp180     , X86::LD_F1     },
706   { X86::LD_Fp32m     , X86::LD_F32m   },
707   { X86::LD_Fp32m64   , X86::LD_F32m   },
708   { X86::LD_Fp32m80   , X86::LD_F32m   },
709   { X86::LD_Fp64m     , X86::LD_F64m   },
710   { X86::LD_Fp64m80   , X86::LD_F64m   },
711   { X86::LD_Fp80m     , X86::LD_F80m   },
712   { X86::MUL_Fp32m    , X86::MUL_F32m  },
713   { X86::MUL_Fp64m    , X86::MUL_F64m  },
714   { X86::MUL_Fp64m32  , X86::MUL_F32m  },
715   { X86::MUL_Fp80m32  , X86::MUL_F32m  },
716   { X86::MUL_Fp80m64  , X86::MUL_F64m  },
717   { X86::MUL_FpI16m32 , X86::MUL_FI16m },
718   { X86::MUL_FpI16m64 , X86::MUL_FI16m },
719   { X86::MUL_FpI16m80 , X86::MUL_FI16m },
720   { X86::MUL_FpI32m32 , X86::MUL_FI32m },
721   { X86::MUL_FpI32m64 , X86::MUL_FI32m },
722   { X86::MUL_FpI32m80 , X86::MUL_FI32m },
723   { X86::SIN_Fp32     , X86::SIN_F     },
724   { X86::SIN_Fp64     , X86::SIN_F     },
725   { X86::SIN_Fp80     , X86::SIN_F     },
726   { X86::SQRT_Fp32    , X86::SQRT_F    },
727   { X86::SQRT_Fp64    , X86::SQRT_F    },
728   { X86::SQRT_Fp80    , X86::SQRT_F    },
729   { X86::ST_Fp32m     , X86::ST_F32m   },
730   { X86::ST_Fp64m     , X86::ST_F64m   },
731   { X86::ST_Fp64m32   , X86::ST_F32m   },
732   { X86::ST_Fp80m32   , X86::ST_F32m   },
733   { X86::ST_Fp80m64   , X86::ST_F64m   },
734   { X86::ST_FpP80m    , X86::ST_FP80m  },
735   { X86::SUBR_Fp32m   , X86::SUBR_F32m },
736   { X86::SUBR_Fp64m   , X86::SUBR_F64m },
737   { X86::SUBR_Fp64m32 , X86::SUBR_F32m },
738   { X86::SUBR_Fp80m32 , X86::SUBR_F32m },
739   { X86::SUBR_Fp80m64 , X86::SUBR_F64m },
740   { X86::SUBR_FpI16m32, X86::SUBR_FI16m},
741   { X86::SUBR_FpI16m64, X86::SUBR_FI16m},
742   { X86::SUBR_FpI16m80, X86::SUBR_FI16m},
743   { X86::SUBR_FpI32m32, X86::SUBR_FI32m},
744   { X86::SUBR_FpI32m64, X86::SUBR_FI32m},
745   { X86::SUBR_FpI32m80, X86::SUBR_FI32m},
746   { X86::SUB_Fp32m    , X86::SUB_F32m  },
747   { X86::SUB_Fp64m    , X86::SUB_F64m  },
748   { X86::SUB_Fp64m32  , X86::SUB_F32m  },
749   { X86::SUB_Fp80m32  , X86::SUB_F32m  },
750   { X86::SUB_Fp80m64  , X86::SUB_F64m  },
751   { X86::SUB_FpI16m32 , X86::SUB_FI16m },
752   { X86::SUB_FpI16m64 , X86::SUB_FI16m },
753   { X86::SUB_FpI16m80 , X86::SUB_FI16m },
754   { X86::SUB_FpI32m32 , X86::SUB_FI32m },
755   { X86::SUB_FpI32m64 , X86::SUB_FI32m },
756   { X86::SUB_FpI32m80 , X86::SUB_FI32m },
757   { X86::TST_Fp32     , X86::TST_F     },
758   { X86::TST_Fp64     , X86::TST_F     },
759   { X86::TST_Fp80     , X86::TST_F     },
760   { X86::UCOM_FpIr32  , X86::UCOM_FIr  },
761   { X86::UCOM_FpIr64  , X86::UCOM_FIr  },
762   { X86::UCOM_FpIr80  , X86::UCOM_FIr  },
763   { X86::UCOM_Fpr32   , X86::UCOM_Fr   },
764   { X86::UCOM_Fpr64   , X86::UCOM_Fr   },
765   { X86::UCOM_Fpr80   , X86::UCOM_Fr   },
766 };
767
768 static unsigned getConcreteOpcode(unsigned Opcode) {
769   ASSERT_SORTED(OpcodeTable);
770   int Opc = Lookup(OpcodeTable, array_lengthof(OpcodeTable), Opcode);
771   assert(Opc != -1 && "FP Stack instruction not in OpcodeTable!");
772   return Opc;
773 }
774
775 //===----------------------------------------------------------------------===//
776 // Helper Methods
777 //===----------------------------------------------------------------------===//
778
779 // PopTable - Sorted map of instructions to their popping version.  The first
780 // element is an instruction, the second is the version which pops.
781 //
782 static const TableEntry PopTable[] = {
783   { X86::ADD_FrST0 , X86::ADD_FPrST0  },
784
785   { X86::DIVR_FrST0, X86::DIVR_FPrST0 },
786   { X86::DIV_FrST0 , X86::DIV_FPrST0  },
787
788   { X86::IST_F16m  , X86::IST_FP16m   },
789   { X86::IST_F32m  , X86::IST_FP32m   },
790
791   { X86::MUL_FrST0 , X86::MUL_FPrST0  },
792
793   { X86::ST_F32m   , X86::ST_FP32m    },
794   { X86::ST_F64m   , X86::ST_FP64m    },
795   { X86::ST_Frr    , X86::ST_FPrr     },
796
797   { X86::SUBR_FrST0, X86::SUBR_FPrST0 },
798   { X86::SUB_FrST0 , X86::SUB_FPrST0  },
799
800   { X86::UCOM_FIr  , X86::UCOM_FIPr   },
801
802   { X86::UCOM_FPr  , X86::UCOM_FPPr   },
803   { X86::UCOM_Fr   , X86::UCOM_FPr    },
804 };
805
806 /// popStackAfter - Pop the current value off of the top of the FP stack after
807 /// the specified instruction.  This attempts to be sneaky and combine the pop
808 /// into the instruction itself if possible.  The iterator is left pointing to
809 /// the last instruction, be it a new pop instruction inserted, or the old
810 /// instruction if it was modified in place.
811 ///
812 void FPS::popStackAfter(MachineBasicBlock::iterator &I) {
813   MachineInstr* MI = I;
814   DebugLoc dl = MI->getDebugLoc();
815   ASSERT_SORTED(PopTable);
816   if (StackTop == 0)
817     report_fatal_error("Cannot pop empty stack!");
818   RegMap[Stack[--StackTop]] = ~0;     // Update state
819
820   // Check to see if there is a popping version of this instruction...
821   int Opcode = Lookup(PopTable, array_lengthof(PopTable), I->getOpcode());
822   if (Opcode != -1) {
823     I->setDesc(TII->get(Opcode));
824     if (Opcode == X86::UCOM_FPPr)
825       I->RemoveOperand(0);
826   } else {    // Insert an explicit pop
827     I = BuildMI(*MBB, ++I, dl, TII->get(X86::ST_FPrr)).addReg(X86::ST0);
828   }
829 }
830
831 /// freeStackSlotAfter - Free the specified register from the register stack, so
832 /// that it is no longer in a register.  If the register is currently at the top
833 /// of the stack, we just pop the current instruction, otherwise we store the
834 /// current top-of-stack into the specified slot, then pop the top of stack.
835 void FPS::freeStackSlotAfter(MachineBasicBlock::iterator &I, unsigned FPRegNo) {
836   if (getStackEntry(0) == FPRegNo) {  // already at the top of stack? easy.
837     popStackAfter(I);
838     return;
839   }
840
841   // Otherwise, store the top of stack into the dead slot, killing the operand
842   // without having to add in an explicit xchg then pop.
843   //
844   I = freeStackSlotBefore(++I, FPRegNo);
845 }
846
847 /// freeStackSlotBefore - Free the specified register without trying any
848 /// folding.
849 MachineBasicBlock::iterator
850 FPS::freeStackSlotBefore(MachineBasicBlock::iterator I, unsigned FPRegNo) {
851   unsigned STReg    = getSTReg(FPRegNo);
852   unsigned OldSlot  = getSlot(FPRegNo);
853   unsigned TopReg   = Stack[StackTop-1];
854   Stack[OldSlot]    = TopReg;
855   RegMap[TopReg]    = OldSlot;
856   RegMap[FPRegNo]   = ~0;
857   Stack[--StackTop] = ~0;
858   return BuildMI(*MBB, I, DebugLoc(), TII->get(X86::ST_FPrr)).addReg(STReg);
859 }
860
861 /// adjustLiveRegs - Kill and revive registers such that exactly the FP
862 /// registers with a bit in Mask are live.
863 void FPS::adjustLiveRegs(unsigned Mask, MachineBasicBlock::iterator I) {
864   unsigned Defs = Mask;
865   unsigned Kills = 0;
866   for (unsigned i = 0; i < StackTop; ++i) {
867     unsigned RegNo = Stack[i];
868     if (!(Defs & (1 << RegNo)))
869       // This register is live, but we don't want it.
870       Kills |= (1 << RegNo);
871     else
872       // We don't need to imp-def this live register.
873       Defs &= ~(1 << RegNo);
874   }
875   assert((Kills & Defs) == 0 && "Register needs killing and def'ing?");
876
877   // Produce implicit-defs for free by using killed registers.
878   while (Kills && Defs) {
879     unsigned KReg = CountTrailingZeros_32(Kills);
880     unsigned DReg = CountTrailingZeros_32(Defs);
881     DEBUG(dbgs() << "Renaming %FP" << KReg << " as imp %FP" << DReg << "\n");
882     std::swap(Stack[getSlot(KReg)], Stack[getSlot(DReg)]);
883     std::swap(RegMap[KReg], RegMap[DReg]);
884     Kills &= ~(1 << KReg);
885     Defs &= ~(1 << DReg);
886   }
887
888   // Kill registers by popping.
889   if (Kills && I != MBB->begin()) {
890     MachineBasicBlock::iterator I2 = llvm::prior(I);
891     while (StackTop) {
892       unsigned KReg = getStackEntry(0);
893       if (!(Kills & (1 << KReg)))
894         break;
895       DEBUG(dbgs() << "Popping %FP" << KReg << "\n");
896       popStackAfter(I2);
897       Kills &= ~(1 << KReg);
898     }
899   }
900
901   // Manually kill the rest.
902   while (Kills) {
903     unsigned KReg = CountTrailingZeros_32(Kills);
904     DEBUG(dbgs() << "Killing %FP" << KReg << "\n");
905     freeStackSlotBefore(I, KReg);
906     Kills &= ~(1 << KReg);
907   }
908
909   // Load zeros for all the imp-defs.
910   while(Defs) {
911     unsigned DReg = CountTrailingZeros_32(Defs);
912     DEBUG(dbgs() << "Defining %FP" << DReg << " as 0\n");
913     BuildMI(*MBB, I, DebugLoc(), TII->get(X86::LD_F0));
914     pushReg(DReg);
915     Defs &= ~(1 << DReg);
916   }
917
918   // Now we should have the correct registers live.
919   DEBUG(dumpStack());
920   assert(StackTop == CountPopulation_32(Mask) && "Live count mismatch");
921 }
922
923 /// shuffleStackTop - emit fxch instructions before I to shuffle the top
924 /// FixCount entries into the order given by FixStack.
925 /// FIXME: Is there a better algorithm than insertion sort?
926 void FPS::shuffleStackTop(const unsigned char *FixStack,
927                           unsigned FixCount,
928                           MachineBasicBlock::iterator I) {
929   // Move items into place, starting from the desired stack bottom.
930   while (FixCount--) {
931     // Old register at position FixCount.
932     unsigned OldReg = getStackEntry(FixCount);
933     // Desired register at position FixCount.
934     unsigned Reg = FixStack[FixCount];
935     if (Reg == OldReg)
936       continue;
937     // (Reg st0) (OldReg st0) = (Reg OldReg st0)
938     moveToTop(Reg, I);
939     if (FixCount > 0)
940       moveToTop(OldReg, I);
941   }
942   DEBUG(dumpStack());
943 }
944
945
946 //===----------------------------------------------------------------------===//
947 // Instruction transformation implementation
948 //===----------------------------------------------------------------------===//
949
950 /// handleZeroArgFP - ST(0) = fld0    ST(0) = flds <mem>
951 ///
952 void FPS::handleZeroArgFP(MachineBasicBlock::iterator &I) {
953   MachineInstr *MI = I;
954   unsigned DestReg = getFPReg(MI->getOperand(0));
955
956   // Change from the pseudo instruction to the concrete instruction.
957   MI->RemoveOperand(0);   // Remove the explicit ST(0) operand
958   MI->setDesc(TII->get(getConcreteOpcode(MI->getOpcode())));
959   
960   // Result gets pushed on the stack.
961   pushReg(DestReg);
962 }
963
964 /// handleOneArgFP - fst <mem>, ST(0)
965 ///
966 void FPS::handleOneArgFP(MachineBasicBlock::iterator &I) {
967   MachineInstr *MI = I;
968   unsigned NumOps = MI->getDesc().getNumOperands();
969   assert((NumOps == X86::AddrNumOperands + 1 || NumOps == 1) &&
970          "Can only handle fst* & ftst instructions!");
971
972   // Is this the last use of the source register?
973   unsigned Reg = getFPReg(MI->getOperand(NumOps-1));
974   bool KillsSrc = MI->killsRegister(X86::FP0+Reg);
975
976   // FISTP64m is strange because there isn't a non-popping versions.
977   // If we have one _and_ we don't want to pop the operand, duplicate the value
978   // on the stack instead of moving it.  This ensure that popping the value is
979   // always ok.
980   // Ditto FISTTP16m, FISTTP32m, FISTTP64m, ST_FpP80m.
981   //
982   if (!KillsSrc &&
983       (MI->getOpcode() == X86::IST_Fp64m32 ||
984        MI->getOpcode() == X86::ISTT_Fp16m32 ||
985        MI->getOpcode() == X86::ISTT_Fp32m32 ||
986        MI->getOpcode() == X86::ISTT_Fp64m32 ||
987        MI->getOpcode() == X86::IST_Fp64m64 ||
988        MI->getOpcode() == X86::ISTT_Fp16m64 ||
989        MI->getOpcode() == X86::ISTT_Fp32m64 ||
990        MI->getOpcode() == X86::ISTT_Fp64m64 ||
991        MI->getOpcode() == X86::IST_Fp64m80 ||
992        MI->getOpcode() == X86::ISTT_Fp16m80 ||
993        MI->getOpcode() == X86::ISTT_Fp32m80 ||
994        MI->getOpcode() == X86::ISTT_Fp64m80 ||
995        MI->getOpcode() == X86::ST_FpP80m)) {
996     duplicateToTop(Reg, getScratchReg(), I);
997   } else {
998     moveToTop(Reg, I);            // Move to the top of the stack...
999   }
1000   
1001   // Convert from the pseudo instruction to the concrete instruction.
1002   MI->RemoveOperand(NumOps-1);    // Remove explicit ST(0) operand
1003   MI->setDesc(TII->get(getConcreteOpcode(MI->getOpcode())));
1004
1005   if (MI->getOpcode() == X86::IST_FP64m ||
1006       MI->getOpcode() == X86::ISTT_FP16m ||
1007       MI->getOpcode() == X86::ISTT_FP32m ||
1008       MI->getOpcode() == X86::ISTT_FP64m ||
1009       MI->getOpcode() == X86::ST_FP80m) {
1010     if (StackTop == 0)
1011       report_fatal_error("Stack empty??");
1012     --StackTop;
1013   } else if (KillsSrc) { // Last use of operand?
1014     popStackAfter(I);
1015   }
1016 }
1017
1018
1019 /// handleOneArgFPRW: Handle instructions that read from the top of stack and
1020 /// replace the value with a newly computed value.  These instructions may have
1021 /// non-fp operands after their FP operands.
1022 ///
1023 ///  Examples:
1024 ///     R1 = fchs R2
1025 ///     R1 = fadd R2, [mem]
1026 ///
1027 void FPS::handleOneArgFPRW(MachineBasicBlock::iterator &I) {
1028   MachineInstr *MI = I;
1029 #ifndef NDEBUG
1030   unsigned NumOps = MI->getDesc().getNumOperands();
1031   assert(NumOps >= 2 && "FPRW instructions must have 2 ops!!");
1032 #endif
1033
1034   // Is this the last use of the source register?
1035   unsigned Reg = getFPReg(MI->getOperand(1));
1036   bool KillsSrc = MI->killsRegister(X86::FP0+Reg);
1037
1038   if (KillsSrc) {
1039     // If this is the last use of the source register, just make sure it's on
1040     // the top of the stack.
1041     moveToTop(Reg, I);
1042     if (StackTop == 0)
1043       report_fatal_error("Stack cannot be empty!");
1044     --StackTop;
1045     pushReg(getFPReg(MI->getOperand(0)));
1046   } else {
1047     // If this is not the last use of the source register, _copy_ it to the top
1048     // of the stack.
1049     duplicateToTop(Reg, getFPReg(MI->getOperand(0)), I);
1050   }
1051
1052   // Change from the pseudo instruction to the concrete instruction.
1053   MI->RemoveOperand(1);   // Drop the source operand.
1054   MI->RemoveOperand(0);   // Drop the destination operand.
1055   MI->setDesc(TII->get(getConcreteOpcode(MI->getOpcode())));
1056 }
1057
1058
1059 //===----------------------------------------------------------------------===//
1060 // Define tables of various ways to map pseudo instructions
1061 //
1062
1063 // ForwardST0Table - Map: A = B op C  into: ST(0) = ST(0) op ST(i)
1064 static const TableEntry ForwardST0Table[] = {
1065   { X86::ADD_Fp32  , X86::ADD_FST0r },
1066   { X86::ADD_Fp64  , X86::ADD_FST0r },
1067   { X86::ADD_Fp80  , X86::ADD_FST0r },
1068   { X86::DIV_Fp32  , X86::DIV_FST0r },
1069   { X86::DIV_Fp64  , X86::DIV_FST0r },
1070   { X86::DIV_Fp80  , X86::DIV_FST0r },
1071   { X86::MUL_Fp32  , X86::MUL_FST0r },
1072   { X86::MUL_Fp64  , X86::MUL_FST0r },
1073   { X86::MUL_Fp80  , X86::MUL_FST0r },
1074   { X86::SUB_Fp32  , X86::SUB_FST0r },
1075   { X86::SUB_Fp64  , X86::SUB_FST0r },
1076   { X86::SUB_Fp80  , X86::SUB_FST0r },
1077 };
1078
1079 // ReverseST0Table - Map: A = B op C  into: ST(0) = ST(i) op ST(0)
1080 static const TableEntry ReverseST0Table[] = {
1081   { X86::ADD_Fp32  , X86::ADD_FST0r  },   // commutative
1082   { X86::ADD_Fp64  , X86::ADD_FST0r  },   // commutative
1083   { X86::ADD_Fp80  , X86::ADD_FST0r  },   // commutative
1084   { X86::DIV_Fp32  , X86::DIVR_FST0r },
1085   { X86::DIV_Fp64  , X86::DIVR_FST0r },
1086   { X86::DIV_Fp80  , X86::DIVR_FST0r },
1087   { X86::MUL_Fp32  , X86::MUL_FST0r  },   // commutative
1088   { X86::MUL_Fp64  , X86::MUL_FST0r  },   // commutative
1089   { X86::MUL_Fp80  , X86::MUL_FST0r  },   // commutative
1090   { X86::SUB_Fp32  , X86::SUBR_FST0r },
1091   { X86::SUB_Fp64  , X86::SUBR_FST0r },
1092   { X86::SUB_Fp80  , X86::SUBR_FST0r },
1093 };
1094
1095 // ForwardSTiTable - Map: A = B op C  into: ST(i) = ST(0) op ST(i)
1096 static const TableEntry ForwardSTiTable[] = {
1097   { X86::ADD_Fp32  , X86::ADD_FrST0  },   // commutative
1098   { X86::ADD_Fp64  , X86::ADD_FrST0  },   // commutative
1099   { X86::ADD_Fp80  , X86::ADD_FrST0  },   // commutative
1100   { X86::DIV_Fp32  , X86::DIVR_FrST0 },
1101   { X86::DIV_Fp64  , X86::DIVR_FrST0 },
1102   { X86::DIV_Fp80  , X86::DIVR_FrST0 },
1103   { X86::MUL_Fp32  , X86::MUL_FrST0  },   // commutative
1104   { X86::MUL_Fp64  , X86::MUL_FrST0  },   // commutative
1105   { X86::MUL_Fp80  , X86::MUL_FrST0  },   // commutative
1106   { X86::SUB_Fp32  , X86::SUBR_FrST0 },
1107   { X86::SUB_Fp64  , X86::SUBR_FrST0 },
1108   { X86::SUB_Fp80  , X86::SUBR_FrST0 },
1109 };
1110
1111 // ReverseSTiTable - Map: A = B op C  into: ST(i) = ST(i) op ST(0)
1112 static const TableEntry ReverseSTiTable[] = {
1113   { X86::ADD_Fp32  , X86::ADD_FrST0 },
1114   { X86::ADD_Fp64  , X86::ADD_FrST0 },
1115   { X86::ADD_Fp80  , X86::ADD_FrST0 },
1116   { X86::DIV_Fp32  , X86::DIV_FrST0 },
1117   { X86::DIV_Fp64  , X86::DIV_FrST0 },
1118   { X86::DIV_Fp80  , X86::DIV_FrST0 },
1119   { X86::MUL_Fp32  , X86::MUL_FrST0 },
1120   { X86::MUL_Fp64  , X86::MUL_FrST0 },
1121   { X86::MUL_Fp80  , X86::MUL_FrST0 },
1122   { X86::SUB_Fp32  , X86::SUB_FrST0 },
1123   { X86::SUB_Fp64  , X86::SUB_FrST0 },
1124   { X86::SUB_Fp80  , X86::SUB_FrST0 },
1125 };
1126
1127
1128 /// handleTwoArgFP - Handle instructions like FADD and friends which are virtual
1129 /// instructions which need to be simplified and possibly transformed.
1130 ///
1131 /// Result: ST(0) = fsub  ST(0), ST(i)
1132 ///         ST(i) = fsub  ST(0), ST(i)
1133 ///         ST(0) = fsubr ST(0), ST(i)
1134 ///         ST(i) = fsubr ST(0), ST(i)
1135 ///
1136 void FPS::handleTwoArgFP(MachineBasicBlock::iterator &I) {
1137   ASSERT_SORTED(ForwardST0Table); ASSERT_SORTED(ReverseST0Table);
1138   ASSERT_SORTED(ForwardSTiTable); ASSERT_SORTED(ReverseSTiTable);
1139   MachineInstr *MI = I;
1140
1141   unsigned NumOperands = MI->getDesc().getNumOperands();
1142   assert(NumOperands == 3 && "Illegal TwoArgFP instruction!");
1143   unsigned Dest = getFPReg(MI->getOperand(0));
1144   unsigned Op0 = getFPReg(MI->getOperand(NumOperands-2));
1145   unsigned Op1 = getFPReg(MI->getOperand(NumOperands-1));
1146   bool KillsOp0 = MI->killsRegister(X86::FP0+Op0);
1147   bool KillsOp1 = MI->killsRegister(X86::FP0+Op1);
1148   DebugLoc dl = MI->getDebugLoc();
1149
1150   unsigned TOS = getStackEntry(0);
1151
1152   // One of our operands must be on the top of the stack.  If neither is yet, we
1153   // need to move one.
1154   if (Op0 != TOS && Op1 != TOS) {   // No operand at TOS?
1155     // We can choose to move either operand to the top of the stack.  If one of
1156     // the operands is killed by this instruction, we want that one so that we
1157     // can update right on top of the old version.
1158     if (KillsOp0) {
1159       moveToTop(Op0, I);         // Move dead operand to TOS.
1160       TOS = Op0;
1161     } else if (KillsOp1) {
1162       moveToTop(Op1, I);
1163       TOS = Op1;
1164     } else {
1165       // All of the operands are live after this instruction executes, so we
1166       // cannot update on top of any operand.  Because of this, we must
1167       // duplicate one of the stack elements to the top.  It doesn't matter
1168       // which one we pick.
1169       //
1170       duplicateToTop(Op0, Dest, I);
1171       Op0 = TOS = Dest;
1172       KillsOp0 = true;
1173     }
1174   } else if (!KillsOp0 && !KillsOp1) {
1175     // If we DO have one of our operands at the top of the stack, but we don't
1176     // have a dead operand, we must duplicate one of the operands to a new slot
1177     // on the stack.
1178     duplicateToTop(Op0, Dest, I);
1179     Op0 = TOS = Dest;
1180     KillsOp0 = true;
1181   }
1182
1183   // Now we know that one of our operands is on the top of the stack, and at
1184   // least one of our operands is killed by this instruction.
1185   assert((TOS == Op0 || TOS == Op1) && (KillsOp0 || KillsOp1) &&
1186          "Stack conditions not set up right!");
1187
1188   // We decide which form to use based on what is on the top of the stack, and
1189   // which operand is killed by this instruction.
1190   const TableEntry *InstTable;
1191   bool isForward = TOS == Op0;
1192   bool updateST0 = (TOS == Op0 && !KillsOp1) || (TOS == Op1 && !KillsOp0);
1193   if (updateST0) {
1194     if (isForward)
1195       InstTable = ForwardST0Table;
1196     else
1197       InstTable = ReverseST0Table;
1198   } else {
1199     if (isForward)
1200       InstTable = ForwardSTiTable;
1201     else
1202       InstTable = ReverseSTiTable;
1203   }
1204
1205   int Opcode = Lookup(InstTable, array_lengthof(ForwardST0Table),
1206                       MI->getOpcode());
1207   assert(Opcode != -1 && "Unknown TwoArgFP pseudo instruction!");
1208
1209   // NotTOS - The register which is not on the top of stack...
1210   unsigned NotTOS = (TOS == Op0) ? Op1 : Op0;
1211
1212   // Replace the old instruction with a new instruction
1213   MBB->remove(I++);
1214   I = BuildMI(*MBB, I, dl, TII->get(Opcode)).addReg(getSTReg(NotTOS));
1215
1216   // If both operands are killed, pop one off of the stack in addition to
1217   // overwriting the other one.
1218   if (KillsOp0 && KillsOp1 && Op0 != Op1) {
1219     assert(!updateST0 && "Should have updated other operand!");
1220     popStackAfter(I);   // Pop the top of stack
1221   }
1222
1223   // Update stack information so that we know the destination register is now on
1224   // the stack.
1225   unsigned UpdatedSlot = getSlot(updateST0 ? TOS : NotTOS);
1226   assert(UpdatedSlot < StackTop && Dest < 7);
1227   Stack[UpdatedSlot]   = Dest;
1228   RegMap[Dest]         = UpdatedSlot;
1229   MBB->getParent()->DeleteMachineInstr(MI); // Remove the old instruction
1230 }
1231
1232 /// handleCompareFP - Handle FUCOM and FUCOMI instructions, which have two FP
1233 /// register arguments and no explicit destinations.
1234 ///
1235 void FPS::handleCompareFP(MachineBasicBlock::iterator &I) {
1236   ASSERT_SORTED(ForwardST0Table); ASSERT_SORTED(ReverseST0Table);
1237   ASSERT_SORTED(ForwardSTiTable); ASSERT_SORTED(ReverseSTiTable);
1238   MachineInstr *MI = I;
1239
1240   unsigned NumOperands = MI->getDesc().getNumOperands();
1241   assert(NumOperands == 2 && "Illegal FUCOM* instruction!");
1242   unsigned Op0 = getFPReg(MI->getOperand(NumOperands-2));
1243   unsigned Op1 = getFPReg(MI->getOperand(NumOperands-1));
1244   bool KillsOp0 = MI->killsRegister(X86::FP0+Op0);
1245   bool KillsOp1 = MI->killsRegister(X86::FP0+Op1);
1246
1247   // Make sure the first operand is on the top of stack, the other one can be
1248   // anywhere.
1249   moveToTop(Op0, I);
1250
1251   // Change from the pseudo instruction to the concrete instruction.
1252   MI->getOperand(0).setReg(getSTReg(Op1));
1253   MI->RemoveOperand(1);
1254   MI->setDesc(TII->get(getConcreteOpcode(MI->getOpcode())));
1255
1256   // If any of the operands are killed by this instruction, free them.
1257   if (KillsOp0) freeStackSlotAfter(I, Op0);
1258   if (KillsOp1 && Op0 != Op1) freeStackSlotAfter(I, Op1);
1259 }
1260
1261 /// handleCondMovFP - Handle two address conditional move instructions.  These
1262 /// instructions move a st(i) register to st(0) iff a condition is true.  These
1263 /// instructions require that the first operand is at the top of the stack, but
1264 /// otherwise don't modify the stack at all.
1265 void FPS::handleCondMovFP(MachineBasicBlock::iterator &I) {
1266   MachineInstr *MI = I;
1267
1268   unsigned Op0 = getFPReg(MI->getOperand(0));
1269   unsigned Op1 = getFPReg(MI->getOperand(2));
1270   bool KillsOp1 = MI->killsRegister(X86::FP0+Op1);
1271
1272   // The first operand *must* be on the top of the stack.
1273   moveToTop(Op0, I);
1274
1275   // Change the second operand to the stack register that the operand is in.
1276   // Change from the pseudo instruction to the concrete instruction.
1277   MI->RemoveOperand(0);
1278   MI->RemoveOperand(1);
1279   MI->getOperand(0).setReg(getSTReg(Op1));
1280   MI->setDesc(TII->get(getConcreteOpcode(MI->getOpcode())));
1281   
1282   // If we kill the second operand, make sure to pop it from the stack.
1283   if (Op0 != Op1 && KillsOp1) {
1284     // Get this value off of the register stack.
1285     freeStackSlotAfter(I, Op1);
1286   }
1287 }
1288
1289
1290 /// handleSpecialFP - Handle special instructions which behave unlike other
1291 /// floating point instructions.  This is primarily intended for use by pseudo
1292 /// instructions.
1293 ///
1294 void FPS::handleSpecialFP(MachineBasicBlock::iterator &I) {
1295   MachineInstr *MI = I;
1296   switch (MI->getOpcode()) {
1297   default: llvm_unreachable("Unknown SpecialFP instruction!");
1298   case TargetOpcode::COPY: {
1299     // We handle three kinds of copies: FP <- FP, FP <- ST, and ST <- FP.
1300     const MachineOperand &MO1 = MI->getOperand(1);
1301     const MachineOperand &MO0 = MI->getOperand(0);
1302     unsigned DstST = MO0.getReg() - X86::ST0;
1303     unsigned SrcST = MO1.getReg() - X86::ST0;
1304     bool KillsSrc = MI->killsRegister(MO1.getReg());
1305
1306     // ST = COPY FP. Set up a pending ST register.
1307     if (DstST < 8) {
1308       unsigned SrcFP = getFPReg(MO1);
1309       assert(isLive(SrcFP) && "Cannot copy dead register");
1310       assert(!MO0.isDead() && "Cannot copy to dead ST register");
1311
1312       // Unallocated STs are marked as the nonexistent FP255.
1313       while (NumPendingSTs <= DstST)
1314         PendingST[NumPendingSTs++] = NumFPRegs;
1315
1316       // STi could still be live from a previous inline asm.
1317       if (isScratchReg(PendingST[DstST])) {
1318         DEBUG(dbgs() << "Clobbering old ST in FP" << unsigned(PendingST[DstST])
1319                      << '\n');
1320         freeStackSlotBefore(MI, PendingST[DstST]);
1321       }
1322
1323       // When the source is killed, allocate a scratch FP register.
1324       if (KillsSrc) {
1325         unsigned Slot = getSlot(SrcFP);
1326         unsigned SR = getScratchReg();
1327         PendingST[DstST] = SR;
1328         Stack[Slot] = SR;
1329         RegMap[SR] = Slot;
1330       } else
1331         PendingST[DstST] = SrcFP;
1332       break;
1333     }
1334
1335     // FP = COPY ST. Extract fixed stack value.
1336     // Any instruction defining ST registers must have assigned them to a
1337     // scratch register.
1338     if (SrcST < 8) {
1339       unsigned DstFP = getFPReg(MO0);
1340       assert(!isLive(DstFP) && "Cannot copy ST to live FP register");
1341       assert(NumPendingSTs > SrcST && "Cannot copy from dead ST register");
1342       unsigned SrcFP = PendingST[SrcST];
1343       assert(isScratchReg(SrcFP) && "Expected ST in a scratch register");
1344       assert(isLive(SrcFP) && "Scratch holding ST is dead");
1345
1346       // DstFP steals the stack slot from SrcFP.
1347       unsigned Slot = getSlot(SrcFP);
1348       Stack[Slot] = DstFP;
1349       RegMap[DstFP] = Slot;
1350
1351       // Always treat the ST as killed.
1352       PendingST[SrcST] = NumFPRegs;
1353       while (NumPendingSTs && PendingST[NumPendingSTs - 1] == NumFPRegs)
1354         --NumPendingSTs;
1355       break;
1356     }
1357
1358     // FP <- FP copy.
1359     unsigned DstFP = getFPReg(MO0);
1360     unsigned SrcFP = getFPReg(MO1);
1361     assert(isLive(SrcFP) && "Cannot copy dead register");
1362     if (KillsSrc) {
1363       // If the input operand is killed, we can just change the owner of the
1364       // incoming stack slot into the result.
1365       unsigned Slot = getSlot(SrcFP);
1366       Stack[Slot] = DstFP;
1367       RegMap[DstFP] = Slot;
1368     } else {
1369       // For COPY we just duplicate the specified value to a new stack slot.
1370       // This could be made better, but would require substantial changes.
1371       duplicateToTop(SrcFP, DstFP, I);
1372     }
1373     break;
1374   }
1375
1376   case TargetOpcode::IMPLICIT_DEF: {
1377     // All FP registers must be explicitly defined, so load a 0 instead.
1378     unsigned Reg = MI->getOperand(0).getReg() - X86::FP0;
1379     DEBUG(dbgs() << "Emitting LD_F0 for implicit FP" << Reg << '\n');
1380     BuildMI(*MBB, I, MI->getDebugLoc(), TII->get(X86::LD_F0));
1381     pushReg(Reg);
1382     break;
1383   }
1384
1385   case X86::FpPOP_RETVAL: {
1386     // The FpPOP_RETVAL instruction is used after calls that return a value on
1387     // the floating point stack. We cannot model this with ST defs since CALL
1388     // instructions have fixed clobber lists. This instruction is interpreted
1389     // to mean that there is one more live register on the stack than we
1390     // thought.
1391     //
1392     // This means that StackTop does not match the hardware stack between a
1393     // call and the FpPOP_RETVAL instructions.  We do tolerate FP instructions
1394     // between CALL and FpPOP_RETVAL as long as they don't overflow the
1395     // hardware stack.
1396     unsigned DstFP = getFPReg(MI->getOperand(0));
1397
1398     // Move existing stack elements up to reflect reality.
1399     assert(StackTop < 8 && "Stack overflowed before FpPOP_RETVAL");
1400     if (StackTop) {
1401       std::copy_backward(Stack, Stack + StackTop, Stack + StackTop + 1);
1402       for (unsigned i = 0; i != NumFPRegs; ++i)
1403         ++RegMap[i];
1404     }
1405     ++StackTop;
1406
1407     // DstFP is the new bottom of the stack.
1408     Stack[0] = DstFP;
1409     RegMap[DstFP] = 0;
1410
1411     // DstFP will be killed by processBasicBlock if this was a dead def.
1412     break;
1413   }
1414
1415   case TargetOpcode::INLINEASM: {
1416     // The inline asm MachineInstr currently only *uses* FP registers for the
1417     // 'f' constraint.  These should be turned into the current ST(x) register
1418     // in the machine instr.
1419     //
1420     // There are special rules for x87 inline assembly. The compiler must know
1421     // exactly how many registers are popped and pushed implicitly by the asm.
1422     // Otherwise it is not possible to restore the stack state after the inline
1423     // asm.
1424     //
1425     // There are 3 kinds of input operands:
1426     //
1427     // 1. Popped inputs. These must appear at the stack top in ST0-STn. A
1428     //    popped input operand must be in a fixed stack slot, and it is either
1429     //    tied to an output operand, or in the clobber list. The MI has ST use
1430     //    and def operands for these inputs.
1431     //
1432     // 2. Fixed inputs. These inputs appear in fixed stack slots, but are
1433     //    preserved by the inline asm. The fixed stack slots must be STn-STm
1434     //    following the popped inputs. A fixed input operand cannot be tied to
1435     //    an output or appear in the clobber list. The MI has ST use operands
1436     //    and no defs for these inputs.
1437     //
1438     // 3. Preserved inputs. These inputs use the "f" constraint which is
1439     //    represented as an FP register. The inline asm won't change these
1440     //    stack slots.
1441     //
1442     // Outputs must be in ST registers, FP outputs are not allowed. Clobbered
1443     // registers do not count as output operands. The inline asm changes the
1444     // stack as if it popped all the popped inputs and then pushed all the
1445     // output operands.
1446
1447     // Scan the assembly for ST registers used, defined and clobbered. We can
1448     // only tell clobbers from defs by looking at the asm descriptor.
1449     unsigned STUses = 0, STDefs = 0, STClobbers = 0, STDeadDefs = 0;
1450     unsigned NumOps = 0;
1451     for (unsigned i = InlineAsm::MIOp_FirstOperand, e = MI->getNumOperands();
1452          i != e && MI->getOperand(i).isImm(); i += 1 + NumOps) {
1453       unsigned Flags = MI->getOperand(i).getImm();
1454       NumOps = InlineAsm::getNumOperandRegisters(Flags);
1455       if (NumOps != 1)
1456         continue;
1457       const MachineOperand &MO = MI->getOperand(i + 1);
1458       if (!MO.isReg())
1459         continue;
1460       unsigned STReg = MO.getReg() - X86::ST0;
1461       if (STReg >= 8)
1462         continue;
1463
1464       switch (InlineAsm::getKind(Flags)) {
1465       case InlineAsm::Kind_RegUse:
1466         STUses |= (1u << STReg);
1467         break;
1468       case InlineAsm::Kind_RegDef:
1469       case InlineAsm::Kind_RegDefEarlyClobber:
1470         STDefs |= (1u << STReg);
1471         if (MO.isDead())
1472           STDeadDefs |= (1u << STReg);
1473         break;
1474       case InlineAsm::Kind_Clobber:
1475         STClobbers |= (1u << STReg);
1476         break;
1477       default:
1478         break;
1479       }
1480     }
1481
1482     if (STUses && !isMask_32(STUses))
1483       MI->emitError("fixed input regs must be last on the x87 stack");
1484     unsigned NumSTUses = CountTrailingOnes_32(STUses);
1485
1486     // Defs must be contiguous from the stack top. ST0-STn.
1487     if (STDefs && !isMask_32(STDefs)) {
1488       MI->emitError("output regs must be last on the x87 stack");
1489       STDefs = NextPowerOf2(STDefs) - 1;
1490     }
1491     unsigned NumSTDefs = CountTrailingOnes_32(STDefs);
1492
1493     // So must the clobbered stack slots. ST0-STm, m >= n.
1494     if (STClobbers && !isMask_32(STDefs | STClobbers))
1495       MI->emitError("clobbers must be last on the x87 stack");
1496
1497     // Popped inputs are the ones that are also clobbered or defined.
1498     unsigned STPopped = STUses & (STDefs | STClobbers);
1499     if (STPopped && !isMask_32(STPopped))
1500       MI->emitError("implicitly popped regs must be last on the x87 stack");
1501     unsigned NumSTPopped = CountTrailingOnes_32(STPopped);
1502
1503     DEBUG(dbgs() << "Asm uses " << NumSTUses << " fixed regs, pops "
1504                  << NumSTPopped << ", and defines " << NumSTDefs << " regs.\n");
1505
1506     // Scan the instruction for FP uses corresponding to "f" constraints.
1507     // Collect FP registers to kill afer the instruction.
1508     // Always kill all the scratch regs.
1509     unsigned FPKills = ((1u << NumFPRegs) - 1) & ~0xff;
1510     unsigned FPUsed = 0;
1511     for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
1512       MachineOperand &Op = MI->getOperand(i);
1513       if (!Op.isReg() || Op.getReg() < X86::FP0 || Op.getReg() > X86::FP6)
1514         continue;
1515       if (!Op.isUse())
1516         MI->emitError("illegal \"f\" output constraint");
1517       unsigned FPReg = getFPReg(Op);
1518       FPUsed |= 1U << FPReg;
1519
1520       // If we kill this operand, make sure to pop it from the stack after the
1521       // asm.  We just remember it for now, and pop them all off at the end in
1522       // a batch.
1523       if (Op.isKill())
1524         FPKills |= 1U << FPReg;
1525     }
1526
1527     // The popped inputs will be killed by the instruction, so duplicate them
1528     // if the FP register needs to be live after the instruction, or if it is
1529     // used in the instruction itself. We effectively treat the popped inputs
1530     // as early clobbers.
1531     for (unsigned i = 0; i < NumSTPopped; ++i) {
1532       if ((FPKills & ~FPUsed) & (1u << PendingST[i]))
1533         continue;
1534       unsigned SR = getScratchReg();
1535       duplicateToTop(PendingST[i], SR, I);
1536       DEBUG(dbgs() << "Duplicating ST" << i << " in FP"
1537                    << unsigned(PendingST[i]) << " to avoid clobbering it.\n");
1538       PendingST[i] = SR;
1539     }
1540
1541     // Make sure we have a unique live register for every fixed use. Some of
1542     // them could be undef uses, and we need to emit LD_F0 instructions.
1543     for (unsigned i = 0; i < NumSTUses; ++i) {
1544       if (i < NumPendingSTs && PendingST[i] < NumFPRegs) {
1545         // Check for shared assignments.
1546         for (unsigned j = 0; j < i; ++j) {
1547           if (PendingST[j] != PendingST[i])
1548             continue;
1549           // STi and STj are inn the same register, create a copy.
1550           unsigned SR = getScratchReg();
1551           duplicateToTop(PendingST[i], SR, I);
1552           DEBUG(dbgs() << "Duplicating ST" << i << " in FP"
1553                        << unsigned(PendingST[i])
1554                        << " to avoid collision with ST" << j << '\n');
1555           PendingST[i] = SR;
1556         }
1557         continue;
1558       }
1559       unsigned SR = getScratchReg();
1560       DEBUG(dbgs() << "Emitting LD_F0 for ST" << i << " in FP" << SR << '\n');
1561       BuildMI(*MBB, I, MI->getDebugLoc(), TII->get(X86::LD_F0));
1562       pushReg(SR);
1563       PendingST[i] = SR;
1564       if (NumPendingSTs == i)
1565         ++NumPendingSTs;
1566     }
1567     assert(NumPendingSTs >= NumSTUses && "Fixed registers should be assigned");
1568
1569     // Now we can rearrange the live registers to match what was requested.
1570     shuffleStackTop(PendingST, NumPendingSTs, I);
1571     DEBUG({dbgs() << "Before asm: "; dumpStack();});
1572
1573     // With the stack layout fixed, rewrite the FP registers.
1574     for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
1575       MachineOperand &Op = MI->getOperand(i);
1576       if (!Op.isReg() || Op.getReg() < X86::FP0 || Op.getReg() > X86::FP6)
1577         continue;
1578       unsigned FPReg = getFPReg(Op);
1579       Op.setReg(getSTReg(FPReg));
1580     }
1581
1582     // Simulate the inline asm popping its inputs and pushing its outputs.
1583     StackTop -= NumSTPopped;
1584
1585     // Hold the fixed output registers in scratch FP registers. They will be
1586     // transferred to real FP registers by copies.
1587     NumPendingSTs = 0;
1588     for (unsigned i = 0; i < NumSTDefs; ++i) {
1589       unsigned SR = getScratchReg();
1590       pushReg(SR);
1591       FPKills &= ~(1u << SR);
1592     }
1593     for (unsigned i = 0; i < NumSTDefs; ++i)
1594       PendingST[NumPendingSTs++] = getStackEntry(i);
1595     DEBUG({dbgs() << "After asm: "; dumpStack();});
1596
1597     // If any of the ST defs were dead, pop them immediately. Our caller only
1598     // handles dead FP defs.
1599     MachineBasicBlock::iterator InsertPt = MI;
1600     for (unsigned i = 0; STDefs & (1u << i); ++i) {
1601       if (!(STDeadDefs & (1u << i)))
1602         continue;
1603       freeStackSlotAfter(InsertPt, PendingST[i]);
1604       PendingST[i] = NumFPRegs;
1605     }
1606     while (NumPendingSTs && PendingST[NumPendingSTs - 1] == NumFPRegs)
1607       --NumPendingSTs;
1608
1609     // If this asm kills any FP registers (is the last use of them) we must
1610     // explicitly emit pop instructions for them.  Do this now after the asm has
1611     // executed so that the ST(x) numbers are not off (which would happen if we
1612     // did this inline with operand rewriting).
1613     //
1614     // Note: this might be a non-optimal pop sequence.  We might be able to do
1615     // better by trying to pop in stack order or something.
1616     while (FPKills) {
1617       unsigned FPReg = CountTrailingZeros_32(FPKills);
1618       if (isLive(FPReg))
1619         freeStackSlotAfter(InsertPt, FPReg);
1620       FPKills &= ~(1U << FPReg);
1621     }
1622     // Don't delete the inline asm!
1623     return;
1624   }
1625
1626   case X86::RET:
1627   case X86::RETI:
1628     // If RET has an FP register use operand, pass the first one in ST(0) and
1629     // the second one in ST(1).
1630
1631     // Find the register operands.
1632     unsigned FirstFPRegOp = ~0U, SecondFPRegOp = ~0U;
1633     unsigned LiveMask = 0;
1634
1635     for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
1636       MachineOperand &Op = MI->getOperand(i);
1637       if (!Op.isReg() || Op.getReg() < X86::FP0 || Op.getReg() > X86::FP6)
1638         continue;
1639       // FP Register uses must be kills unless there are two uses of the same
1640       // register, in which case only one will be a kill.
1641       assert(Op.isUse() &&
1642              (Op.isKill() ||                        // Marked kill.
1643               getFPReg(Op) == FirstFPRegOp ||       // Second instance.
1644               MI->killsRegister(Op.getReg())) &&    // Later use is marked kill.
1645              "Ret only defs operands, and values aren't live beyond it");
1646
1647       if (FirstFPRegOp == ~0U)
1648         FirstFPRegOp = getFPReg(Op);
1649       else {
1650         assert(SecondFPRegOp == ~0U && "More than two fp operands!");
1651         SecondFPRegOp = getFPReg(Op);
1652       }
1653       LiveMask |= (1 << getFPReg(Op));
1654
1655       // Remove the operand so that later passes don't see it.
1656       MI->RemoveOperand(i);
1657       --i, --e;
1658     }
1659
1660     // We may have been carrying spurious live-ins, so make sure only the returned
1661     // registers are left live.
1662     adjustLiveRegs(LiveMask, MI);
1663     if (!LiveMask) return;  // Quick check to see if any are possible.
1664
1665     // There are only four possibilities here:
1666     // 1) we are returning a single FP value.  In this case, it has to be in
1667     //    ST(0) already, so just declare success by removing the value from the
1668     //    FP Stack.
1669     if (SecondFPRegOp == ~0U) {
1670       // Assert that the top of stack contains the right FP register.
1671       assert(StackTop == 1 && FirstFPRegOp == getStackEntry(0) &&
1672              "Top of stack not the right register for RET!");
1673       
1674       // Ok, everything is good, mark the value as not being on the stack
1675       // anymore so that our assertion about the stack being empty at end of
1676       // block doesn't fire.
1677       StackTop = 0;
1678       return;
1679     }
1680     
1681     // Otherwise, we are returning two values:
1682     // 2) If returning the same value for both, we only have one thing in the FP
1683     //    stack.  Consider:  RET FP1, FP1
1684     if (StackTop == 1) {
1685       assert(FirstFPRegOp == SecondFPRegOp && FirstFPRegOp == getStackEntry(0)&&
1686              "Stack misconfiguration for RET!");
1687       
1688       // Duplicate the TOS so that we return it twice.  Just pick some other FPx
1689       // register to hold it.
1690       unsigned NewReg = getScratchReg();
1691       duplicateToTop(FirstFPRegOp, NewReg, MI);
1692       FirstFPRegOp = NewReg;
1693     }
1694     
1695     /// Okay we know we have two different FPx operands now:
1696     assert(StackTop == 2 && "Must have two values live!");
1697     
1698     /// 3) If SecondFPRegOp is currently in ST(0) and FirstFPRegOp is currently
1699     ///    in ST(1).  In this case, emit an fxch.
1700     if (getStackEntry(0) == SecondFPRegOp) {
1701       assert(getStackEntry(1) == FirstFPRegOp && "Unknown regs live");
1702       moveToTop(FirstFPRegOp, MI);
1703     }
1704     
1705     /// 4) Finally, FirstFPRegOp must be in ST(0) and SecondFPRegOp must be in
1706     /// ST(1).  Just remove both from our understanding of the stack and return.
1707     assert(getStackEntry(0) == FirstFPRegOp && "Unknown regs live");
1708     assert(getStackEntry(1) == SecondFPRegOp && "Unknown regs live");
1709     StackTop = 0;
1710     return;
1711   }
1712
1713   I = MBB->erase(I);  // Remove the pseudo instruction
1714
1715   // We want to leave I pointing to the previous instruction, but what if we
1716   // just erased the first instruction?
1717   if (I == MBB->begin()) {
1718     DEBUG(dbgs() << "Inserting dummy KILL\n");
1719     I = BuildMI(*MBB, I, DebugLoc(), TII->get(TargetOpcode::KILL));
1720   } else
1721     --I;
1722 }