Skip to content

Commit 1aebbe3

Browse files
scottp101igcbot
authored andcommitted
Refactor code to function
Refactor code to function
1 parent 99df017 commit 1aebbe3

File tree

3 files changed

+36
-25
lines changed

3 files changed

+36
-25
lines changed

IGC/Compiler/CISACodeGen/PatternMatchPass.cpp

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4948,31 +4948,7 @@ bool CodeGenPatternMatch::MatchWaveShuffleIndex(llvm::GenIntrinsicInst &I) {
49484948
}
49494949

49504950
bool CodeGenPatternMatch::MatchWaveInstruction(llvm::GenIntrinsicInst &I) {
4951-
unsigned int helperLaneIndex = 0;
4952-
switch (I.getIntrinsicID()) {
4953-
case GenISAIntrinsic::GenISA_WaveAll:
4954-
case GenISAIntrinsic::GenISA_WaveClusteredBallot:
4955-
helperLaneIndex = 2;
4956-
break;
4957-
case GenISAIntrinsic::GenISA_WaveBallot:
4958-
case GenISAIntrinsic::GenISA_WaveInverseBallot:
4959-
helperLaneIndex = 1;
4960-
break;
4961-
case GenISAIntrinsic::GenISA_WaveInterleave:
4962-
case GenISAIntrinsic::GenISA_WaveClustered:
4963-
case GenISAIntrinsic::GenISA_WaveClusteredPrefix:
4964-
helperLaneIndex = 3;
4965-
break;
4966-
case GenISAIntrinsic::GenISA_WavePrefix:
4967-
case GenISAIntrinsic::GenISA_WaveClusteredInterleave:
4968-
helperLaneIndex = 4;
4969-
break;
4970-
default:
4971-
IGC_ASSERT(false);
4972-
break;
4973-
}
4974-
auto helperLaneMode = cast<ConstantInt>(I.getArgOperand(helperLaneIndex));
4975-
if (int_cast<int>(helperLaneMode->getSExtValue()) == 1) {
4951+
if (subgroupIntrinsicHasHelperLanes(I)) {
49764952
m_NeedVMask = true;
49774953
}
49784954
return MatchSingleInstruction(I);

IGC/Compiler/CISACodeGen/helper.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1336,6 +1336,40 @@ bool isSubGroupShuffleVariant(const llvm::Instruction *I) {
13361336
}
13371337
}
13381338

1339+
bool subgroupIntrinsicHasHelperLanes(const Instruction &I) {
1340+
const GenIntrinsicInst *GII = dyn_cast<GenIntrinsicInst>(&I);
1341+
if (!GII)
1342+
return false;
1343+
1344+
unsigned int helperLaneIndex = 0;
1345+
switch (GII->getIntrinsicID()) {
1346+
case GenISAIntrinsic::GenISA_WaveAll:
1347+
case GenISAIntrinsic::GenISA_WaveClusteredBallot:
1348+
case GenISAIntrinsic::GenISA_WaveBroadcast:
1349+
case GenISAIntrinsic::GenISA_WaveShuffleIndex:
1350+
helperLaneIndex = 2;
1351+
break;
1352+
case GenISAIntrinsic::GenISA_WaveBallot:
1353+
case GenISAIntrinsic::GenISA_WaveInverseBallot:
1354+
helperLaneIndex = 1;
1355+
break;
1356+
case GenISAIntrinsic::GenISA_WaveInterleave:
1357+
case GenISAIntrinsic::GenISA_WaveClustered:
1358+
case GenISAIntrinsic::GenISA_WaveClusteredPrefix:
1359+
case GenISAIntrinsic::GenISA_WaveClusteredBroadcast:
1360+
helperLaneIndex = 3;
1361+
break;
1362+
case GenISAIntrinsic::GenISA_WavePrefix:
1363+
case GenISAIntrinsic::GenISA_WaveClusteredInterleave:
1364+
helperLaneIndex = 4;
1365+
break;
1366+
default:
1367+
return false;
1368+
}
1369+
auto helperLaneMode = cast<ConstantInt>(GII->getArgOperand(helperLaneIndex));
1370+
return (int_cast<int>(helperLaneMode->getSExtValue()) == 1);
1371+
}
1372+
13391373
bool hasSubGroupIntrinsicPVC(llvm::Function &F) {
13401374
for (auto &BB : F) {
13411375
for (auto &I : BB) {

IGC/Compiler/CISACodeGen/helper.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ bool IsSIMDBlockIntrinsic(const llvm::Instruction *inst);
174174
bool isSubGroupIntrinsic(const llvm::Instruction *I);
175175
bool isSubGroupIntrinsicPVC(const llvm::Instruction *I);
176176
bool isSubGroupShuffleVariant(const llvm::Instruction *I);
177+
bool subgroupIntrinsicHasHelperLanes(const llvm::Instruction &I);
177178
bool hasSubGroupIntrinsicPVC(llvm::Function &F);
178179

179180
bool isBarrierIntrinsic(const llvm::Instruction *I);

0 commit comments

Comments
 (0)