@@ -2395,7 +2395,8 @@ bool CompileUnit::buildPrivateBaseRegBased(const DbgVariable &var,
2395
2395
LLVM_DEBUG (dbgs () << " PrivateBase(%X) + (%PerThreadOffset + "
2396
2396
" (simdSize*<var_offset>) + (simdLaneId * <var_size>))" );
2397
2397
2398
- const auto *storageMD = var.getDbgInst ()->getMetadata (" StorageOffset" );
2398
+ const auto *DbgInst = var.getDbgInst ();
2399
+ const auto *storageMD = DbgInst->getMetadata (" StorageOffset" );
2399
2400
IGC_ASSERT (storageMD != nullptr );
2400
2401
const auto *VISAMod = loc.GetVISAModule ();
2401
2402
auto privateBaseRegNum = VISAMod->getPrivateBaseReg ();
@@ -2414,6 +2415,7 @@ bool CompileUnit::buildPrivateBaseRegBased(const DbgVariable &var,
2414
2415
// Per Thread Offset 11 DW_OP_plus_uconst offset , i.e. simdSize * <variable
2415
2416
// offset> 12 DW_OP_INTEL_push_simd_lane 13 DW_OP_const1u/2u/4u/8u
2416
2417
// <variableSize> , i.e. size in bytes 14 DW_OP_mul 15 DW_OP_plus
2418
+ // 16 remaining opcodes from DIExpression
2417
2419
auto simdSize = VISAMod->GetSIMDSize ();
2418
2420
2419
2421
// Rely on getVarInfo result here.
@@ -2526,6 +2528,15 @@ bool CompileUnit::buildPrivateBaseRegBased(const DbgVariable &var,
2526
2528
addUInt (Block, dwarf::DW_FORM_data1, dwarf::DW_OP_mul); // 14 DW_OP_mul
2527
2529
addUInt (Block, dwarf::DW_FORM_data1, dwarf::DW_OP_plus); // 15 DW_OP_plus
2528
2530
2531
+ // 16 remaining opcodes from DIExpression
2532
+ const DIExpression *DIExpr = DbgInst->getExpression ();
2533
+ for (auto I = DIExpr->expr_op_begin (), E = DIExpr->expr_op_end (); I != E;
2534
+ ++I) {
2535
+ auto op = I->getOp ();
2536
+ auto BF = DIEInteger::BestForm (false , op);
2537
+ addUInt (Block, BF, op);
2538
+ }
2539
+
2529
2540
return true ;
2530
2541
}
2531
2542
0 commit comments