~louis/ubuntu/trusty/clamav/lp799623_fix_logrotate

« back to all changes in this revision

Viewing changes to libclamav/c++/llvm/lib/CodeGen/RegAllocLocal.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Scott Kitterman
  • Date: 2010-03-12 11:30:04 UTC
  • mfrom: (0.41.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20100312113004-b0fop4bkycszdd0z
Tags: 0.96~rc1+dfsg-0ubuntu1
* New upstream RC - FFE (LP: #537636):
  - Add OfficialDatabaseOnly option to clamav-base.postinst.in
  - Add LocalSocketGroup option to clamav-base.postinst.in
  - Add LocalSocketMode option to clamav-base.postinst.in
  - Add CrossFilesystems option to clamav-base.postinst.in
  - Add ClamukoScannerCount option to clamav-base.postinst.in
  - Add BytecodeSecurity opiton to clamav-base.postinst.in
  - Add DetectionStatsHostID option to clamav-freshclam.postinst.in
  - Add Bytecode option to clamav-freshclam.postinst.in
  - Add MilterSocketGroup option to clamav-milter.postinst.in
  - Add MilterSocketMode option to clamav-milter.postinst.in
  - Add ReportHostname option to clamav-milter.postinst.in
  - Bump libclamav SO version to 6.1.0 in libclamav6.install
  - Drop clamdmon from clamav.examples (no longer shipped by upstream)
  - Drop libclamav.a from libclamav-dev.install (not built by upstream)
  - Update SO version for lintian override for libclamav6
  - Add new Bytecode Testing Tool, usr/bin/clambc, to clamav.install
  - Add build-depends on python and python-setuptools for new test suite
  - Update debian/copyright for the embedded copy of llvm (using the system
    llvm is not currently feasible)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//===-- RegAllocLocal.cpp - A BasicBlock generic register allocator -------===//
 
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 register allocator allocates registers to a basic block at a time,
 
11
// attempting to keep values in registers and reusing registers as appropriate.
 
12
//
 
13
//===----------------------------------------------------------------------===//
 
14
 
 
15
#define DEBUG_TYPE "regalloc"
 
16
#include "llvm/BasicBlock.h"
 
17
#include "llvm/CodeGen/MachineFunctionPass.h"
 
18
#include "llvm/CodeGen/MachineInstr.h"
 
19
#include "llvm/CodeGen/MachineFrameInfo.h"
 
20
#include "llvm/CodeGen/MachineRegisterInfo.h"
 
21
#include "llvm/CodeGen/Passes.h"
 
22
#include "llvm/CodeGen/RegAllocRegistry.h"
 
23
#include "llvm/Target/TargetInstrInfo.h"
 
24
#include "llvm/Target/TargetMachine.h"
 
25
#include "llvm/Support/CommandLine.h"
 
26
#include "llvm/Support/Debug.h"
 
27
#include "llvm/Support/ErrorHandling.h"
 
28
#include "llvm/Support/raw_ostream.h"
 
29
#include "llvm/ADT/DenseMap.h"
 
30
#include "llvm/ADT/IndexedMap.h"
 
31
#include "llvm/ADT/SmallSet.h"
 
32
#include "llvm/ADT/SmallVector.h"
 
33
#include "llvm/ADT/Statistic.h"
 
34
#include "llvm/ADT/STLExtras.h"
 
35
#include <algorithm>
 
36
using namespace llvm;
 
37
 
 
38
STATISTIC(NumStores, "Number of stores added");
 
39
STATISTIC(NumLoads , "Number of loads added");
 
40
 
 
41
static RegisterRegAlloc
 
42
  localRegAlloc("local", "local register allocator",
 
43
                createLocalRegisterAllocator);
 
44
 
 
45
namespace {
 
46
  class RALocal : public MachineFunctionPass {
 
47
  public:
 
48
    static char ID;
 
49
    RALocal() : MachineFunctionPass(&ID), StackSlotForVirtReg(-1) {}
 
50
  private:
 
51
    const TargetMachine *TM;
 
52
    MachineFunction *MF;
 
53
    const TargetRegisterInfo *TRI;
 
54
    const TargetInstrInfo *TII;
 
55
 
 
56
    // StackSlotForVirtReg - Maps virtual regs to the frame index where these
 
57
    // values are spilled.
 
58
    IndexedMap<int, VirtReg2IndexFunctor> StackSlotForVirtReg;
 
59
 
 
60
    // Virt2PhysRegMap - This map contains entries for each virtual register
 
61
    // that is currently available in a physical register.
 
62
    IndexedMap<unsigned, VirtReg2IndexFunctor> Virt2PhysRegMap;
 
63
 
 
64
    unsigned &getVirt2PhysRegMapSlot(unsigned VirtReg) {
 
65
      return Virt2PhysRegMap[VirtReg];
 
66
    }
 
67
 
 
68
    // PhysRegsUsed - This array is effectively a map, containing entries for
 
69
    // each physical register that currently has a value (ie, it is in
 
70
    // Virt2PhysRegMap).  The value mapped to is the virtual register
 
71
    // corresponding to the physical register (the inverse of the
 
72
    // Virt2PhysRegMap), or 0.  The value is set to 0 if this register is pinned
 
73
    // because it is used by a future instruction, and to -2 if it is not
 
74
    // allocatable.  If the entry for a physical register is -1, then the
 
75
    // physical register is "not in the map".
 
76
    //
 
77
    std::vector<int> PhysRegsUsed;
 
78
 
 
79
    // PhysRegsUseOrder - This contains a list of the physical registers that
 
80
    // currently have a virtual register value in them.  This list provides an
 
81
    // ordering of registers, imposing a reallocation order.  This list is only
 
82
    // used if all registers are allocated and we have to spill one, in which
 
83
    // case we spill the least recently used register.  Entries at the front of
 
84
    // the list are the least recently used registers, entries at the back are
 
85
    // the most recently used.
 
86
    //
 
87
    std::vector<unsigned> PhysRegsUseOrder;
 
88
 
 
89
    // Virt2LastUseMap - This maps each virtual register to its last use
 
90
    // (MachineInstr*, operand index pair).
 
91
    IndexedMap<std::pair<MachineInstr*, unsigned>, VirtReg2IndexFunctor>
 
92
    Virt2LastUseMap;
 
93
 
 
94
    std::pair<MachineInstr*,unsigned>& getVirtRegLastUse(unsigned Reg) {
 
95
      assert(TargetRegisterInfo::isVirtualRegister(Reg) && "Illegal VirtReg!");
 
96
      return Virt2LastUseMap[Reg];
 
97
    }
 
98
 
 
99
    // VirtRegModified - This bitset contains information about which virtual
 
100
    // registers need to be spilled back to memory when their registers are
 
101
    // scavenged.  If a virtual register has simply been rematerialized, there
 
102
    // is no reason to spill it to memory when we need the register back.
 
103
    //
 
104
    BitVector VirtRegModified;
 
105
    
 
106
    // UsedInMultipleBlocks - Tracks whether a particular register is used in
 
107
    // more than one block.
 
108
    BitVector UsedInMultipleBlocks;
 
109
 
 
110
    void markVirtRegModified(unsigned Reg, bool Val = true) {
 
111
      assert(TargetRegisterInfo::isVirtualRegister(Reg) && "Illegal VirtReg!");
 
112
      Reg -= TargetRegisterInfo::FirstVirtualRegister;
 
113
      if (Val)
 
114
        VirtRegModified.set(Reg);
 
115
      else
 
116
        VirtRegModified.reset(Reg);
 
117
    }
 
118
 
 
119
    bool isVirtRegModified(unsigned Reg) const {
 
120
      assert(TargetRegisterInfo::isVirtualRegister(Reg) && "Illegal VirtReg!");
 
121
      assert(Reg - TargetRegisterInfo::FirstVirtualRegister < VirtRegModified.size()
 
122
             && "Illegal virtual register!");
 
123
      return VirtRegModified[Reg - TargetRegisterInfo::FirstVirtualRegister];
 
124
    }
 
125
 
 
126
    void AddToPhysRegsUseOrder(unsigned Reg) {
 
127
      std::vector<unsigned>::iterator It =
 
128
        std::find(PhysRegsUseOrder.begin(), PhysRegsUseOrder.end(), Reg);
 
129
      if (It != PhysRegsUseOrder.end())
 
130
        PhysRegsUseOrder.erase(It);
 
131
      PhysRegsUseOrder.push_back(Reg);
 
132
    }
 
133
 
 
134
    void MarkPhysRegRecentlyUsed(unsigned Reg) {
 
135
      if (PhysRegsUseOrder.empty() ||
 
136
          PhysRegsUseOrder.back() == Reg) return;  // Already most recently used
 
137
 
 
138
      for (unsigned i = PhysRegsUseOrder.size(); i != 0; --i)
 
139
        if (areRegsEqual(Reg, PhysRegsUseOrder[i-1])) {
 
140
          unsigned RegMatch = PhysRegsUseOrder[i-1];       // remove from middle
 
141
          PhysRegsUseOrder.erase(PhysRegsUseOrder.begin()+i-1);
 
142
          // Add it to the end of the list
 
143
          PhysRegsUseOrder.push_back(RegMatch);
 
144
          if (RegMatch == Reg)
 
145
            return;    // Found an exact match, exit early
 
146
        }
 
147
    }
 
148
 
 
149
  public:
 
150
    virtual const char *getPassName() const {
 
151
      return "Local Register Allocator";
 
152
    }
 
153
 
 
154
    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
 
155
      AU.setPreservesCFG();
 
156
      AU.addRequiredID(PHIEliminationID);
 
157
      AU.addRequiredID(TwoAddressInstructionPassID);
 
158
      MachineFunctionPass::getAnalysisUsage(AU);
 
159
    }
 
160
 
 
161
  private:
 
162
    /// runOnMachineFunction - Register allocate the whole function
 
163
    bool runOnMachineFunction(MachineFunction &Fn);
 
164
 
 
165
    /// AllocateBasicBlock - Register allocate the specified basic block.
 
166
    void AllocateBasicBlock(MachineBasicBlock &MBB);
 
167
 
 
168
 
 
169
    /// areRegsEqual - This method returns true if the specified registers are
 
170
    /// related to each other.  To do this, it checks to see if they are equal
 
171
    /// or if the first register is in the alias set of the second register.
 
172
    ///
 
173
    bool areRegsEqual(unsigned R1, unsigned R2) const {
 
174
      if (R1 == R2) return true;
 
175
      for (const unsigned *AliasSet = TRI->getAliasSet(R2);
 
176
           *AliasSet; ++AliasSet) {
 
177
        if (*AliasSet == R1) return true;
 
178
      }
 
179
      return false;
 
180
    }
 
181
 
 
182
    /// getStackSpaceFor - This returns the frame index of the specified virtual
 
183
    /// register on the stack, allocating space if necessary.
 
184
    int getStackSpaceFor(unsigned VirtReg, const TargetRegisterClass *RC);
 
185
 
 
186
    /// removePhysReg - This method marks the specified physical register as no
 
187
    /// longer being in use.
 
188
    ///
 
189
    void removePhysReg(unsigned PhysReg);
 
190
 
 
191
    /// spillVirtReg - This method spills the value specified by PhysReg into
 
192
    /// the virtual register slot specified by VirtReg.  It then updates the RA
 
193
    /// data structures to indicate the fact that PhysReg is now available.
 
194
    ///
 
195
    void spillVirtReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI,
 
196
                      unsigned VirtReg, unsigned PhysReg);
 
197
 
 
198
    /// spillPhysReg - This method spills the specified physical register into
 
199
    /// the virtual register slot associated with it.  If OnlyVirtRegs is set to
 
200
    /// true, then the request is ignored if the physical register does not
 
201
    /// contain a virtual register.
 
202
    ///
 
203
    void spillPhysReg(MachineBasicBlock &MBB, MachineInstr *I,
 
204
                      unsigned PhysReg, bool OnlyVirtRegs = false);
 
205
 
 
206
    /// assignVirtToPhysReg - This method updates local state so that we know
 
207
    /// that PhysReg is the proper container for VirtReg now.  The physical
 
208
    /// register must not be used for anything else when this is called.
 
209
    ///
 
210
    void assignVirtToPhysReg(unsigned VirtReg, unsigned PhysReg);
 
211
 
 
212
    /// isPhysRegAvailable - Return true if the specified physical register is
 
213
    /// free and available for use.  This also includes checking to see if
 
214
    /// aliased registers are all free...
 
215
    ///
 
216
    bool isPhysRegAvailable(unsigned PhysReg) const;
 
217
 
 
218
    /// getFreeReg - Look to see if there is a free register available in the
 
219
    /// specified register class.  If not, return 0.
 
220
    ///
 
221
    unsigned getFreeReg(const TargetRegisterClass *RC);
 
222
 
 
223
    /// getReg - Find a physical register to hold the specified virtual
 
224
    /// register.  If all compatible physical registers are used, this method
 
225
    /// spills the last used virtual register to the stack, and uses that
 
226
    /// register. If NoFree is true, that means the caller knows there isn't
 
227
    /// a free register, do not call getFreeReg().
 
228
    unsigned getReg(MachineBasicBlock &MBB, MachineInstr *MI,
 
229
                    unsigned VirtReg, bool NoFree = false);
 
230
 
 
231
    /// reloadVirtReg - This method transforms the specified virtual
 
232
    /// register use to refer to a physical register.  This method may do this
 
233
    /// in one of several ways: if the register is available in a physical
 
234
    /// register already, it uses that physical register.  If the value is not
 
235
    /// in a physical register, and if there are physical registers available,
 
236
    /// it loads it into a register: PhysReg if that is an available physical
 
237
    /// register, otherwise any physical register of the right class.
 
238
    /// If register pressure is high, and it is possible, it tries to fold the
 
239
    /// load of the virtual register into the instruction itself.  It avoids
 
240
    /// doing this if register pressure is low to improve the chance that
 
241
    /// subsequent instructions can use the reloaded value.  This method
 
242
    /// returns the modified instruction.
 
243
    ///
 
244
    MachineInstr *reloadVirtReg(MachineBasicBlock &MBB, MachineInstr *MI,
 
245
                                unsigned OpNum, SmallSet<unsigned, 4> &RRegs,
 
246
                                unsigned PhysReg);
 
247
 
 
248
    /// ComputeLocalLiveness - Computes liveness of registers within a basic
 
249
    /// block, setting the killed/dead flags as appropriate.
 
250
    void ComputeLocalLiveness(MachineBasicBlock& MBB);
 
251
 
 
252
    void reloadPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator &I,
 
253
                       unsigned PhysReg);
 
254
  };
 
