@@ -1855,6 +1855,12 @@ G4_SrcRegRegion *IR_Builder::createScratchExDesc(uint32_t exdesc) {
1855
1855
createBinOp (G4_add, g4::SIMD1, dst, T251, createImm (exdesc, Type_UD),
1856
1856
InstOpt_WriteEnable, true );
1857
1857
}
1858
+ if (getOption (vISA_CopyA0ToDBG0)) {
1859
+ G4_SrcRegRegion *srcA0 = createSrcRegRegion (exDescDecl, getRegionScalar ());
1860
+ G4_DstRegRegion *dstDbg0 =
1861
+ createDst (phyregpool.getDbgReg (), 0 , 0 , 1 , Type_UD);
1862
+ createMov (g4::SIMD1, dstDbg0, srcA0, InstOpt_WriteEnable, true );
1863
+ }
1858
1864
return createSrcRegRegion (exDescDecl, getRegionScalar ());
1859
1865
}
1860
1866
@@ -2192,6 +2198,12 @@ G4_SrcRegRegion *IR_Builder::createBindlessExDesc(uint32_t exdesc) {
2192
2198
createBinOp (G4_add, g4::SIMD1, dst, T252, createImm (exdesc, Type_UD),
2193
2199
InstOpt_WriteEnable, true );
2194
2200
}
2201
+ if (getOption (vISA_CopyA0ToDBG0)) {
2202
+ G4_SrcRegRegion *srcA0 = createSrcRegRegion (exDescDecl, getRegionScalar ());
2203
+ G4_DstRegRegion *dstDbg0 =
2204
+ createDst (phyregpool.getDbgReg (), 0 , 0 , 1 , Type_UD);
2205
+ createMov (g4::SIMD1, dstDbg0, srcA0, InstOpt_WriteEnable | dbgOpt, true );
2206
+ }
2195
2207
return createSrcRegRegion (exDescDecl, getRegionScalar ());
2196
2208
}
2197
2209
@@ -2271,6 +2283,12 @@ G4_InstSend *IR_Builder::createSendInst(G4_Predicate *pred,
2271
2283
}
2272
2284
}
2273
2285
2286
+ if (getOption (vISA_CopyA0ToDBG0)) {
2287
+ G4_SrcRegRegion *srcA0 = createSrcRegRegion (builtinA0, getRegionScalar ());
2288
+ G4_DstRegRegion *dstDbg0 =
2289
+ createDst (phyregpool.getDbgReg (), 0 , 0 , 1 , Type_UD);
2290
+ createMov (g4::SIMD1, dstDbg0, srcA0, InstOpt_WriteEnable, true );
2291
+ }
2274
2292
descOpnd = createSrcRegRegion (builtinA0, getRegionScalar ());
2275
2293
} else {
2276
2294
descOpnd = createImm (desc, Type_UD);
@@ -2394,6 +2412,13 @@ IR_Builder::createSplitSendInst(G4_Predicate *pred, G4_DstRegRegion *dst,
2394
2412
}
2395
2413
2396
2414
if (needsSurfaceMove || needsSamplerMove) {
2415
+ if (getOption (vISA_CopyA0ToDBG0)) {
2416
+ G4_SrcRegRegion *srcA0 = createSrcRegRegion (builtinA0, getRegionScalar ());
2417
+ G4_DstRegRegion *dstDbg0 =
2418
+ createDst (phyregpool.getDbgReg (), 0 , 0 , 1 , Type_UD);
2419
+ createMov (g4::SIMD1, dstDbg0, srcA0, InstOpt_WriteEnable, true );
2420
+ }
2421
+
2397
2422
descOpnd = createSrcRegRegion (builtinA0, getRegionScalar ());
2398
2423
} else {
2399
2424
descOpnd = createImm (desc, Type_UD);
@@ -2609,6 +2634,12 @@ G4_InstSend *IR_Builder::createLscSendInst(
2609
2634
}
2610
2635
}
2611
2636
2637
+ if (getOption (vISA_CopyA0ToDBG0)) {
2638
+ G4_SrcRegRegion *srcA0 = createSrcRegRegion (builtinA0Dot2, getRegionScalar ());
2639
+ G4_DstRegRegion *dstDbg0 =
2640
+ createDst (phyregpool.getDbgReg (), 0 , 0 , 1 , Type_UD);
2641
+ createMov (g4::SIMD1, dstDbg0, srcA0, InstOpt_WriteEnable, true );
2642
+ }
2612
2643
exDescOpnd = createSrcRegRegion (builtinA0Dot2, getRegionScalar ());
2613
2644
msgDesc->setSurface (exDescOpnd); // link a0.2 to the send descriptor
2614
2645
} else if (surface && surface->isImm ()) {
@@ -2631,6 +2662,12 @@ G4_InstSend *IR_Builder::createLscSendInst(
2631
2662
createMov (g4::SIMD1, addrDstOpnd, createImm (imm, Type_UD),
2632
2663
InstOpt_WriteEnable, true );
2633
2664
2665
+ if (getOption (vISA_CopyA0ToDBG0)) {
2666
+ G4_SrcRegRegion *srcA0 = createSrcRegRegion (builtinA0Dot2, getRegionScalar ());
2667
+ G4_DstRegRegion *dstDbg0 =
2668
+ createDst (phyregpool.getDbgReg (), 0 , 0 , 1 , Type_UD);
2669
+ createMov (g4::SIMD1, dstDbg0, srcA0, InstOpt_WriteEnable, true );
2670
+ }
2634
2671
exDescOpnd = createSrcRegRegion (builtinA0Dot2, getRegionScalar ());
2635
2672
msgDesc->setSurface (exDescOpnd); // link a0.2 to the send descriptor
2636
2673
} else {
@@ -2712,6 +2749,12 @@ G4_InstSend *IR_Builder::createSplitSendToRenderTarget(
2712
2749
G4_DstRegRegion *addrDstOpnd = createDstRegRegion (builtinA0, 1 );
2713
2750
createBinOp (G4_add, g4::SIMD1, addrDstOpnd, bti, createImm (desc, Type_UD),
2714
2751
InstOpt_WriteEnable, true );
2752
+ if (getOption (vISA_CopyA0ToDBG0)) {
2753
+ G4_SrcRegRegion *srcA0 = createSrcRegRegion (builtinA0, getRegionScalar ());
2754
+ G4_DstRegRegion *dstDbg0 =
2755
+ createDst (phyregpool.getDbgReg (), 0 , 0 , 1 , Type_UD);
2756
+ createMov (g4::SIMD1, dstDbg0, srcA0, InstOpt_WriteEnable, true );
2757
+ }
2715
2758
descOpnd = createSrcRegRegion (builtinA0, getRegionScalar ());
2716
2759
} else {
2717
2760
descOpnd = createImm (desc, Type_UD);
0 commit comments