Skip to content

Commit b852969

Browse files
Simplify & rename variables
1 parent 21007f6 commit b852969

File tree

2 files changed

+25
-27
lines changed

2 files changed

+25
-27
lines changed

llvm/lib/Target/AArch64/AArch64Combine.td

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -333,10 +333,10 @@ def combine_mul_cmlt : GICombineRule<
333333
>;
334334

335335
def combine_build_unmerge : GICombineRule<
336-
(defs root:$root, register_vector_matchinfo:$unmergedValues, register_vector_matchinfo:$undefinedValues),
336+
(defs root:$root, register_vector_matchinfo:$unmergeSrc, register_vector_matchinfo:$undefinedValues),
337337
(match (wip_match_opcode G_BUILD_VECTOR):$root,
338-
[{ return matchCombineBuildUnmerge(*${root}, MRI, ${unmergedValues}, ${undefinedValues}); }]),
339-
(apply [{ applyCombineBuildUnmerge(*${root}, MRI, B, ${unmergedValues}, ${undefinedValues}); }])
338+
[{ return matchCombineBuildUnmerge(*${root}, MRI, ${unmergeSrc}, ${undefinedValues}); }]),
339+
(apply [{ applyCombineBuildUnmerge(*${root}, MRI, B, ${unmergeSrc}, ${undefinedValues}); }])
340340
>;
341341

342342
// Post-legalization combines which should happen at all optimization levels.

llvm/lib/Target/AArch64/GISel/AArch64PostLegalizerCombiner.cpp

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
#include "llvm/CodeGen/TargetPassConfig.h"
4343
#include "llvm/CodeGenTypes/MachineValueType.h"
4444
#include "llvm/Support/Debug.h"
45-
#include <cassert>
4645
#include <set>
4746

4847
#define GET_GICOMBINER_DEPS
@@ -139,12 +138,12 @@ bool isZeroExtended(Register R, MachineRegisterInfo &MRI) {
139138
}
140139

141140
bool matchCombineBuildUnmerge(MachineInstr &MI, MachineRegisterInfo &MRI,
142-
SmallVectorImpl<Register> &unmergedValues,
141+
SmallVectorImpl<Register> &unmergeSrc,
143142
SmallVectorImpl<Register> &undefinedValues) {
144143
assert(MI.getOpcode() == TargetOpcode::G_BUILD_VECTOR);
145144

146145
undefinedValues.clear();
147-
unmergedValues.clear();
146+
unmergeSrc.clear();
148147

149148
std::set<int> knownRegs;
150149

@@ -153,7 +152,7 @@ bool matchCombineBuildUnmerge(MachineInstr &MI, MachineRegisterInfo &MRI,
153152

154153
if (!Def) {
155154
undefinedValues.clear();
156-
unmergedValues.clear();
155+
unmergeSrc.clear();
157156
return false;
158157
}
159158

@@ -166,27 +165,30 @@ bool matchCombineBuildUnmerge(MachineInstr &MI, MachineRegisterInfo &MRI,
166165
undefinedValues.push_back(Use.getReg());
167166
break;
168167
case TargetOpcode::G_UNMERGE_VALUES:
169-
if (Def->getNumDefs() > 2 ||
168+
// We only want to match G_UNMERGE_VALUES <2 x Ty>
169+
// s16 is troublesome as <2 x s16> is generally not legal
170+
if (Def->getNumDefs() != 2 ||
170171
MRI.getType(Use.getReg()) == LLT::scalar(16)) {
171172
undefinedValues.clear();
172-
unmergedValues.clear();
173+
unmergeSrc.clear();
173174
return false;
174175
}
175-
if (knownRegs.find(Def->getOperand(2).getReg().id()) == knownRegs.end()) {
176-
knownRegs.insert(Def->getOperand(2).getReg().id());
177-
unmergedValues.push_back(Def->getOperand(2).getReg());
178-
}
179-
else
180-
continue;
181176

177+
// Only track unique sources for the G_UNMERGE_VALUES
178+
if (knownRegs.find(Def->getOperand(2).getReg().id()) != knownRegs.end())
179+
continue;
180+
181+
knownRegs.insert(Def->getOperand(2).getReg().id());
182+
unmergeSrc.push_back(Def->getOperand(2).getReg());
183+
182184
break;
183185
}
184186
}
185187

186-
if (!(undefinedValues.size() == 2 && unmergedValues.size() == 1) &&
187-
!(undefinedValues.size() == 0 && unmergedValues.size() == 2)) {
188+
// Only want to match patterns that pad two values with two undefined values
189+
if (!(undefinedValues.size() == 2 && unmergeSrc.size() == 1)) {
188190
undefinedValues.clear();
189-
unmergedValues.clear();
191+
unmergeSrc.clear();
190192
return false;
191193
}
192194

@@ -195,23 +197,19 @@ bool matchCombineBuildUnmerge(MachineInstr &MI, MachineRegisterInfo &MRI,
195197

196198
void applyCombineBuildUnmerge(MachineInstr &MI, MachineRegisterInfo &MRI,
197199
MachineIRBuilder &B,
198-
SmallVectorImpl<Register> &unmergedValues,
200+
SmallVectorImpl<Register> &unmergeSrc,
199201
SmallVectorImpl<Register> &undefinedValues) {
202+
assert(unmergeSrc.size() == 1 && "Expected there to be one G_UNMERGE_VALUES");
200203
B.setInstrAndDebugLoc(MI);
201204

202-
if (unmergedValues.size() == 1) {
203205
auto llt = LLT::fixed_vector(
204206
undefinedValues.size(),
205-
LLT::scalar(MRI.getType(unmergedValues[0]).getScalarSizeInBits()));
207+
LLT::scalar(MRI.getType(unmergeSrc[0]).getScalarSizeInBits()));
208+
206209
Register DefVec = MRI.createGenericVirtualRegister(llt);
207210

208211
B.buildBuildVector(DefVec, undefinedValues);
209-
B.buildConcatVectors(MI.getOperand(0), {unmergedValues[0], DefVec});
210-
} else {
211-
return;
212-
B.buildConcatVectors(MI.getOperand(0),
213-
{unmergedValues[0], unmergedValues[1]});
214-
}
212+
B.buildConcatVectors(MI.getOperand(0), {unmergeSrc[0], DefVec});
215213

216214
MI.eraseFromParent();
217215
}

0 commit comments

Comments
 (0)