aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CGDebugInfo.cpp
diff options
context:
space:
mode:
authorWilliam Junda Huang <williamjhuang@google.com>2024-06-11 17:33:20 -0400
committerGitHub <noreply@github.com>2024-06-11 17:33:20 -0400
commit3fce14569fc3611eddca41db055143285244736a (patch)
tree6fa75c543d258d0e4ab249843d8cd7624b21e2fd /clang/lib/CodeGen/CGDebugInfo.cpp
parent438a7d4c982e0a38aaa6544a5ba6736d54600733 (diff)
downloadllvm-3fce14569fc3611eddca41db055143285244736a.zip
llvm-3fce14569fc3611eddca41db055143285244736a.tar.gz
llvm-3fce14569fc3611eddca41db055143285244736a.tar.bz2
Revert "Add option to generate additional debug info for expression dereferencing pointer to pointers. #94100" (#95174)
The option is causing the binary output to be different when compiled under `-O0`, because it introduce dbg.declare on pseudovariables. Going to change this implementation to use dbg.value instead.
Diffstat (limited to 'clang/lib/CodeGen/CGDebugInfo.cpp')
-rw-r--r--clang/lib/CodeGen/CGDebugInfo.cpp72
1 files changed, 0 insertions, 72 deletions
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp
index 11e2d54..99e12da 100644
--- a/clang/lib/CodeGen/CGDebugInfo.cpp
+++ b/clang/lib/CodeGen/CGDebugInfo.cpp
@@ -5746,78 +5746,6 @@ void CGDebugInfo::EmitExternalVariable(llvm::GlobalVariable *Var,
Var->addDebugInfo(GVE);
}
-void CGDebugInfo::EmitPseudoVariable(CGBuilderTy &Builder,
- llvm::Instruction *Value, QualType Ty) {
- // Only when -g2 or above is specified, debug info for variables will be
- // generated.
- if (CGM.getCodeGenOpts().getDebugInfo() <=
- llvm::codegenoptions::DebugLineTablesOnly)
- return;
-
- llvm::DebugLoc SaveDebugLoc = Builder.getCurrentDebugLocation();
- if (!SaveDebugLoc.get())
- return;
-
- llvm::DIFile *Unit = SaveDebugLoc->getFile();
- llvm::DIType *Type = getOrCreateType(Ty, Unit);
-
- // Check if Value is already a declared variable and has debug info, in this
- // case we have nothing to do. Clang emits declared variable as alloca, and
- // it is loaded upon use, so we identify such pattern here.
- if (llvm::LoadInst *Load = dyn_cast<llvm::LoadInst>(Value)) {
- llvm::Value *Var = Load->getPointerOperand();
- // There can be implicit type cast applied on a variable if it is an opaque
- // ptr, in this case its debug info may not match the actual type of object
- // being used as in the next instruction, so we will need to emit a pseudo
- // variable for type-casted value.
- auto DeclareTypeMatches = [&](auto *DbgDeclare) {
- return DbgDeclare->getVariable()->getType() == Type;
- };
- if (any_of(llvm::findDbgDeclares(Var), DeclareTypeMatches) ||
- any_of(llvm::findDVRDeclares(Var), DeclareTypeMatches))
- return;
- }
-
- // Find the correct location to insert a sequence of instructions to
- // materialize Value on the stack.
- auto SaveInsertionPoint = Builder.saveIP();
- if (llvm::InvokeInst *Invoke = dyn_cast<llvm::InvokeInst>(Value))
- Builder.SetInsertPoint(Invoke->getNormalDest()->begin());
- else if (llvm::Instruction *Next = Value->getIterator()->getNextNode())
- Builder.SetInsertPoint(Next);
- else
- Builder.SetInsertPoint(Value->getParent());
- llvm::DebugLoc DL = Value->getDebugLoc();
- if (DL.get())
- Builder.SetCurrentDebugLocation(DL);
- else if (!Builder.getCurrentDebugLocation().get())
- Builder.SetCurrentDebugLocation(SaveDebugLoc);
-
- llvm::AllocaInst *PseudoVar = Builder.CreateAlloca(Value->getType());
- Address PseudoVarAddr(PseudoVar, Value->getType(),
- CharUnits::fromQuantity(PseudoVar->getAlign()));
- llvm::LoadInst *Load = Builder.CreateLoad(PseudoVarAddr);
- Value->replaceAllUsesWith(Load);
- Builder.SetInsertPoint(Load);
- Builder.CreateStore(Value, PseudoVarAddr);
-
- // Emit debug info for materialized Value.
- unsigned Line = Builder.getCurrentDebugLocation().getLine();
- unsigned Column = Builder.getCurrentDebugLocation().getCol();
- llvm::DILocalVariable *D = DBuilder.createAutoVariable(
- LexicalBlockStack.back(), "", nullptr, 0, Type, false,
- llvm::DINode::FlagArtificial);
- llvm::DILocation *DIL =
- llvm::DILocation::get(CGM.getLLVMContext(), Line, Column,
- LexicalBlockStack.back(), CurInlinedAt);
- SmallVector<uint64_t> Expr;
- DBuilder.insertDeclare(PseudoVar, D, DBuilder.createExpression(Expr), DIL,
- Load);
-
- Builder.restoreIP(SaveInsertionPoint);
- Builder.SetCurrentDebugLocation(SaveDebugLoc);
-}
-
void CGDebugInfo::EmitGlobalAlias(const llvm::GlobalValue *GV,
const GlobalDecl GD) {