File tree Expand file tree Collapse file tree 3 files changed +36
-25
lines changed Expand file tree Collapse file tree 3 files changed +36
-25
lines changed Original file line number Diff line number Diff line change @@ -4948,31 +4948,7 @@ bool CodeGenPatternMatch::MatchWaveShuffleIndex(llvm::GenIntrinsicInst &I) {
4948
4948
}
4949
4949
4950
4950
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)) {
4976
4952
m_NeedVMask = true ;
4977
4953
}
4978
4954
return MatchSingleInstruction (I);
Original file line number Diff line number Diff line change @@ -1336,6 +1336,40 @@ bool isSubGroupShuffleVariant(const llvm::Instruction *I) {
1336
1336
}
1337
1337
}
1338
1338
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
+
1339
1373
bool hasSubGroupIntrinsicPVC (llvm::Function &F) {
1340
1374
for (auto &BB : F) {
1341
1375
for (auto &I : BB) {
Original file line number Diff line number Diff line change @@ -174,6 +174,7 @@ bool IsSIMDBlockIntrinsic(const llvm::Instruction *inst);
174
174
bool isSubGroupIntrinsic (const llvm::Instruction *I);
175
175
bool isSubGroupIntrinsicPVC (const llvm::Instruction *I);
176
176
bool isSubGroupShuffleVariant (const llvm::Instruction *I);
177
+ bool subgroupIntrinsicHasHelperLanes (const llvm::Instruction &I);
177
178
bool hasSubGroupIntrinsicPVC (llvm::Function &F);
178
179
179
180
bool isBarrierIntrinsic (const llvm::Instruction *I);
You can’t perform that action at this time.
0 commit comments