255
  char RALocal::ID = 0;
 
256
}
 
257
 
 
258
/// getStackSpaceFor - This allocates space for the specified virtual register
 
259
/// to be held on the stack.
 
260
int RALocal::getStackSpaceFor(unsigned VirtReg, const TargetRegisterClass *RC) {
 
261
  // Find the location Reg would belong...
 
262
  int SS = StackSlotForVirtReg[VirtReg];
 
263
  if (SS != -1)
 
264
    return SS;          // Already has space allocated?
 
265
 
 
266
  // Allocate a new stack object for this spill location...
 
267
  int FrameIdx = MF->getFrameInfo()->CreateSpillStackObject(RC->getSize(),
 
268
                                                            RC->getAlignment());
 
269
 
 
270
  // Assign the slot...
 
271
  StackSlotForVirtReg[VirtReg] = FrameIdx;
 
272
  return FrameIdx;
 
273
}
 
274
 
 
275
 
 
276
/// removePhysReg - This method marks the specified physical register as no
 
277
/// longer being in use.
 
278
///
 
279
void RALocal::removePhysReg(unsigned PhysReg) {
 
280
  PhysRegsUsed[PhysReg] = -1;      // PhyReg no longer used
 
281
 
 
282
  std::vector<unsigned>::iterator It =
 
283
    std::find(PhysRegsUseOrder.begin(), PhysRegsUseOrder.end(), PhysReg);
 
284
  if (It != PhysRegsUseOrder.end())
 
285
    PhysRegsUseOrder.erase(It);
 
286
}
 
