Skip to content

Commit 4bf06c1

Browse files
author
Martin Wehking
authored
Initialize unsigned integer when declared (#81894)
Initialize ModOpcode directly before the loop execution to silence static analyzer warnings about the usage of an uninitialized variable. This leads to a redundant assignment of ElV2F16 inside the first loop execution, but also avoids superfluous emptiness checks of EltsV2F16 after the first execution of the loop.
1 parent 85da9f8 commit 4bf06c1

File tree

2 files changed

+20
-16
lines changed

2 files changed

+20
-16
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: 15 additions & 12 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());
@@ -4075,16 +4076,18 @@ InstructionSelector::ComplexRendererFns
40754076
AMDGPUInstructionSelector::selectWMMAModsF16NegAbs(MachineOperand &Root) const {
40764077
Register Src = Root.getReg();
40774078
unsigned Mods = SISrcMods::OP_SEL_1;
4078-
unsigned ModOpcode;
40794079
SmallVector<Register, 8> EltsV2F16;
40804080

40814081
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;
4088+
40824089
for (unsigned i = 0; i < CV->getNumSources(); ++i) {
4083-
MachineInstr *ElV2F16 = MRI->getVRegDef(CV->getSourceReg(i));
4084-
// Based on first element decide which mod we match, neg or abs
4085-
if (EltsV2F16.empty())
4086-
ModOpcode = (ElV2F16->getOpcode() == AMDGPU::G_FNEG) ? AMDGPU::G_FNEG
4087-
: AMDGPU::G_FABS;
4090+
ElV2F16 = MRI->getVRegDef(CV->getSourceReg(i));
40884091
if (ElV2F16->getOpcode() != ModOpcode)
40894092
break;
40904093
EltsV2F16.push_back(ElV2F16->getOperand(1).getReg());

0 commit comments

Comments
 (0)