0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 //===-- SIMachineFunctionInfo.cpp - SI Machine Function Info -------===//
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 //
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 // The LLVM Compiler Infrastructure
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 //
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 // This file is distributed under the University of Illinois Open Source
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 // License. See LICENSE.TXT for details.
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 //
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 /// \file
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 //===----------------------------------------------------------------------===//
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 #include "SIMachineFunctionInfo.h"
|
33
|
13 #include "SIRegisterInfo.h"
|
|
14 #include "llvm/CodeGen/MachineRegisterInfo.h"
|
|
15
|
|
16 #define MAX_LANES 64
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 using namespace llvm;
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 // Pin the vtable to this file.
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 void SIMachineFunctionInfo::anchor() {}
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 SIMachineFunctionInfo::SIMachineFunctionInfo(const MachineFunction &MF)
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 : AMDGPUMachineFunction(MF),
|
33
|
26 PSInputAddr(0),
|
|
27 SpillTracker() { }
|
|
28
|
|
29 static unsigned createLaneVGPR(MachineRegisterInfo &MRI) {
|
|
30 return MRI.createVirtualRegister(&AMDGPU::VReg_32RegClass);
|
|
31 }
|
|
32
|
|
33 unsigned SIMachineFunctionInfo::RegSpillTracker::getNextLane(MachineRegisterInfo &MRI) {
|
|
34 if (!LaneVGPR) {
|
|
35 LaneVGPR = createLaneVGPR(MRI);
|
|
36 } else {
|
|
37 CurrentLane++;
|
|
38 if (CurrentLane == MAX_LANES) {
|
|
39 CurrentLane = 0;
|
|
40 LaneVGPR = createLaneVGPR(MRI);
|
|
41 }
|
|
42 }
|
|
43 return CurrentLane;
|
|
44 }
|
|
45
|
|
46 void SIMachineFunctionInfo::RegSpillTracker::addSpilledReg(unsigned FrameIndex,
|
|
47 unsigned Reg,
|
|
48 int Lane) {
|
|
49 SpilledRegisters[FrameIndex] = SpilledReg(Reg, Lane);
|
|
50 }
|
|
51
|
|
52 const SIMachineFunctionInfo::SpilledReg&
|
|
53 SIMachineFunctionInfo::RegSpillTracker::getSpilledReg(unsigned FrameIndex) {
|
|
54 return SpilledRegisters[FrameIndex];
|
|
55 }
|