287
 
 
288
 
 
289
/// spillVirtReg - This method spills the value specified by PhysReg into the
 
290
/// virtual register slot specified by VirtReg.  It then updates the RA data
 
291
/// structures to indicate the fact that PhysReg is now available.
 
292
///
 
293
void RALocal::spillVirtReg(MachineBasicBlock &MBB,
 
294
                           MachineBasicBlock::iterator I,
 
295
                           unsigned VirtReg, unsigned PhysReg) {
 
296
  assert(VirtReg && "Spilling a physical register is illegal!"
 
297
         " Must not have appropriate kill for the register or use exists beyond"
 
298
         " the intended one.");
 
299
  DEBUG(dbgs() << "  Spilling register " << TRI->getName(PhysReg)
 
300
               << " containing %reg" << VirtReg);
 
301
  
 
302
  if (!isVirtRegModified(VirtReg)) {
 
303
    DEBUG(dbgs() << " which has not been modified, so no store necessary!");
 
304
    std::pair<MachineInstr*, unsigned> &LastUse = getVirtRegLastUse(VirtReg);
 
305
    if (LastUse.first)
 
306
      LastUse.first->getOperand(LastUse.second).setIsKill();
 
307
  } else {
 
308
    // Otherwise, there is a virtual register corresponding to this physical
 
309
    // register.  We only need to spill it into its stack slot if it has been
 
310
    // modified.
 
311
    const TargetRegisterClass *RC = MF->getRegInfo().getRegClass(VirtReg);
 
312
    int FrameIndex = getStackSpaceFor(VirtReg, RC);
 
313
    DEBUG(dbgs() << " to stack slot #" << FrameIndex);
 
314
    // If the instruction reads the register that's spilled, (e.g. this can
 
315
    // happen if it is a move to a physical register), then the spill
 
316
    // instruction is not a kill.
 
317
    bool isKill = !(I != MBB.end() && I->readsRegister(PhysReg));
 
318
    TII->storeRegToStackSlot(MBB, I, PhysReg, isKill, FrameIndex, RC);
 
319
    ++NumStores;   // Update statistics
 
320
  }
 
321
 
 
322
  getVirt2PhysRegMapSlot(VirtReg) = 0;   // VirtReg no longer available
 
323
 
 
324
  DEBUG(dbgs() << '\n');
 
325
  removePhysReg(PhysReg);
 
326
}
 
327
 
 
328
 
 
329
/// spillPhysReg - This method spills the specified physical register into the
 
330
/// virtual register slot associated with it.  If OnlyVirtRegs is set to true,
 
331
/// then the request is ignored if the physical register does not contain a
 
332
/// virtual register.
 
333
///
 
334
void RALocal::spillPhysReg(MachineBasicBlock &MBB, MachineInstr *I,
 
335
                           unsigned PhysReg, bool OnlyVirtRegs) {
 
336
  if (PhysRegsUsed[PhysReg] != -1) {            // Only spill it if it's used!
 
337
    assert(PhysRegsUsed[PhysReg] != -2 && "Non allocable reg used!");
 
338
    if (PhysRegsUsed[PhysReg] || !OnlyVirtRegs)
 
339
      spillVirtReg(MBB, I, PhysRegsUsed[PhysReg], PhysReg);
 
340
  } else {
 
341
    // If the selected register aliases any other registers, we must make
 
342
    // sure that one of the aliases isn't alive.
 
343
    for (const unsigned *AliasSet = TRI->getAliasSet(PhysReg);
 
344
         *AliasSet; ++AliasSet)
 
345
      if (PhysRegsUsed[*AliasSet] != -1 &&     // Spill aliased register.
 
346
          PhysRegsUsed[*AliasSet] != -2)       // If allocatable.
 
347
          if (PhysRegsUsed[*AliasSet])
 
348
            spillVirtReg(MBB, I, PhysRegsUsed[*AliasSet], *AliasSet);
 
349
  }
 
350
}
 
351
 
 
352
 
 
353
/// assignVirtToPhysReg - This method updates local state so that we know
 
354
/// that PhysReg is the proper container for VirtReg now.  The physical
 
355
/// register must not be used for anything else when this is called.
 
356
///
 
357
void RALocal::assignVirtToPhysReg(unsigned VirtReg, unsigned PhysReg) {
 
358
  assert(PhysRegsUsed[PhysReg] == -1 && "Phys reg already assigned!");
 
359
  // Update information to note the fact that this register was just used, and
 
360
  // it holds VirtReg.
 
361
  PhysRegsUsed[PhysReg] = VirtReg;
 
362
  getVirt2PhysRegMapSlot(VirtReg) = PhysReg;
 
363
  AddToPhysRegsUseOrder(PhysReg);   // New use of PhysReg
 
364
}
 
365
 
 
366
 
 
367
/// isPhysRegAvailable - Return true if the specified physical register is free
 
368
/// and available for use.  This also includes checking to see if aliased
 
369
/// registers are all free...
 
370
///
 
371
bool RALocal::isPhysRegAvailable(unsigned PhysReg) const {
 
372
  if (PhysRegsUsed[PhysReg] != -1) return false;
 
373
 
 
374
  // If the selected register aliases any other allocated registers, it is
 
375
  // not free!
 
376
  for (const unsigned *AliasSet = TRI->getAliasSet(PhysReg);
 
377
       *AliasSet; ++AliasSet)
 
378
    if (PhysRegsUsed[*AliasSet] >= 0) // Aliased register in use?
 
379
      return false;                    // Can't use this reg then.
 
380
  return true;
 
381
}
 
382
 
 
383
 
 
384
/// getFreeReg - Look to see if there is a free register available in the
 
385
/// specified register class.  If not, return 0.
 
386
///
 
387
unsigned RALocal::getFreeReg(const TargetRegisterClass *RC) {
 
388
  // Get iterators defining the range of registers that are valid to allocate in
 
389
  // this class, which also specifies the preferred allocation order.
 
390
  TargetRegisterClass::iterator RI = RC->allocation_order_begin(*MF);
 
391
  TargetRegisterClass::iterator RE = RC->allocation_order_end(*MF);
 
392
 
 
393
  for (; RI != RE; ++RI)
 
394
    if (isPhysRegAvailable(*RI)) {       // Is reg unused?
 
395
      assert(*RI != 0 && "Cannot use register!");
 
396
      return *RI; // Found an unused register!
 
397
    }
 
398
  return 0;
 
399
}
 
400
 
 
401
 
 
402
/// getReg - Find a physical register to hold the specified virtual
 
403
/// register.  If all compatible physical registers are used, this method spills
 
404
/// the last used virtual register to the stack, and uses that register.
 
405
///
 
