[PATCH] D141381: [codegen] Store address of indirect arguments on the stack

Felipe de Azevedo Piovezan via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 17 11:54:39 PST 2023


fdeazeve added a comment.

The code in Mem2Reg (Local.cpp) is wrong in the presence of DIExprs, but by luck we conservatively don't do anything.

The function below is roughly doing: "if this store covers the entire size of the `DIVar`, rewrite the dbg declare into a dbg value.
This is only correct if the `DIExpr` is empty. In most cases, "luckily" the size of a pointer doesn't match the size of the `DIVar`, but it should be possible to come up with IR examples where we generate invalid debug information in the presence of a `OP_deref`.

  /// Inserts a llvm.dbg.value intrinsic before a store to an alloca'd value
  /// that has an associated llvm.dbg.declare or llvm.dbg.addr intrinsic.
  void llvm::ConvertDebugDeclareToDebugValue(DbgVariableIntrinsic *DII,
                                             StoreInst *SI, DIBuilder &Builder) {
    assert(DII->isAddressOfVariable() || isa<DbgAssignIntrinsic>(DII));
    auto *DIVar = DII->getVariable();
    assert(DIVar && "Missing variable");
    auto *DIExpr = DII->getExpression();
    DIExpr->startsWithDeref();
    Value *DV = SI->getValueOperand();
  
    DebugLoc NewLoc = getDebugValueLoc(DII);
  
    if (!valueCoversEntireFragment(DV->getType(), DII)) {
      // FIXME: If storing to a part of the variable described by the dbg.declare,
      // then we want to insert a dbg.value for the corresponding fragment.
      LLVM_DEBUG(dbgs() << "Failed to convert dbg.declare to dbg.value: "
                        << *DII << '\n');
      // For now, when there is a store to parts of the variable (but we do not
      // know which part) we insert an dbg.value intrinsic to indicate that we
      // know nothing about the variable's content.
      DV = UndefValue::get(DV->getType());
      Builder.insertDbgValueIntrinsic(DV, DIVar, DIExpr, NewLoc, SI);
      return;
    }
  
    Builder.insertDbgValueIntrinsic(DV, DIVar, DIExpr, NewLoc, SI);
  }


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141381/new/

https://reviews.llvm.org/D141381



More information about the cfe-commits mailing list