@@ -36,8 +36,8 @@ class LegalizationArtifactCombiner {
36
36
SmallVectorImpl<MachineInstr *> &DeadInsts) {
37
37
if (MI.getOpcode () != TargetOpcode::G_ANYEXT)
38
38
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 )) {
41
41
DEBUG (dbgs () << " .. Combine MI: " << MI;);
42
42
unsigned DstReg = MI.getOperand (0 ).getReg ();
43
43
unsigned SrcReg = DefMI->getOperand (1 ).getReg ();
@@ -55,8 +55,8 @@ class LegalizationArtifactCombiner {
55
55
56
56
if (MI.getOpcode () != TargetOpcode::G_ZEXT)
57
57
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 )) {
60
60
unsigned DstReg = MI.getOperand (0 ).getReg ();
61
61
LLT DstTy = MRI.getType (DstReg);
62
62
if (isInstUnsupported (TargetOpcode::G_AND, DstTy) ||
@@ -83,8 +83,8 @@ class LegalizationArtifactCombiner {
83
83
84
84
if (MI.getOpcode () != TargetOpcode::G_SEXT)
85
85
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 )) {
88
88
unsigned DstReg = MI.getOperand (0 ).getReg ();
89
89
LLT DstTy = MRI.getType (DstReg);
90
90
if (isInstUnsupported (TargetOpcode::G_SHL, DstTy) ||
@@ -118,7 +118,7 @@ class LegalizationArtifactCombiner {
118
118
return false ;
119
119
120
120
if (MachineInstr *DefMI = getOpcodeDef (TargetOpcode::G_IMPLICIT_DEF,
121
- MI.getOperand (1 ).getReg ())) {
121
+ MI.getOperand (1 ).getReg (), MRI )) {
122
122
unsigned DstReg = MI.getOperand (0 ).getReg ();
123
123
LLT DstTy = MRI.getType (DstReg);
124
124
if (isInstUnsupported (TargetOpcode::G_IMPLICIT_DEF, DstTy))
@@ -248,23 +248,6 @@ class LegalizationArtifactCombiner {
248
248
return Action.first == LegalizerInfo::LegalizeAction::Unsupported ||
249
249
Action.first == LegalizerInfo::LegalizeAction::NotFound;
250
250
}
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
- }
268
251
};
269
252
270
253
} // namespace llvm
0 commit comments