406
unsigned RALocal::getReg(MachineBasicBlock &MBB, MachineInstr *I,
 
407
                         unsigned VirtReg, bool NoFree) {
 
408
  const TargetRegisterClass *RC = MF->getRegInfo().getRegClass(VirtReg);
 
409
 
 
410
  // First check to see if we have a free register of the requested type...
 
411
  unsigned PhysReg = NoFree ? 0 : getFreeReg(RC);
 
412
 
 
413
  // If we didn't find an unused register, scavenge one now!
 
414
  if (PhysReg == 0) {
 
415
    assert(!PhysRegsUseOrder.empty() && "No allocated registers??");
 
416
 
 
417
    // Loop over all of the preallocated registers from the least recently used
 
418
    // to the most recently used.  When we find one that is capable of holding
 
419
    // our register, use it.
 
420
    for (unsigned i = 0; PhysReg == 0; ++i) {
 
421
      assert(i != PhysRegsUseOrder.size() &&
 
422
             "Couldn't find a register of the appropriate class!");
 
423
 
 
424
      unsigned R = PhysRegsUseOrder[i];
 
425
 
 
426
      // We can only use this register if it holds a virtual register (ie, it
 
427
      // can be spilled).  Do not use it if it is an explicitly allocated
 
428
      // physical register!
 
429
      assert(PhysRegsUsed[R] != -1 &&
 
430
             "PhysReg in PhysRegsUseOrder, but is not allocated?");
 
431
      if (PhysRegsUsed[R] && PhysRegsUsed[R] != -2) {
 
432
        // If the current register is compatible, use it.
 
433
        if (RC->contains(R)) {
 
434
          PhysReg = R;
 
435
          break;
 
436
        } else {
 
437
          // If one of the registers aliased to the current register is
 
438
          // compatible, use it.
 
439
          for (const unsigned *AliasIt = TRI->getAliasSet(R);
 
440
               *AliasIt; ++AliasIt) {
 
441
            if (RC->contains(*AliasIt) &&
 
442
                // If this is pinned down for some reason, don't use it.  For
 
443
                // example, if CL is pinned, and we run across CH, don't use
 
444
                // CH as justification for using scavenging ECX (which will
 
445
                // fail).
 
446
                PhysRegsUsed[*AliasIt] != 0 &&
 
447
                
 
448
                // Make sure the register is allocatable.  Don't allocate SIL on
 
449
                // x86-32.
 
450
                PhysRegsUsed[*AliasIt] != -2) {
 
451
              PhysReg = *AliasIt;    // Take an aliased register
 
452
              break;
 
453
            }
 
454
          }
 
455
        }
 
456
      }
 
457
    }
 
458
 
 
459
    assert(PhysReg && "Physical register not assigned!?!?");
 
460
 
 
461
    // At this point PhysRegsUseOrder[i] is the least recently used register of
 
462
    // compatible register class.  Spill it to memory and reap its remains.
 
463
    spillPhysReg(MBB, I, PhysReg);
 
464
  }
 
465
 
 
466
  // Now that we know which register we need to assign this to, do it now!
 
467
  assignVirtToPhysReg(VirtReg, PhysReg);
 
468
  return PhysReg;
 
469
}
 
470
 
 
471
 
 
472
/// reloadVirtReg - This method transforms the specified virtual
 
473
/// register use to refer to a physical register.  This method may do this in
 
474
/// one of several ways: if the register is available in a physical register
 
475
/// already, it uses that physical register.  If the value is not in a physical
 
476
/// register, and if there are physical registers available, it loads it into a
 
477
/// register: PhysReg if that is an available physical register, otherwise any
 
478
/// register.  If register pressure is high, and it is possible, it tries to
 
479
/// fold the load of the virtual register into the instruction itself.  It
 
480
/// avoids doing this if register pressure is low to improve the chance that
 
481
/// subsequent instructions can use the reloaded value.  This method returns
 
482
/// the modified instruction.
 
483
///
 
484
MachineInstr *RALocal::reloadVirtReg(MachineBasicBlock &MBB, MachineInstr *MI,
 
485
                                     unsigned OpNum,
 
486
                                     SmallSet<unsigned, 4> &ReloadedRegs,
 
487
                                     unsigned PhysReg) {
 
488
  unsigned VirtReg = MI->getOperand(OpNum).getReg();
 
489
 
 
490
  // If the virtual register is already available, just update the instruction
 
491
  // and return.
 
492
  if (unsigned PR = getVirt2PhysRegMapSlot(VirtReg)) {
 
493
    MI->getOperand(OpNum).setReg(PR);  // Assign the input register
 
494
    if (!MI->isDebugValue()) {
 
495
      // Do not do these for DBG_VALUE as they can affect codegen.
 
496
      MarkPhysRegRecentlyUsed(PR);       // Already have this value available!
 
497
      getVirtRegLastUse(VirtReg) = std::make_pair(MI, OpNum);
 
498
    }
 
499
    return MI;
 
500
  }
 
501
 
 
502
  // Otherwise, we need to fold it into the current instruction, or reload it.
 
503
  // If we have registers available to hold the value, use them.
 
504
  const TargetRegisterClass *RC = MF->getRegInfo().getRegClass(VirtReg);
 
505
  // If we already have a PhysReg (this happens when the instruction is a
 
506
  // reg-to-reg copy with a PhysReg destination) use that.
 
507
  if (!PhysReg || !TargetRegisterInfo::isPhysicalRegister(PhysReg) ||
 
508
      !isPhysRegAvailable(PhysReg))
 
509
    PhysReg = getFreeReg(RC);
 
510
  int FrameIndex = getStackSpaceFor(VirtReg, RC);
 
511
 
 
512
  if (PhysReg) {   // Register is available, allocate it!
 
513
    assignVirtToPhysReg(VirtReg, PhysReg);
 
514
  } else {         // No registers available.
 
515
    // Force some poor hapless value out of the register file to
 
516
    // make room for the new register, and reload it.
 
517
    PhysReg = getReg(MBB, MI, VirtReg, true);
 
518
  }
 
519
 
 
520
  markVirtRegModified(VirtReg, false);   // Note that this reg was just reloaded
 
521
 
 
522
  DEBUG(dbgs() << "  Reloading %reg" << VirtReg << " into "
 
523
               << TRI->getName(PhysReg) << "\n");
 
524
 
 
525
  // Add move instruction(s)
 
526
  TII->loadRegFromStackSlot(MBB, MI, PhysReg, FrameIndex, RC);
 
527
  ++NumLoads;    // Update statistics
 
528
 
 
529
  MF->getRegInfo().setPhysRegUsed(PhysReg);
 
530
  MI->getOperand(OpNum).setReg(PhysReg);  // Assign the input register
 
531
  getVirtRegLastUse(VirtReg) = std::make_pair(MI, OpNum);
 
532
 
 
533
  if (!ReloadedRegs.insert(PhysReg)) {
 
534
    std::string msg;
 
535
    raw_string_ostream Msg(msg);
 
536
    Msg << "Ran out of registers during register allocation!";
 
537
    if (MI->isInlineAsm()) {
 
538
      Msg << "\nPlease check your inline asm statement for invalid "
 
539
           << "constraints:\n";
 
540
      MI->print(Msg, TM);
 
541
    }
 
542
    llvm_report_error(Msg.str());
 
543
  }
 
544
  for (const unsigned *SubRegs = TRI->getSubRegisters(PhysReg);
 
545
       *SubRegs; ++SubRegs) {
 
546
    if (!ReloadedRegs.insert(*SubRegs)) {
 
547
      std::string msg;
 
548
      raw_string_ostream Msg(msg);
 
549
      Msg << "Ran out of registers during register allocation!";
 
550
      if (MI->isInlineAsm()) {
 
551
        Msg << "\nPlease check your inline asm statement for invalid "
 
552
             << "constraints:\n";
 
553
        MI->print(Msg, TM);
 
554
      }
 
555
      llvm_report_error(Msg.str());
 
556
    }
 
557
  }
 
558
 
 
559
  return MI;
 
560
}
 
561
 
 
562
/// isReadModWriteImplicitKill - True if this is an implicit kill for a
 
563
/// read/mod/write register, i.e. update partial register.
 
564
static bool isReadModWriteImplicitKill(MachineInstr *MI, unsigned Reg) {
 
565
  for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
 
566
    MachineOperand& MO = MI->getOperand(i);
 
567
    if (MO.isReg() && MO.getReg() == Reg && MO.isImplicit() &&
 
568
        MO.isDef() && !MO.isDead())
 
569
      return true;
 
570
  }
 
571
  return false;
 
572
}
 
573
 
 
574
/// isReadModWriteImplicitDef - True if this is an implicit def for a
 
575
/// read/mod/write register, i.e. update partial register.
 
