Skip to content

Commit e9c92ef

Browse files
author
Martin Wehking
committed
Extend unsigned integer initialization
Initialize ModOpcode directly similarly to 88d095f
1 parent 88d095f commit e9c92ef

File tree

2 files changed

+32
-30
lines changed

2 files changed

+32
-30
lines changed

llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3261,15 +3261,16 @@ bool AMDGPUDAGToDAGISel::SelectWMMAModsF32NegAbs(SDValue In, SDValue &Src,
32613261
SDValue &SrcMods) const {
32623262
Src = In;
32633263
unsigned Mods = SISrcMods::OP_SEL_1;
3264-
unsigned ModOpcode;
32653264
SmallVector<SDValue, 8> EltsF32;
32663265

32673266
if (auto *BV = dyn_cast<BuildVectorSDNode>(stripBitcast(In))) {
3267+
assert(BV->getNumOperands() > 0);
3268+
// Based on first element decide which mod we match, neg or abs
3269+
SDValue ElF32 = stripBitcast(BV->getOperand(0));
3270+
unsigned ModOpcode =
3271+
(ElF32.getOpcode() == ISD::FNEG) ? ISD::FNEG : ISD::FABS;
32683272
for (unsigned i = 0; i < BV->getNumOperands(); ++i) {
32693273
SDValue ElF32 = stripBitcast(BV->getOperand(i));
3270-
// Based on first element decide which mod we match, neg or abs
3271-
if (EltsF32.empty())
3272-
ModOpcode = (ElF32.getOpcode() == ISD::FNEG) ? ISD::FNEG : ISD::FABS;
32733274
if (ElF32.getOpcode() != ModOpcode)
32743275
break;
32753276
EltsF32.push_back(ElF32.getOperand(0));

llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4019,16 +4019,17 @@ InstructionSelector::ComplexRendererFns
40194019
AMDGPUInstructionSelector::selectWMMAModsF32NegAbs(MachineOperand &Root) const {
40204020
Register Src = Root.getReg();
40214021
unsigned Mods = SISrcMods::OP_SEL_1;
4022-
unsigned ModOpcode;
40234022
SmallVector<Register, 8> EltsF32;
40244023

40254024
if (GBuildVector *BV = dyn_cast<GBuildVector>(MRI->getVRegDef(Src))) {
4025+
assert(BV->getNumSources() > 0);
4026+
// Based on first element decide which mod we match, neg or abs
4027+
MachineInstr *ElF32 = MRI->getVRegDef(BV->getSourceReg(0));
4028+
unsigned ModOpcode = (ElF32->getOpcode() == AMDGPU::G_FNEG)
4029+
? AMDGPU::G_FNEG
4030+
: AMDGPU::G_FABS;
40264031
for (unsigned i = 0; i < BV->getNumSources(); ++i) {
4027-
MachineInstr *ElF32 = MRI->getVRegDef(BV->getSourceReg(i));
4028-
// Based on first element decide which mod we match, neg or abs
4029-
if (EltsF32.empty())
4030-
ModOpcode = (ElF32->getOpcode() == AMDGPU::G_FNEG) ? AMDGPU::G_FNEG
4031-
: AMDGPU::G_FABS;
4032+
ElF32 = MRI->getVRegDef(BV->getSourceReg(i));
40324033
if (ElF32->getOpcode() != ModOpcode)
40334034
break;
40344035
EltsF32.push_back(ElF32->getOperand(1).getReg());
@@ -4077,29 +4078,29 @@ AMDGPUInstructionSelector::selectWMMAModsF16NegAbs(MachineOperand &Root) const {
40774078
unsigned Mods = SISrcMods::OP_SEL_1;
40784079
SmallVector<Register, 8> EltsV2F16;
40794080

4080-
if (GConcatVectors *CV = dyn_cast<GConcatVectors>(MRI->getVRegDef(Src)))
4081-
if (CV->getNumSources() > 0) {
4082-
MachineInstr *ElV2F16 = MRI->getVRegDef(CV->getSourceReg(0));
4083-
// Based on first element decide which mod we match, neg or abs
4084-
unsigned ModOpcode = (ElV2F16->getOpcode() == AMDGPU::G_FNEG)
4085-
? AMDGPU::G_FNEG
4086-
: AMDGPU::G_FABS;
4087-
4088-
for (unsigned i = 0; i < CV->getNumSources(); ++i) {
4089-
ElV2F16 = MRI->getVRegDef(CV->getSourceReg(i));
4090-
if (ElV2F16->getOpcode() != ModOpcode)
4091-
break;
4092-
EltsV2F16.push_back(ElV2F16->getOperand(1).getReg());
4093-
}
4081+
if (GConcatVectors *CV = dyn_cast<GConcatVectors>(MRI->getVRegDef(Src))) {
4082+
assert(CV->getNumSources() > 0);
4083+
MachineInstr *ElV2F16 = MRI->getVRegDef(CV->getSourceReg(0));
4084+
// Based on first element decide which mod we match, neg or abs
4085+
unsigned ModOpcode = (ElV2F16->getOpcode() == AMDGPU::G_FNEG)
4086+
? AMDGPU::G_FNEG
4087+
: AMDGPU::G_FABS;
40944088

4095-
// All elements had ModOpcode modifier
4096-
if (CV->getNumSources() == EltsV2F16.size()) {
4097-
MachineIRBuilder B(*Root.getParent());
4098-
selectWMMAModsNegAbs(ModOpcode, Mods, EltsV2F16, Src, Root.getParent(),
4099-
*MRI);
4100-
}
4089+
for (unsigned i = 0; i < CV->getNumSources(); ++i) {
4090+
ElV2F16 = MRI->getVRegDef(CV->getSourceReg(i));
4091+
if (ElV2F16->getOpcode() != ModOpcode)
4092+
break;
4093+
EltsV2F16.push_back(ElV2F16->getOperand(1).getReg());
41014094
}
41024095

4096+
// All elements had ModOpcode modifier
4097+
if (CV->getNumSources() == EltsV2F16.size()) {
4098+
MachineIRBuilder B(*Root.getParent());
4099+
selectWMMAModsNegAbs(ModOpcode, Mods, EltsV2F16, Src, Root.getParent(),
4100+
*MRI);
4101+
}
4102+
}
4103+
41034104
return {{[=](MachineInstrBuilder &MIB) { MIB.addReg(Src); },
41044105
[=](MachineInstrBuilder &MIB) { MIB.addImm(Mods); }}};
41054106
}

0 commit comments

Comments
 (0)