Skip to content

Commit b08f9af

Browse files
fangliu2020Artem Gindinson
authored and
Artem Gindinson
committed
[IGC vISA] Update barrier workaround
Update barrier workarouond. From: (W) cmp (1|M0) (ne)f0.0  null<1>:ud  n0.0<0;1,0>:ud  r36.10<0;1,0>:ud {I@1} To: (W) and (1|M0) (eq)f0.0  null<1>:ud  n0.0<0;1,0>:ud  r36.10<0;1,0>:ud {I@1}
1 parent 9381d84 commit b08f9af

File tree

2 files changed

+16
-16
lines changed

2 files changed

+16
-16
lines changed

visa/Optimizer.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13483,15 +13483,15 @@ void Optimizer::applyBarrierWA(INST_LIST_ITER it, G4_BB *bb) {
1348313483
auto labelInst = builder.createLabelInst(label, false);
1348413484
bb->insertBefore(it, labelInst);
1348513485

13486-
// (W) cmp(1) (ne)f0.0 null:ud n0.0:ud 0x1:ud
13486+
// (W) and(1) (eq)f0.0 null:ud n0.0:ud 0x1:ud
1348713487
G4_DstRegRegion *nullDst = builder.createNullDst(Type_UD);
13488-
G4_SrcRegRegion *src0Cmp = builder.createSrc(
13488+
G4_SrcRegRegion *src0And = builder.createSrc(
1348913489
builder.phyregpool.getN0Reg(), 0, 0, builder.getRegionScalar(), Type_UD);
13490-
G4_CondMod *condMod = builder.createCondMod(Mod_ne, WAFlagVar, 0);
13491-
auto cmpInst = builder.createInternalInst(
13492-
nullptr, G4_cmp, condMod, g4::NOSAT, g4::SIMD1, nullDst, src0Cmp,
13490+
G4_CondMod *condMod = builder.createCondMod(Mod_e, WAFlagVar, 0);
13491+
auto andInst = builder.createInternalInst(
13492+
nullptr, G4_and, condMod, g4::NOSAT, g4::SIMD1, nullDst, src0And,
1349313493
builder.createImm(0x1, Type_UD), InstOpt_WriteEnable);
13494-
bb->insertBefore(it, cmpInst);
13494+
bb->insertBefore(it, andInst);
1349513495

1349613496
// (W&f0.0) while(1) loop
1349713497
G4_Predicate *pred = builder.createPredicate(PredState_Plus, WAFlagVar, 0);
@@ -13573,16 +13573,16 @@ void Optimizer::applyNamedBarrierWA(INST_LIST_ITER it, G4_BB *bb) {
1357313573
auto labelInst = builder.createLabelInst(label, false);
1357413574
bb->insertBefore(it, labelInst);
1357513575

13576-
// (W) cmp(1) (ne)f0.0 null:ud n0.0:ud dst1.1:ud
13576+
// (W) and(1) (eq)f0.0 null:ud n0.0:ud dst1.1:ud
1357713577
G4_DstRegRegion *nullDst = builder.createNullDst(Type_UD);
13578-
G4_SrcRegRegion *src0Cmp = builder.createSrc(
13578+
G4_SrcRegRegion *src0And = builder.createSrc(
1357913579
builder.phyregpool.getN0Reg(), 0, 0, builder.getRegionScalar(), Type_UD);
13580-
G4_SrcRegRegion *src1Cmp = builder.duplicateOperand(src0Shl);
13581-
G4_CondMod *condMod = builder.createCondMod(Mod_ne, WAFlagVar, 0);
13582-
auto cmpInst = builder.createInternalInst(nullptr, G4_cmp, condMod, g4::NOSAT,
13583-
g4::SIMD1, nullDst, src0Cmp,
13584-
src1Cmp, InstOpt_WriteEnable);
13585-
bb->insertBefore(it, cmpInst);
13580+
G4_SrcRegRegion *src1And = builder.duplicateOperand(src0Shl);
13581+
G4_CondMod *condMod = builder.createCondMod(Mod_e, WAFlagVar, 0);
13582+
auto andInst = builder.createInternalInst(nullptr, G4_and, condMod, g4::NOSAT,
13583+
g4::SIMD1, nullDst, src0And,
13584+
src1And, InstOpt_WriteEnable);
13585+
bb->insertBefore(it, andInst);
1358613586

1358713587
// (W&f0.0) while(1) loop
1358813588
G4_Predicate *pred = builder.createPredicate(PredState_Plus, WAFlagVar, 0);

visa/VisaToG4/TranslateSendSync.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ int IR_Builder::translateVISANamedBarrierWait(G4_Predicate *pred,
330330
// mov(1) r10.1:ud 0x1:ud
331331
// (W) shl(1) r10.1:ud r10.1:ud r10.0:ud
332332
// loop:
333-
// cmp(1)(ne) f0.0 null:ud n0.0:ud r10.1:ud
333+
// and(1)(eq) f0.0 null:ud n0.0:ud r10.1:ud
334334
// (f0.0) while (1) loop
335335
// (W) sync.bar f1.0:uw
336336
// Here insert Intrinsic::NamedBarrierWA before wait which will be expanded
@@ -542,7 +542,7 @@ void IR_Builder::generateBarrierWait(G4_Predicate *prd) {
542542
// instructions sequence must be inserted before a sync.bar instruction.
543543
// Legacy barrier case:
544544
// loop:
545-
// cmp (1) (ne)f0.0 null:ud n0.0:ud 0x1:ud
545+
// and (1) (eq)f0.0 null:ud n0.0:ud 0x1:ud
546546
// (f0.0) while(1) loop
547547
// (W) sync.bar 0x0:uw
548548
// Here insert Intrinsic::BarrierWA before wait which will be expanded

0 commit comments

Comments
 (0)