576
static bool isReadModWriteImplicitDef(MachineInstr *MI, unsigned Reg) {
 
577
  for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
 
578
    MachineOperand& MO = MI->getOperand(i);
 
579
    if (MO.isReg() && MO.getReg() == Reg && MO.isImplicit() &&
 
580
        !MO.isDef() && MO.isKill())
 
581
      return true;
 
582
  }
 
583
  return false;
 
584
}
 
585
 
 
586
// precedes - Helper function to determine with MachineInstr A
 
587
// precedes MachineInstr B within the same MBB.
 
588
static bool precedes(MachineBasicBlock::iterator A,
 
589
                     MachineBasicBlock::iterator B) {
 
590
  if (A == B)
 
591
    return false;
 
592
  
 
593
  MachineBasicBlock::iterator I = A->getParent()->begin();
 
594
  while (I != A->getParent()->end()) {
 
595
    if (I == A)
 
596
      return true;
 
597
    else if (I == B)
 
598
      return false;
 
599
    
 
600
    ++I;
 
601
  }
 
602
  
 
603
  return false;
 
604
}
 
605
 
 
606
/// ComputeLocalLiveness - Computes liveness of registers within a basic
 
607
/// block, setting the killed/dead flags as appropriate.
 
608
void RALocal::ComputeLocalLiveness(MachineBasicBlock& MBB) {
 
609
  MachineRegisterInfo& MRI = MBB.getParent()->getRegInfo();
 
610
  // Keep track of the most recently seen previous use or def of each reg, 
 
611
  // so that we can update them with dead/kill markers.
 
612
  DenseMap<unsigned, std::pair<MachineInstr*, unsigned> > LastUseDef;
 
613
  for (MachineBasicBlock::iterator I = MBB.begin(), E = MBB.end();
 
614
       I != E; ++I) {
 
615
    if (I->isDebugValue())
 
616
      continue;
 
617
    for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) {
 
618
      MachineOperand& MO = I->getOperand(i);
 
619
      // Uses don't trigger any flags, but we need to save
 
620
      // them for later.  Also, we have to process these
 
621
      // _before_ processing the defs, since an instr
 
622
      // uses regs before it defs them.
 
623
      if (MO.isReg() && MO.getReg() && MO.isUse()) {
 
624
        LastUseDef[MO.getReg()] = std::make_pair(I, i);
 
625
        
 
626
        
 
627
        if (TargetRegisterInfo::isVirtualRegister(MO.getReg())) continue;
 
628
        
 
629
        const unsigned* Aliases = TRI->getAliasSet(MO.getReg());
 
630
        if (Aliases) {
 
631
          while (*Aliases) {
 
632
            DenseMap<unsigned, std::pair<MachineInstr*, unsigned> >::iterator
 
633
              alias = LastUseDef.find(*Aliases);
 
634
            
 
635
            if (alias != LastUseDef.end() && alias->second.first != I)
 
636
              LastUseDef[*Aliases] = std::make_pair(I, i);
 
637
            
 
638
            ++Aliases;
 
639
          }
 
640
        }
 
641
      }
 
642
    }
 
643
    
 
644
    for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) {
 
645
      MachineOperand& MO = I->getOperand(i);
 
646
      // Defs others than 2-addr redefs _do_ trigger flag changes:
 
647
      //   - A def followed by a def is dead
 
648
      //   - A use followed by a def is a kill
 
649
      if (MO.isReg() && MO.getReg() && MO.isDef()) {
 
650
        DenseMap<unsigned, std::pair<MachineInstr*, unsigned> >::iterator
 
651
          last = LastUseDef.find(MO.getReg());
 
652
        if (last != LastUseDef.end()) {
 
653
          // Check if this is a two address instruction.  If so, then
 
654
          // the def does not kill the use.
 
655
          if (last->second.first == I &&
 
656
              I->isRegTiedToUseOperand(i))
 
657
            continue;
 
658
          
 
659
          MachineOperand& lastUD =
 
660
                      last->second.first->getOperand(last->second.second);
 
661
          if (lastUD.isDef())
 
662
            lastUD.setIsDead(true);
 
663
          else
 
664
            lastUD.setIsKill(true);
 
665
        }
 
666
        
 
667
        LastUseDef[MO.getReg()] = std::make_pair(I, i);
 
668
      }
 
669
    }
 
670
  }
 
671
  
 
672
  // Live-out (of the function) registers contain return values of the function,
 
673
  // so we need to make sure they are alive at return time.
 
674
  if (!MBB.empty() && MBB.back().getDesc().isReturn()) {
 
675
    MachineInstr* Ret = &MBB.back();
 
676
    for (MachineRegisterInfo::liveout_iterator
 
677
         I = MF->getRegInfo().liveout_begin(),
 
678
         E = MF->getRegInfo().liveout_end(); I != E; ++I)
 
679
      if (!Ret->readsRegister(*I)) {
 
680
        Ret->addOperand(MachineOperand::CreateReg(*I, false, true));
 
681
        LastUseDef[*I] = std::make_pair(Ret, Ret->getNumOperands()-1);
 
682
      }
 
683
  }
 
684
  
 
685
  // Finally, loop over the final use/def of each reg 
 
686
  // in the block and determine if it is dead.
 
687
  for (DenseMap<unsigned, std::pair<MachineInstr*, unsigned> >::iterator
 
688
       I = LastUseDef.begin(), E = LastUseDef.end(); I != E; ++I) {
 
689
    MachineInstr* MI = I->second.first;
 
690
    unsigned idx = I->second.second;
 
691
    MachineOperand& MO = MI->getOperand(idx);
 
692
    
 
693
    bool isPhysReg = TargetRegisterInfo::isPhysicalRegister(MO.getReg());
 
694
    
 
695
    // A crude approximation of "live-out" calculation
 
696
    bool usedOutsideBlock = isPhysReg ? false :   
 
697
          UsedInMultipleBlocks.test(MO.getReg() -  
 
698
                                    TargetRegisterInfo::FirstVirtualRegister);
 
699
    if (!isPhysReg && !usedOutsideBlock) {
 
700
      // DBG_VALUE complicates this:  if the only refs of a register outside
 
701
      // this block are DBG_VALUE, we can't keep the reg live just for that,
 
702
      // as it will cause the reg to be spilled at the end of this block when
 
703
      // it wouldn't have been otherwise.  Nullify the DBG_VALUEs when that
 
704
      // happens.
 
705
      bool UsedByDebugValueOnly = false;
 
706
      for (MachineRegisterInfo::reg_iterator UI = MRI.reg_begin(MO.getReg()),
 
707
           UE = MRI.reg_end(); UI != UE; ++UI)
 
708
        // Two cases:
 
709
        // - used in another block
 
710
        // - used in the same block before it is defined (loop)
 
711
        if (UI->getParent() != &MBB ||
 
712
            (MO.isDef() && UI.getOperand().isUse() && precedes(&*UI, MI))) {
 
713
          if (UI->isDebugValue()) {
 
714
            UsedByDebugValueOnly = true;
 
715
            continue;
 
716
          }
 
717
          // A non-DBG_VALUE use means we can leave DBG_VALUE uses alone.
 
718
          UsedInMultipleBlocks.set(MO.getReg() - 
 
719
                                   TargetRegisterInfo::FirstVirtualRegister);
 
720
          usedOutsideBlock = true;
 
721
          UsedByDebugValueOnly = false;
 
722
          break;
 
723
        }
 
724
      if (UsedByDebugValueOnly)
 
725
        for (MachineRegisterInfo::reg_iterator UI = MRI.reg_begin(MO.getReg()),
 
726
             UE = MRI.reg_end(); UI != UE; ++UI)
 
727
          if (UI->isDebugValue() &&
 
728
              (UI->getParent() != &MBB ||
 
729
               (MO.isDef() && precedes(&*UI, MI))))
 
730
            UI.getOperand().setReg(0U);
 
731
    }
 
732
  
 
733
    // Physical registers and those that are not live-out of the block
 
734
    // are killed/dead at their last use/def within this block.
 
735
    if (isPhysReg || !usedOutsideBlock) {
 
736
      if (MO.isUse()) {
 
737
        // Don't mark uses that are tied to defs as kills.
 
738
        if (!MI->isRegTiedToDefOperand(idx))
 
739
          MO.setIsKill(true);
 
740
      } else
 
741
        MO.setIsDead(true);
 
742
    }
 
743
  }
 
