Skip to content

Commit 954eea0

Browse files
author
Aditya Nandakumar
committed
[GISel][NFC]: Move getOpcodeDef from the LegalizationArtifactCombiner into GlobalISel/Utils for use elsewhere
llvm-svn: 318350
1 parent 7fb4d3d commit 954eea0

File tree

3 files changed

+29
-24
lines changed

3 files changed

+29
-24
lines changed

llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h

Lines changed: 7 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ class LegalizationArtifactCombiner {
3636
SmallVectorImpl<MachineInstr *> &DeadInsts) {
3737
if (MI.getOpcode() != TargetOpcode::G_ANYEXT)
3838
return false;
39-
if (MachineInstr *DefMI =
40-
getOpcodeDef(TargetOpcode::G_TRUNC, MI.getOperand(1).getReg())) {
39+
if (MachineInstr *DefMI = getOpcodeDef(TargetOpcode::G_TRUNC,
40+
MI.getOperand(1).getReg(), MRI)) {
4141
DEBUG(dbgs() << ".. Combine MI: " << MI;);
4242
unsigned DstReg = MI.getOperand(0).getReg();
4343
unsigned SrcReg = DefMI->getOperand(1).getReg();
@@ -55,8 +55,8 @@ class LegalizationArtifactCombiner {
5555

5656
if (MI.getOpcode() != TargetOpcode::G_ZEXT)
5757
return false;
58-
if (MachineInstr *DefMI =
59-
getOpcodeDef(TargetOpcode::G_TRUNC, MI.getOperand(1).getReg())) {
58+
if (MachineInstr *DefMI = getOpcodeDef(TargetOpcode::G_TRUNC,
59+
MI.getOperand(1).getReg(), MRI)) {
6060
unsigned DstReg = MI.getOperand(0).getReg();
6161
LLT DstTy = MRI.getType(DstReg);
6262
if (isInstUnsupported(TargetOpcode::G_AND, DstTy) ||
@@ -83,8 +83,8 @@ class LegalizationArtifactCombiner {
8383

8484
if (MI.getOpcode() != TargetOpcode::G_SEXT)
8585
return false;
86-
if (MachineInstr *DefMI =
87-
getOpcodeDef(TargetOpcode::G_TRUNC, MI.getOperand(1).getReg())) {
86+
if (MachineInstr *DefMI = getOpcodeDef(TargetOpcode::G_TRUNC,
87+
MI.getOperand(1).getReg(), MRI)) {
8888
unsigned DstReg = MI.getOperand(0).getReg();
8989
LLT DstTy = MRI.getType(DstReg);
9090
if (isInstUnsupported(TargetOpcode::G_SHL, DstTy) ||
@@ -118,7 +118,7 @@ class LegalizationArtifactCombiner {
118118
return false;
119119

120120
if (MachineInstr *DefMI = getOpcodeDef(TargetOpcode::G_IMPLICIT_DEF,
121-
MI.getOperand(1).getReg())) {
121+
MI.getOperand(1).getReg(), MRI)) {
122122
unsigned DstReg = MI.getOperand(0).getReg();
123123
LLT DstTy = MRI.getType(DstReg);
124124
if (isInstUnsupported(TargetOpcode::G_IMPLICIT_DEF, DstTy))
@@ -248,23 +248,6 @@ class LegalizationArtifactCombiner {
248248
return Action.first == LegalizerInfo::LegalizeAction::Unsupported ||
249249
Action.first == LegalizerInfo::LegalizeAction::NotFound;
250250
}
251-
/// See if Reg is defined by an single def instruction that is
252-
/// Opcode. Also try to do trivial folding if it's a COPY with
253-
/// same types. Returns null otherwise.
254-
MachineInstr *getOpcodeDef(unsigned Opcode, unsigned Reg) {
255-
auto *DefMI = MRI.getVRegDef(Reg);
256-
auto DstTy = MRI.getType(DefMI->getOperand(0).getReg());
257-
if (!DstTy.isValid())
258-
return nullptr;
259-
while (DefMI->getOpcode() == TargetOpcode::COPY) {
260-
unsigned SrcReg = DefMI->getOperand(1).getReg();
261-
auto SrcTy = MRI.getType(SrcReg);
262-
if (!SrcTy.isValid() || SrcTy != DstTy)
263-
break;
264-
DefMI = MRI.getVRegDef(SrcReg);
265-
}
266-
return DefMI->getOpcode() == Opcode ? DefMI : nullptr;
267-
}
268251
};
269252

270253
} // namespace llvm

llvm/include/llvm/CodeGen/GlobalISel/Utils.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,5 +79,11 @@ Optional<int64_t> getConstantVRegVal(unsigned VReg,
7979
const ConstantFP* getConstantFPVRegVal(unsigned VReg,
8080
const MachineRegisterInfo &MRI);
8181

82+
/// See if Reg is defined by an single def instruction that is
83+
/// Opcode. Also try to do trivial folding if it's a COPY with
84+
/// same types. Returns null otherwise.
85+
MachineInstr *getOpcodeDef(unsigned Opcode, unsigned Reg,
86+
const MachineRegisterInfo &MRI);
87+
8288
} // End namespace llvm.
8389
#endif

llvm/lib/CodeGen/GlobalISel/Utils.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,3 +129,19 @@ const llvm::ConstantFP* llvm::getConstantFPVRegVal(unsigned VReg,
129129
return nullptr;
130130
return MI->getOperand(1).getFPImm();
131131
}
132+
133+
llvm::MachineInstr *llvm::getOpcodeDef(unsigned Opcode, unsigned Reg,
134+
const MachineRegisterInfo &MRI) {
135+
auto *DefMI = MRI.getVRegDef(Reg);
136+
auto DstTy = MRI.getType(DefMI->getOperand(0).getReg());
137+
if (!DstTy.isValid())
138+
return nullptr;
139+
while (DefMI->getOpcode() == TargetOpcode::COPY) {
140+
unsigned SrcReg = DefMI->getOperand(1).getReg();
141+
auto SrcTy = MRI.getType(SrcReg);
142+
if (!SrcTy.isValid() || SrcTy != DstTy)
143+
break;
144+
DefMI = MRI.getVRegDef(SrcReg);
145+
}
146+
return DefMI->getOpcode() == Opcode ? DefMI : nullptr;
147+
}

0 commit comments

Comments
 (0)