comparison lib/CodeGen/RenameIndependentSubregs.cpp @ 134:3a76565eade5 LLVM5.0.1

update 5.0.1
author mir3636
date Sat, 17 Feb 2018 09:57:20 +0900
parents 803732b1fca8
children c2174574ed3a
comparison
equal deleted inserted replaced
133:c60214abe0e8 134:3a76565eade5
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 // 9 //
10 /// Rename independent subregisters looks for virtual registers with 10 /// Rename independent subregisters looks for virtual registers with
11 /// independently used subregisters and renames them to new virtual registers. 11 /// independently used subregisters and renames them to new virtual registers.
12 /// Example: In the following: 12 /// Example: In the following:
13 /// %vreg0:sub0<read-undef> = ... 13 /// %0:sub0<read-undef> = ...
14 /// %vreg0:sub1 = ... 14 /// %0:sub1 = ...
15 /// use %vreg0:sub0 15 /// use %0:sub0
16 /// %vreg0:sub0 = ... 16 /// %0:sub0 = ...
17 /// use %vreg0:sub0 17 /// use %0:sub0
18 /// use %vreg0:sub1 18 /// use %0:sub1
19 /// sub0 and sub1 are never used together, and we have two independent sub0 19 /// sub0 and sub1 are never used together, and we have two independent sub0
20 /// definitions. This pass will rename to: 20 /// definitions. This pass will rename to:
21 /// %vreg0:sub0<read-undef> = ... 21 /// %0:sub0<read-undef> = ...
22 /// %vreg1:sub1<read-undef> = ... 22 /// %1:sub1<read-undef> = ...
23 /// use %vreg1:sub1 23 /// use %1:sub1
24 /// %vreg2:sub1<read-undef> = ... 24 /// %2:sub1<read-undef> = ...
25 /// use %vreg2:sub1 25 /// use %2:sub1
26 /// use %vreg0:sub0 26 /// use %0:sub0
27 // 27 //
28 //===----------------------------------------------------------------------===// 28 //===----------------------------------------------------------------------===//
29 29
30 #include "LiveRangeUtils.h" 30 #include "LiveRangeUtils.h"
31 #include "PHIEliminationUtils.h" 31 #include "PHIEliminationUtils.h"
32 #include "llvm/CodeGen/LiveInterval.h" 32 #include "llvm/CodeGen/LiveInterval.h"
33 #include "llvm/CodeGen/LiveIntervalAnalysis.h" 33 #include "llvm/CodeGen/LiveIntervals.h"
34 #include "llvm/CodeGen/MachineFunctionPass.h" 34 #include "llvm/CodeGen/MachineFunctionPass.h"
35 #include "llvm/CodeGen/MachineInstrBuilder.h" 35 #include "llvm/CodeGen/MachineInstrBuilder.h"
36 #include "llvm/CodeGen/MachineRegisterInfo.h" 36 #include "llvm/CodeGen/MachineRegisterInfo.h"
37 #include "llvm/CodeGen/Passes.h" 37 #include "llvm/CodeGen/Passes.h"
38 #include "llvm/Target/TargetInstrInfo.h" 38 #include "llvm/CodeGen/TargetInstrInfo.h"
39 39
40 using namespace llvm; 40 using namespace llvm;
41 41
42 #define DEBUG_TYPE "rename-independent-subregs" 42 #define DEBUG_TYPE "rename-independent-subregs"
43 43
132 // Create a new VReg for each class. 132 // Create a new VReg for each class.
133 unsigned Reg = LI.reg; 133 unsigned Reg = LI.reg;
134 const TargetRegisterClass *RegClass = MRI->getRegClass(Reg); 134 const TargetRegisterClass *RegClass = MRI->getRegClass(Reg);
135 SmallVector<LiveInterval*, 4> Intervals; 135 SmallVector<LiveInterval*, 4> Intervals;
136 Intervals.push_back(&LI); 136 Intervals.push_back(&LI);
137 DEBUG(dbgs() << PrintReg(Reg) << ": Found " << Classes.getNumClasses() 137 DEBUG(dbgs() << printReg(Reg) << ": Found " << Classes.getNumClasses()
138 << " equivalence classes.\n"); 138 << " equivalence classes.\n");
139 DEBUG(dbgs() << PrintReg(Reg) << ": Splitting into newly created:"); 139 DEBUG(dbgs() << printReg(Reg) << ": Splitting into newly created:");
140 for (unsigned I = 1, NumClasses = Classes.getNumClasses(); I < NumClasses; 140 for (unsigned I = 1, NumClasses = Classes.getNumClasses(); I < NumClasses;
141 ++I) { 141 ++I) {
142 unsigned NewVReg = MRI->createVirtualRegister(RegClass); 142 unsigned NewVReg = MRI->createVirtualRegister(RegClass);
143 LiveInterval &NewLI = LIS->createEmptyInterval(NewVReg); 143 LiveInterval &NewLI = LIS->createEmptyInterval(NewVReg);
144 Intervals.push_back(&NewLI); 144 Intervals.push_back(&NewLI);
145 DEBUG(dbgs() << ' ' << PrintReg(NewVReg)); 145 DEBUG(dbgs() << ' ' << printReg(NewVReg));
146 } 146 }
147 DEBUG(dbgs() << '\n'); 147 DEBUG(dbgs() << '\n');
148 148
149 rewriteOperands(Classes, SubRangeInfos, Intervals); 149 rewriteOperands(Classes, SubRangeInfos, Intervals);
150 distribute(Classes, SubRangeInfos, Intervals); 150 distribute(Classes, SubRangeInfos, Intervals);