744
}
 
745
 
 
746
void RALocal::AllocateBasicBlock(MachineBasicBlock &MBB) {
 
747
  // loop over each instruction
 
748
  MachineBasicBlock::iterator MII = MBB.begin();
 
749
  
 
750
  DEBUG({
 
751
      const BasicBlock *LBB = MBB.getBasicBlock();
 
752
      if (LBB)
 
753
        dbgs() << "\nStarting RegAlloc of BB: " << LBB->getName();
 
754
    });
 
755
 
 
756
  // Add live-in registers as active.
 
757
  for (MachineBasicBlock::livein_iterator I = MBB.livein_begin(),
 
758
         E = MBB.livein_end(); I != E; ++I) {
 
759
    unsigned Reg = *I;
 
760
    MF->getRegInfo().setPhysRegUsed(Reg);
 
761
    PhysRegsUsed[Reg] = 0;            // It is free and reserved now
 
762
    AddToPhysRegsUseOrder(Reg); 
 
763
    for (const unsigned *SubRegs = TRI->getSubRegisters(Reg);
 
764
         *SubRegs; ++SubRegs) {
 
765
      if (PhysRegsUsed[*SubRegs] != -2) {
 
766
        AddToPhysRegsUseOrder(*SubRegs); 
 
767
        PhysRegsUsed[*SubRegs] = 0;  // It is free and reserved now
 
768
        MF->getRegInfo().setPhysRegUsed(*SubRegs);
 
769
      }
 
770
    }
 
771
  }
 
772
  
 
773
  ComputeLocalLiveness(MBB);
 
774
  
 
775
  // Otherwise, sequentially allocate each instruction in the MBB.
 
776
  while (MII != MBB.end()) {
 
777
    MachineInstr *MI = MII++;
 
778
    const TargetInstrDesc &TID = MI->getDesc();
 
779
    DEBUG({
 
780
        dbgs() << "\nStarting RegAlloc of: " << *MI;
 
781
        dbgs() << "  Regs have values: ";
 
782
        for (unsigned i = 0; i != TRI->getNumRegs(); ++i)
 
783
          if (PhysRegsUsed[i] != -1 && PhysRegsUsed[i] != -2)
 
784
            dbgs() << "[" << TRI->getName(i)
 
785
                   << ",%reg" << PhysRegsUsed[i] << "] ";
 
786
        dbgs() << '\n';
 
787
      });
 
788
 
 
789
    // Determine whether this is a copy instruction.  The cases where the
 
790
    // source or destination are phys regs are handled specially.
 
791
    unsigned SrcCopyReg, DstCopyReg, SrcCopySubReg, DstCopySubReg;
 
792
    unsigned SrcCopyPhysReg = 0U;
 
793
    bool isCopy = TII->isMoveInstr(*MI, SrcCopyReg, DstCopyReg, 
 
794
                                   SrcCopySubReg, DstCopySubReg);
 
795
    if (isCopy && TargetRegisterInfo::isVirtualRegister(SrcCopyReg))
 
796
      SrcCopyPhysReg = getVirt2PhysRegMapSlot(SrcCopyReg);
 
797
 
 
798
    // Loop over the implicit uses, making sure that they are at the head of the
 
799
    // use order list, so they don't get reallocated.
 
800
    if (TID.ImplicitUses) {
 
801
      for (const unsigned *ImplicitUses = TID.ImplicitUses;
 
802
           *ImplicitUses; ++ImplicitUses)
 
803
        MarkPhysRegRecentlyUsed(*ImplicitUses);
 
804
    }
 
805
 
 
806
    SmallVector<unsigned, 8> Kills;
 
807
    for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
 
808
      MachineOperand& MO = MI->getOperand(i);
 
809
      if (MO.isReg() && MO.isKill()) {
 
810
        if (!MO.isImplicit())
 
811
          Kills.push_back(MO.getReg());
 
812
        else if (!isReadModWriteImplicitKill(MI, MO.getReg()))
 
813
          // These are extra physical register kills when a sub-register
 
814
          // is defined (def of a sub-register is a read/mod/write of the
 
815
          // larger registers). Ignore.
 
816
          Kills.push_back(MO.getReg());
 
817
      }
 
818
    }
 
819
 
 
820
    // If any physical regs are earlyclobber, spill any value they might
 
821
    // have in them, then mark them unallocatable.
 
822
    // If any virtual regs are earlyclobber, allocate them now (before
 
823
    // freeing inputs that are killed).
 
824
    if (MI->isInlineAsm()) {
 
825
      for (unsigned i = 0; i != MI->getNumOperands(); ++i) {
 
826
        MachineOperand& MO = MI->getOperand(i);
 
827
        if (MO.isReg() && MO.isDef() && MO.isEarlyClobber() &&
 
828
            MO.getReg()) {
 
829
          if (TargetRegisterInfo::isVirtualRegister(MO.getReg())) {
 
830
            unsigned DestVirtReg = MO.getReg();
 
831
            unsigned DestPhysReg;
 
832
 
 
833
            // If DestVirtReg already has a value, use it.
 
834
            if (!(DestPhysReg = getVirt2PhysRegMapSlot(DestVirtReg)))
 
835
              DestPhysReg = getReg(MBB, MI, DestVirtReg);
 
836
            MF->getRegInfo().setPhysRegUsed(DestPhysReg);
 
837
            markVirtRegModified(DestVirtReg);
 
838
            getVirtRegLastUse(DestVirtReg) =
 
839
                   std::make_pair((MachineInstr*)0, 0);
 
840
            DEBUG(dbgs() << "  Assigning " << TRI->getName(DestPhysReg)
 
841
                         << " to %reg" << DestVirtReg << "\n");
 
842
            MO.setReg(DestPhysReg);  // Assign the earlyclobber register
 
843
          } else {
 
844
            unsigned Reg = MO.getReg();
 
845
            if (PhysRegsUsed[Reg] == -2) continue;  // Something like ESP.
 
846
            // These are extra physical register defs when a sub-register
 
847
            // is defined (def of a sub-register is a read/mod/write of the
 
848
            // larger registers). Ignore.
 
849
            if (isReadModWriteImplicitDef(MI, MO.getReg())) continue;
 
850
 
 
851
            MF->getRegInfo().setPhysRegUsed(Reg);
 
852
            spillPhysReg(MBB, MI, Reg, true); // Spill any existing value in reg
 
853
            PhysRegsUsed[Reg] = 0;            // It is free and reserved now
 
854
            AddToPhysRegsUseOrder(Reg); 
 
855
 
 
856
            for (const unsigned *SubRegs = TRI->getSubRegisters(Reg);
 
857
                 *SubRegs; ++SubRegs) {
 
858
              if (PhysRegsUsed[*SubRegs] != -2) {
 
859
                MF->getRegInfo().setPhysRegUsed(*SubRegs);
 
860
                PhysRegsUsed[*SubRegs] = 0;  // It is free and reserved now
 
861
                AddToPhysRegsUseOrder(*SubRegs); 
 
862
              }
 
863
            }
 
864
          }
 
865
        }
 
866
      }
 
867
    }
 
868
 
 
869
    // If a DBG_VALUE says something is located in a spilled register,
 
870
    // change the DBG_VALUE to be undef, which prevents the register
 
871
    // from being reloaded here.  Doing that would change the generated
 
872
    // code, unless another use immediately follows this instruction.
 
873
    if (MI->isDebugValue() &&
 
874
        MI->getNumOperands()==3 && MI->getOperand(0).isReg()) {
 
875
      unsigned VirtReg = MI->getOperand(0).getReg();
 
876
      if (VirtReg && TargetRegisterInfo::isVirtualRegister(VirtReg) &&
 
877
          !getVirt2PhysRegMapSlot(VirtReg))
 
878
        MI->getOperand(0).setReg(0U);
 
879
    }
 
880
 
 
881
    // Get the used operands into registers.  This has the potential to spill
 
882
    // incoming values if we are out of registers.  Note that we completely
 
883
    // ignore physical register uses here.  We assume that if an explicit
 
884
    // physical register is referenced by the instruction, that it is guaranteed
 
885
    // to be live-in, or the input is badly hosed.
 
886
    //
 
887
    SmallSet<unsigned, 4> ReloadedRegs;
 
888
    for (unsigned i = 0; i != MI->getNumOperands(); ++i) {
 
889
      MachineOperand& MO = MI->getOperand(i);
 
890
      // here we are looking for only used operands (never def&use)
 
891
      if (MO.isReg() && !MO.isDef() && MO.getReg() && !MO.isImplicit() &&
 
892
          TargetRegisterInfo::isVirtualRegister(MO.getReg()))
 
893
        MI = reloadVirtReg(MBB, MI, i, ReloadedRegs,
 
894
                           isCopy ? DstCopyReg : 0);
 
895
    }
 
896
 
 
897
    // If this instruction is the last user of this register, kill the
 
898
    // value, freeing the register being used, so it doesn't need to be
 
899
    // spilled to memory.
 
900
    //
 
901
    for (unsigned i = 0, e = Kills.size(); i != e; ++i) {
 
902
      unsigned VirtReg = Kills[i];
 
903
      unsigned PhysReg = VirtReg;
 
904
      if (TargetRegisterInfo::isVirtualRegister(VirtReg)) {
 
905
        // If the virtual register was never materialized into a register, it
 
906
        // might not be in the map, but it won't hurt to zero it out anyway.
 
907
        unsigned &PhysRegSlot = getVirt2PhysRegMapSlot(VirtReg);
 
908
        PhysReg = PhysRegSlot;
 
909
        PhysRegSlot = 0;
 
910
      } else if (PhysRegsUsed[PhysReg] == -2) {
 
911
        // Unallocatable register dead, ignore.
 
912
        continue;
 
913
      } else {
 
914
        assert((!PhysRegsUsed[PhysReg] || PhysRegsUsed[PhysReg] == -1) &&
 
915
               "Silently clearing a virtual register?");
 
916
      }
 
917
 
 
918
      if (PhysReg) {
 
919
        DEBUG(dbgs() << "  Last use of " << TRI->getName(PhysReg)
 
920
                     << "[%reg" << VirtReg <<"], removing it from live set\n");
 
921
        removePhysReg(PhysReg);
 
922
        for (const unsigned *SubRegs = TRI->getSubRegisters(PhysReg);
 
923
             *SubRegs; ++SubRegs) {
 
924
          if (PhysRegsUsed[*SubRegs] != -2) {
 
925
            DEBUG(dbgs()  << "  Last use of "
 
926
                          << TRI->getName(*SubRegs) << "[%reg" << VirtReg
 
927
                          <<"], removing it from live set\n");
 
928
            removePhysReg(*SubRegs);
 
929
          }
 
930
        }
 
931
      }
 
932
    }
 
933
 
 
934
    // Loop over all of the operands of the instruction, spilling registers that
 
935
    // are defined, and marking explicit destinations in the PhysRegsUsed map.
 
936
    for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
 
937
      MachineOperand& MO = MI->getOperand(i);
 
938
      if (MO.isReg() && MO.isDef() && !MO.isImplicit() && MO.getReg() &&
 
939
          !MO.isEarlyClobber() &&
 
940
          TargetRegisterInfo::isPhysicalRegister(MO.getReg())) {
 
941
        unsigned Reg = MO.getReg();
 
942
        if (PhysRegsUsed[Reg] == -2) continue;  // Something like ESP.
 
943
        // These are extra physical register defs when a sub-register
 
944
        // is defined (def of a sub-register is a read/mod/write of the
 
945
        // larger registers). Ignore.
 
946
        if (isReadModWriteImplicitDef(MI, MO.getReg())) continue;
 
947
 
 
948
        MF->getRegInfo().setPhysRegUsed(Reg);
 
949
        spillPhysReg(MBB, MI, Reg, true); // Spill any existing value in reg
 
950
        PhysRegsUsed[Reg] = 0;            // It is free and reserved now
 
951
        AddToPhysRegsUseOrder(Reg); 
 
952
 
 
953
        for (const unsigned *SubRegs = TRI->getSubRegisters(Reg);
 
954
             *SubRegs; ++SubRegs) {
 
955
          if (PhysRegsUsed[*SubRegs] != -2) {
 
956
            MF->getRegInfo().setPhysRegUsed(*SubRegs);
 
957
            PhysRegsUsed[*SubRegs] = 0;  // It is free and reserved now
 
958
            AddToPhysRegsUseOrder(*SubRegs); 
 
959
          }
 
960
        }
 
961
      }
 
962
    }
 
963
 
 
964
    // Loop over the implicit defs, spilling them as well.
 
965
    if (TID.ImplicitDefs) {
 
966
      for (const unsigned *ImplicitDefs = TID.ImplicitDefs;
 
967
           *ImplicitDefs; ++ImplicitDefs) {
 
968
        unsigned Reg = *ImplicitDefs;
 
969
        if (PhysRegsUsed[Reg] != -2) {
 
970
          spillPhysReg(MBB, MI, Reg, true);
 
971
          AddToPhysRegsUseOrder(Reg); 
 
972
          PhysRegsUsed[Reg] = 0;            // It is free and reserved now
 
973
        }
 
974
        MF->getRegInfo().setPhysRegUsed(Reg);
 
975
        for (const unsigned *SubRegs = TRI->getSubRegisters(Reg);
 
976
             *SubRegs; ++SubRegs) {
 
977
          if (PhysRegsUsed[*SubRegs] != -2) {
 
978
            AddToPhysRegsUseOrder(*SubRegs); 
 
979
            PhysRegsUsed[*SubRegs] = 0;  // It is free and reserved now
 
980
            MF->getRegInfo().setPhysRegUsed(*SubRegs);
 
981
          }
 
982
        }
 
983
      }
 
984
    }
 
985
 
 
986
    SmallVector<unsigned, 8> DeadDefs;
 
987
    for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
 
988
      MachineOperand& MO = MI->getOperand(i);
 
989
      if (MO.isReg() && MO.isDead())
 
990
        DeadDefs.push_back(MO.getReg());
 
991
    }
 
992
 
 
993
    // Okay, we have allocated all of the source operands and spilled any values
 
994
    // that would be destroyed by defs of this instruction.  Loop over the
 
995
    // explicit defs and assign them to a register, spilling incoming values if
 
996
    // we need to scavenge a register.
 
997
    //
 
998
    for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
 
999
      MachineOperand& MO = MI->getOperand(i);
 
1000
      if (MO.isReg() && MO.isDef() && MO.getReg() &&
 
1001
          !MO.isEarlyClobber() &&
 
1002
          TargetRegisterInfo::isVirtualRegister(MO.getReg())) {
 
1003
        unsigned DestVirtReg = MO.getReg();
 
1004
        unsigned DestPhysReg;
 
1005
 
 
1006
        // If DestVirtReg already has a value, use it.
 
1007
        if (!(DestPhysReg = getVirt2PhysRegMapSlot(DestVirtReg))) {
 
1008
          // If this is a copy try to reuse the input as the output;
 
1009
          // that will make the copy go away.
 
1010
          // If this is a copy, the source reg is a phys reg, and
 
1011
          // that reg is available, use that phys reg for DestPhysReg.
 
1012
          // If this is a copy, the source reg is a virtual reg, and
 
1013
          // the phys reg that was assigned to that virtual reg is now
 
1014
          // available, use that phys reg for DestPhysReg.  (If it's now
 
1015
          // available that means this was the last use of the source.)
 
1016
          if (isCopy &&
 
1017
              TargetRegisterInfo::isPhysicalRegister(SrcCopyReg) &&
 
1018
              isPhysRegAvailable(SrcCopyReg)) {
 
1019
            DestPhysReg = SrcCopyReg;
 
1020
            assignVirtToPhysReg(DestVirtReg, DestPhysReg);
 
1021
          } else if (isCopy &&
 
1022
              TargetRegisterInfo::isVirtualRegister(SrcCopyReg) &&
 
1023
              SrcCopyPhysReg && isPhysRegAvailable(SrcCopyPhysReg) &&
 
1024
              MF->getRegInfo().getRegClass(DestVirtReg)->
 
1025
                               contains(SrcCopyPhysReg)) {
 
1026
            DestPhysReg = SrcCopyPhysReg;
 
1027
            assignVirtToPhysReg(DestVirtReg, DestPhysReg);
 
1028
          } else
 
1029
            DestPhysReg = getReg(MBB, MI, DestVirtReg);
 
1030
        }
 
1031
        MF->getRegInfo().setPhysRegUsed(DestPhysReg);
 
1032
        markVirtRegModified(DestVirtReg);
 
1033
        getVirtRegLastUse(DestVirtReg) = std::make_pair((MachineInstr*)0, 0);
 
1034
        DEBUG(dbgs() << "  Assigning " << TRI->getName(DestPhysReg)
 
1035
                     << " to %reg" << DestVirtReg << "\n");
 
1036
        MO.setReg(DestPhysReg);  // Assign the output register
 
1037
      }
 
1038
    }
 
1039
 
 
1040
    // If this instruction defines any registers that are immediately dead,
 
1041
    // kill them now.
 
1042
    //
 
1043
    for (unsigned i = 0, e = DeadDefs.size(); i != e; ++i) {
 
1044
      unsigned VirtReg = DeadDefs[i];
 
1045
      unsigned PhysReg = VirtReg;
 
1046
      if (TargetRegisterInfo::isVirtualRegister(VirtReg)) {
 
1047
        unsigned &PhysRegSlot = getVirt2PhysRegMapSlot(VirtReg);
 
1048
        PhysReg = PhysRegSlot;
 
1049
        assert(PhysReg != 0);
 
1050
        PhysRegSlot = 0;
 
1051
      } else if (PhysRegsUsed[PhysReg] == -2) {
 
1052
        // Unallocatable register dead, ignore.
 
1053
        continue;
 
1054
      }
 
1055
 
 
1056
      if (PhysReg) {
 
1057
        DEBUG(dbgs()  << "  Register " << TRI->getName(PhysReg)
 
1058
                      << " [%reg" << VirtReg
 
1059
                      << "] is never used, removing it from live set\n");
 
1060
        removePhysReg(PhysReg);
 
1061
        for (const unsigned *AliasSet = TRI->getAliasSet(PhysReg);
 
1062
             *AliasSet; ++AliasSet) {
 
1063
          if (PhysRegsUsed[*AliasSet] != -2) {
 
1064
            DEBUG(dbgs()  << "  Register " << TRI->getName(*AliasSet)
 
1065
                          << " [%reg" << *AliasSet
 
1066
                          << "] is never used, removing it from live set\n");
 
1067
            removePhysReg(*AliasSet);
 
1068
          }
 
1069
        }
 
1070
      }
 
1071
    }
 
1072
    
 
1073
    // Finally, if this is a noop copy instruction, zap it.  (Except that if
 
1074
    // the copy is dead, it must be kept to avoid messing up liveness info for
 
1075
    // the register scavenger.  See pr4100.)
 
1076
    if (TII->isMoveInstr(*MI, SrcCopyReg, DstCopyReg,
 
1077
                         SrcCopySubReg, DstCopySubReg) &&
 
1078
        SrcCopyReg == DstCopyReg && DeadDefs.empty())
 
1079
      MBB.erase(MI);
 
1080
  }
 
1081
 
 
1082
  MachineBasicBlock::iterator MI = MBB.getFirstTerminator();
 
1083
 
 
1084
  // Spill all physical registers holding virtual registers now.
 
1085
  for (unsigned i = 0, e = TRI->getNumRegs(); i != e; ++i)
 
1086
    if (PhysRegsUsed[i] != -1 && PhysRegsUsed[i] != -2) {
 
1087
      if (unsigned VirtReg = PhysRegsUsed[i])
 
1088
        spillVirtReg(MBB, MI, VirtReg, i);
 
1089
      else
 
1090
        removePhysReg(i);
 
1091
    }
 
1092
 
 
1093
#if 0
 
1094
  // This checking code is very expensive.
 
1095
  bool AllOk = true;
 
1096
  for (unsigned i = TargetRegisterInfo::FirstVirtualRegister,
 
1097
           e = MF->getRegInfo().getLastVirtReg(); i <= e; ++i)
 
1098
    if (unsigned PR = Virt2PhysRegMap[i]) {
 
1099
      cerr << "Register still mapped: " << i << " -> " << PR << "\n";
 
1100
      AllOk = false;
 
1101
    }
 
1102
  assert(AllOk && "Virtual registers still in phys regs?");
 
1103
#endif
 
1104
 
 
1105
  // Clear any physical register which appear live at the end of the basic
 
1106
  // block, but which do not hold any virtual registers.  e.g., the stack
 
1107
  // pointer.
 
1108
  PhysRegsUseOrder.clear();
 
1109
}
 
1110
 
 
1111
/// runOnMachineFunction - Register allocate the whole function
 
1112
///
 
1113
bool RALocal::runOnMachineFunction(MachineFunction &Fn) {
 
1114
  DEBUG(dbgs() << "Machine Function\n");
 
1115
  MF = &Fn;
 
1116
  TM = &Fn.getTarget();
 
1117
  TRI = TM->getRegisterInfo();
 
1118
  TII = TM->getInstrInfo();
 
1119
 
 
1120
  PhysRegsUsed.assign(TRI->getNumRegs(), -1);
 
1121
  
 
1122
  // At various places we want to efficiently check to see whether a register
 
1123
  // is allocatable.  To handle this, we mark all unallocatable registers as
 
1124
  // being pinned down, permanently.
 
1125
  {
 
1126
    BitVector Allocable = TRI->getAllocatableSet(Fn);
 
1127
    for (unsigned i = 0, e = Allocable.size(); i != e; ++i)
 
1128
      if (!Allocable[i])
 
1129
        PhysRegsUsed[i] = -2;  // Mark the reg unallocable.
 
1130
  }
 
1131
 
 
1132
  // initialize the virtual->physical register map to have a 'null'
 
1133
  // mapping for all virtual registers
 
1134
  unsigned LastVirtReg = MF->getRegInfo().getLastVirtReg();
 
1135
  StackSlotForVirtReg.grow(LastVirtReg);
 
1136
  Virt2PhysRegMap.grow(LastVirtReg);
 
1137
  Virt2LastUseMap.grow(LastVirtReg);
 
1138
  VirtRegModified.resize(LastVirtReg+1-TargetRegisterInfo::FirstVirtualRegister);
 
1139
  UsedInMultipleBlocks.resize(LastVirtReg+1-TargetRegisterInfo::FirstVirtualRegister);
 
1140
 
 
1141
  // Loop over all of the basic blocks, eliminating virtual register references
 
1142
  for (MachineFunction::iterator MBB = Fn.begin(), MBBe = Fn.end();
 
1143
       MBB != MBBe; ++MBB)
 
1144
    AllocateBasicBlock(*MBB);
 
1145
 
 
1146
  StackSlotForVirtReg.clear();
 
1147
  PhysRegsUsed.clear();
 
1148
  VirtRegModified.clear();
 
1149
  UsedInMultipleBlocks.clear();
 
1150
  Virt2PhysRegMap.clear();
 
1151
  Virt2LastUseMap.clear();
 
1152
  return true;
 
1153
}
 
1154
 
 
1155
FunctionPass *llvm::createLocalRegisterAllocator() {
 
1156
  return new RALocal();
 
1157
}