[llvm] dc06d75 - Revert "[RemoveDIs] Print non-intrinsic debug info in textual IR output (#79281)"
Stephen Tozer via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 26 10:51:06 PST 2024
Author: Stephen Tozer
Date: 2024-02-26T18:49:18Z
New Revision: dc06d75ab27b4dcae2940fc386fadd06f70faffe
URL: https://github.com/llvm/llvm-project/commit/dc06d75ab27b4dcae2940fc386fadd06f70faffe
DIFF: https://github.com/llvm/llvm-project/commit/dc06d75ab27b4dcae2940fc386fadd06f70faffe.diff
LOG: Revert "[RemoveDIs] Print non-intrinsic debug info in textual IR output (#79281)"
Reverted due to failures on buildbots, where a new cl flag was placed
in the wrong file, resulting in link errors.
https://lab.llvm.org/buildbot/#/builders/198/builds/8548
This reverts commit 0b398256b3f72204ad1f7c625efe4990204e898a.
Added:
Modified:
llvm/include/llvm/IR/Module.h
llvm/include/llvm/IR/PrintPasses.h
llvm/lib/IR/AsmWriter.cpp
llvm/lib/IR/BasicBlock.cpp
llvm/lib/IR/IRPrintingPasses.cpp
llvm/lib/IR/Module.cpp
llvm/lib/IRPrinter/IRPrintingPasses.cpp
llvm/test/DebugInfo/Generic/inline-alloca-ordering.ll
llvm/test/DebugInfo/Generic/inline-dbg-values.ll
llvm/test/DebugInfo/dpvalue-print-nocrash.ll
llvm/test/Transforms/Attributor/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll
llvm/test/Transforms/CallSiteSplitting/callsite-split-preserve-debug.ll
llvm/test/Transforms/CodeGenPrepare/debug-info-on-skipped-selects.ll
llvm/test/Transforms/DeadArgElim/2010-04-30-DbgInfo.ll
llvm/test/Transforms/IROutliner/outlining-debug-statements.ll
llvm/test/Transforms/LoopRotate/dbgvalue.ll
llvm/test/Transforms/LoopRotate/delete-dbg-values.ll
llvm/test/Transforms/ObjCARC/ensure-that-exception-unwind-path-is-visited.ll
llvm/test/Transforms/SROA/dbg-inline.ll
Removed:
llvm/test/DebugInfo/print-non-instruction-debug-info.ll
################################################################################
diff --git a/llvm/include/llvm/IR/Module.h b/llvm/include/llvm/IR/Module.h
index f5f3c66f0ae1e4..68a89dc45c2834 100644
--- a/llvm/include/llvm/IR/Module.h
+++ b/llvm/include/llvm/IR/Module.h
@@ -218,18 +218,11 @@ class LLVM_EXTERNAL_VISIBILITY Module {
/// \ref BasicBlock.
bool IsNewDbgInfoFormat;
- /// Used when converting this module to the new debug info format; removes all
- /// declarations of debug intrinsics that are replaced by non-intrinsic
- /// records in the new format.
- void removeDebugIntrinsicDeclarations();
-
/// \see BasicBlock::convertToNewDbgValues.
void convertToNewDbgValues() {
for (auto &F : *this) {
F.convertToNewDbgValues();
}
- // Remove the declarations of the old debug intrinsics, if any exist.
- removeDebugIntrinsicDeclarations();
IsNewDbgInfoFormat = true;
}
@@ -241,13 +234,6 @@ class LLVM_EXTERNAL_VISIBILITY Module {
IsNewDbgInfoFormat = false;
}
- void setIsNewDbgInfoFormat(bool UseNewFormat) {
- if (UseNewFormat && !IsNewDbgInfoFormat)
- convertToNewDbgValues();
- else if (!UseNewFormat && IsNewDbgInfoFormat)
- convertFromNewDbgValues();
- }
-
/// The Module constructor. Note that there is no default constructor. You
/// must provide a name for the module upon construction.
explicit Module(StringRef ModuleID, LLVMContext& C);
diff --git a/llvm/include/llvm/IR/PrintPasses.h b/llvm/include/llvm/IR/PrintPasses.h
index 3803bd05cbe579..95b97e76c867cb 100644
--- a/llvm/include/llvm/IR/PrintPasses.h
+++ b/llvm/include/llvm/IR/PrintPasses.h
@@ -78,25 +78,6 @@ std::string doSystemDiff(StringRef Before, StringRef After,
StringRef OldLineFormat, StringRef NewLineFormat,
StringRef UnchangedLineFormat);
-/// Used to temporarily set the debug info format of a function, module, or
-/// basic block for the duration of this object's lifetime, after which the
-/// prior state will be restored.
-template <typename T> class ScopedDbgInfoFormatSetter {
- T &Obj;
- bool OldState;
-
-public:
- ScopedDbgInfoFormatSetter(T &Obj, bool NewState)
- : Obj(Obj), OldState(Obj.IsNewDbgInfoFormat) {
- Obj.setIsNewDbgInfoFormat(NewState);
- }
- ~ScopedDbgInfoFormatSetter() { Obj.setIsNewDbgInfoFormat(OldState); }
-};
-
-template <typename T>
-ScopedDbgInfoFormatSetter(T &Obj, bool NewState)
- -> ScopedDbgInfoFormatSetter<T>;
-
} // namespace llvm
#endif // LLVM_IR_PRINTPASSES_H
diff --git a/llvm/lib/IR/AsmWriter.cpp b/llvm/lib/IR/AsmWriter.cpp
index a3da6ca811489f..fba404c9b027cb 100644
--- a/llvm/lib/IR/AsmWriter.cpp
+++ b/llvm/lib/IR/AsmWriter.cpp
@@ -861,7 +861,7 @@ class SlotTracker : public AbstractSlotTrackerStorage {
/// Add all of the metadata from an instruction.
void processInstructionMetadata(const Instruction &I);
- /// Add all of the metadata from a DbgRecord.
+ /// Add all of the metadata from an instruction.
void processDbgRecordMetadata(const DbgRecord &DPV);
};
@@ -1140,9 +1140,6 @@ void SlotTracker::processFunctionMetadata(const Function &F) {
void SlotTracker::processDbgRecordMetadata(const DbgRecord &DR) {
if (const DPValue *DPV = dyn_cast<const DPValue>(&DR)) {
- // Process metadata used by DbgRecords; we only specifically care about the
- // DILocalVariable, DILocation, and DIAssignID fields, as the Value and
- // Expression fields should only be printed inline and so do not use a slot.
CreateMetadataSlot(DPV->getVariable());
if (DPV->isDbgAssign())
CreateMetadataSlot(DPV->getAssignID());
@@ -2706,7 +2703,6 @@ class AssemblyWriter {
void printDPValue(const DPValue &DPI);
void printDPLabel(const DPLabel &DPL);
void printDbgRecord(const DbgRecord &DPI);
- void printDbgRecordLine(const DbgRecord &DPI);
void printUseListOrder(const Value *V, const std::vector<unsigned> &Shuffle);
void printUseLists(const Function *F);
@@ -3889,6 +3885,9 @@ void AssemblyWriter::printTypeIdentities() {
/// printFunction - Print all aspects of a function.
void AssemblyWriter::printFunction(const Function *F) {
+ bool ConvertBack = F->IsNewDbgInfoFormat;
+ if (ConvertBack)
+ const_cast<Function *>(F)->convertFromNewDbgValues();
if (AnnotationWriter) AnnotationWriter->emitFunctionAnnot(F, Out);
if (F->isMaterializable())
@@ -4031,6 +4030,8 @@ void AssemblyWriter::printFunction(const Function *F) {
Out << "}\n";
}
+ if (ConvertBack)
+ const_cast<Function *>(F)->convertToNewDbgValues();
Machine.purgeFunction();
}
@@ -4097,8 +4098,6 @@ void AssemblyWriter::printBasicBlock(const BasicBlock *BB) {
// Output all of the instructions in the basic block...
for (const Instruction &I : *BB) {
- for (const DbgRecord &DR : I.getDbgValueRange())
- printDbgRecordLine(DR);
printInstructionLine(I);
}
@@ -4612,10 +4611,12 @@ void AssemblyWriter::printDbgRecord(const DbgRecord &DR) {
llvm_unreachable("Unexpected DbgRecord kind");
}
-void AssemblyWriter::printDPValue(const DPValue &DPV) {
- auto WriterCtx = getContext();
- Out << "#dbg_";
- switch (DPV.getType()) {
+void AssemblyWriter::printDPValue(const DPValue &Value) {
+ // There's no formal representation of a DPValue -- print purely as a
+ // debugging aid.
+ Out << " DPValue ";
+
+ switch (Value.getType()) {
case DPValue::LocationType::Value:
Out << "value";
break;
@@ -4628,39 +4629,35 @@ void AssemblyWriter::printDPValue(const DPValue &DPV) {
default:
llvm_unreachable("Tried to print a DPValue with an invalid LocationType!");
}
- Out << "(";
- WriteAsOperandInternal(Out, DPV.getRawLocation(), WriterCtx, true);
+ Out << " { ";
+ auto WriterCtx = getContext();
+ WriteAsOperandInternal(Out, Value.getRawLocation(), WriterCtx, true);
Out << ", ";
- WriteAsOperandInternal(Out, DPV.getVariable(), WriterCtx, true);
+ WriteAsOperandInternal(Out, Value.getVariable(), WriterCtx, true);
Out << ", ";
- WriteAsOperandInternal(Out, DPV.getExpression(), WriterCtx, true);
+ WriteAsOperandInternal(Out, Value.getExpression(), WriterCtx, true);
Out << ", ";
- if (DPV.isDbgAssign()) {
- WriteAsOperandInternal(Out, DPV.getAssignID(), WriterCtx, true);
+ if (Value.isDbgAssign()) {
+ WriteAsOperandInternal(Out, Value.getAssignID(), WriterCtx, true);
Out << ", ";
- WriteAsOperandInternal(Out, DPV.getRawAddress(), WriterCtx, true);
+ WriteAsOperandInternal(Out, Value.getRawAddress(), WriterCtx, true);
Out << ", ";
- WriteAsOperandInternal(Out, DPV.getAddressExpression(), WriterCtx, true);
+ WriteAsOperandInternal(Out, Value.getAddressExpression(), WriterCtx, true);
Out << ", ";
}
- WriteAsOperandInternal(Out, DPV.getDebugLoc().getAsMDNode(), WriterCtx, true);
- Out << ")";
-}
-
-/// printDbgRecordLine - Print a DbgRecord with indentation and a newline
-/// character.
-void AssemblyWriter::printDbgRecordLine(const DbgRecord &DR) {
- // Print lengthier indentation to bring out-of-line with instructions.
- Out << " ";
- printDbgRecord(DR);
- Out << '\n';
+ WriteAsOperandInternal(Out, Value.getDebugLoc().get(), WriterCtx, true);
+ Out << " marker @" << Value.getMarker();
+ Out << " }";
}
void AssemblyWriter::printDPLabel(const DPLabel &Label) {
+ // There's no formal representation of a DPLabel -- print purely as
+ // a debugging aid.
+ Out << " DPLabel { ";
auto WriterCtx = getContext();
- Out << "#dbg_label(";
WriteAsOperandInternal(Out, Label.getLabel(), WriterCtx, true);
- Out << ")";
+ Out << " marker @" << Label.getMarker();
+ Out << " }";
}
void AssemblyWriter::printMetadataAttachments(
@@ -4808,11 +4805,19 @@ void BasicBlock::print(raw_ostream &ROS, AssemblyAnnotationWriter *AAW,
void Module::print(raw_ostream &ROS, AssemblyAnnotationWriter *AAW,
bool ShouldPreserveUseListOrder, bool IsForDebug) const {
+ // RemoveDIs: always print with debug-info in intrinsic format.
+ bool ConvertAfter = IsNewDbgInfoFormat;
+ if (IsNewDbgInfoFormat)
+ const_cast<Module *>(this)->convertFromNewDbgValues();
+
SlotTracker SlotTable(this);
formatted_raw_ostream OS(ROS);
AssemblyWriter W(OS, SlotTable, this, AAW, IsForDebug,
ShouldPreserveUseListOrder);
W.printModule(this);
+
+ if (ConvertAfter)
+ const_cast<Module *>(this)->convertToNewDbgValues();
}
void NamedMDNode::print(raw_ostream &ROS, bool IsForDebug) const {
@@ -4903,6 +4908,8 @@ void DPValue::print(raw_ostream &ROS, bool IsForDebug) const {
void DPMarker::print(raw_ostream &ROS, ModuleSlotTracker &MST,
bool IsForDebug) const {
+ // There's no formal representation of a DPMarker -- print purely as a
+ // debugging aid.
formatted_raw_ostream OS(ROS);
SlotTracker EmptySlotTable(static_cast<const Module *>(nullptr));
SlotTracker &SlotTable =
@@ -4924,6 +4931,8 @@ void DPLabel::print(raw_ostream &ROS, bool IsForDebug) const {
void DPValue::print(raw_ostream &ROS, ModuleSlotTracker &MST,
bool IsForDebug) const {
+ // There's no formal representation of a DPValue -- print purely as a
+ // debugging aid.
formatted_raw_ostream OS(ROS);
SlotTracker EmptySlotTable(static_cast<const Module *>(nullptr));
SlotTracker &SlotTable =
@@ -4941,6 +4950,8 @@ void DPValue::print(raw_ostream &ROS, ModuleSlotTracker &MST,
void DPLabel::print(raw_ostream &ROS, ModuleSlotTracker &MST,
bool IsForDebug) const {
+ // There's no formal representation of a DbgLabelRecord -- print purely as
+ // a debugging aid.
formatted_raw_ostream OS(ROS);
SlotTracker EmptySlotTable(static_cast<const Module *>(nullptr));
SlotTracker &SlotTable =
diff --git a/llvm/lib/IR/BasicBlock.cpp b/llvm/lib/IR/BasicBlock.cpp
index c110c4c1437c30..6ea876fde5ec66 100644
--- a/llvm/lib/IR/BasicBlock.cpp
+++ b/llvm/lib/IR/BasicBlock.cpp
@@ -61,6 +61,10 @@ DPMarker *BasicBlock::createMarker(InstListType::iterator It) {
}
void BasicBlock::convertToNewDbgValues() {
+ // Is the command line option set?
+ if (!UseNewDbgInfoFormat)
+ return;
+
IsNewDbgInfoFormat = true;
// Iterate over all instructions in the instruction list, collecting dbg.value
diff --git a/llvm/lib/IR/IRPrintingPasses.cpp b/llvm/lib/IR/IRPrintingPasses.cpp
index 7b4f66a908c598..b19210e776ed5c 100644
--- a/llvm/lib/IR/IRPrintingPasses.cpp
+++ b/llvm/lib/IR/IRPrintingPasses.cpp
@@ -23,8 +23,6 @@
using namespace llvm;
-extern cl::opt<bool> WriteNewDbgInfoFormat;
-
namespace {
class PrintModulePassWrapper : public ModulePass {
@@ -41,9 +39,11 @@ class PrintModulePassWrapper : public ModulePass {
ShouldPreserveUseListOrder(ShouldPreserveUseListOrder) {}
bool runOnModule(Module &M) override {
- // RemoveDIs: Regardless of the format we've processed this module in, use
- // `WriteNewDbgInfoFormat` to determine which format we use to write it.
- ScopedDbgInfoFormatSetter FormatSetter(M, WriteNewDbgInfoFormat);
+ // RemoveDIs: there's no textual representation of the DPValue debug-info,
+ // convert to dbg.values before writing out.
+ bool IsNewDbgInfoFormat = M.IsNewDbgInfoFormat;
+ if (IsNewDbgInfoFormat)
+ M.convertFromNewDbgValues();
if (llvm::isFunctionInPrintList("*")) {
if (!Banner.empty())
@@ -62,6 +62,9 @@ class PrintModulePassWrapper : public ModulePass {
}
}
+ if (IsNewDbgInfoFormat)
+ M.convertToNewDbgValues();
+
return false;
}
@@ -84,9 +87,11 @@ class PrintFunctionPassWrapper : public FunctionPass {
// This pass just prints a banner followed by the function as it's processed.
bool runOnFunction(Function &F) override {
- // RemoveDIs: Regardless of the format we've processed this function in, use
- // `WriteNewDbgInfoFormat` to determine which format we use to write it.
- ScopedDbgInfoFormatSetter FormatSetter(F, WriteNewDbgInfoFormat);
+ // RemoveDIs: there's no textual representation of the DPValue debug-info,
+ // convert to dbg.values before writing out.
+ bool IsNewDbgInfoFormat = F.IsNewDbgInfoFormat;
+ if (IsNewDbgInfoFormat)
+ F.convertFromNewDbgValues();
if (isFunctionInPrintList(F.getName())) {
if (forcePrintModuleIR())
@@ -96,6 +101,9 @@ class PrintFunctionPassWrapper : public FunctionPass {
OS << Banner << '\n' << static_cast<Value &>(F);
}
+ if (IsNewDbgInfoFormat)
+ F.convertToNewDbgValues();
+
return false;
}
diff --git a/llvm/lib/IR/Module.cpp b/llvm/lib/IR/Module.cpp
index a8696ed9e3ce5d..1946db2ee0be7e 100644
--- a/llvm/lib/IR/Module.cpp
+++ b/llvm/lib/IR/Module.cpp
@@ -85,28 +85,6 @@ Module::~Module() {
IFuncList.clear();
}
-void Module::removeDebugIntrinsicDeclarations() {
- auto *DeclareIntrinsicFn =
- Intrinsic::getDeclaration(this, Intrinsic::dbg_declare);
- assert((!isMaterialized() || DeclareIntrinsicFn->hasZeroLiveUses()) &&
- "Debug declare intrinsic should have had uses removed.");
- DeclareIntrinsicFn->eraseFromParent();
- auto *ValueIntrinsicFn =
- Intrinsic::getDeclaration(this, Intrinsic::dbg_value);
- assert((!isMaterialized() || ValueIntrinsicFn->hasZeroLiveUses()) &&
- "Debug value intrinsic should have had uses removed.");
- ValueIntrinsicFn->eraseFromParent();
- auto *AssignIntrinsicFn =
- Intrinsic::getDeclaration(this, Intrinsic::dbg_assign);
- assert((!isMaterialized() || AssignIntrinsicFn->hasZeroLiveUses()) &&
- "Debug assign intrinsic should have had uses removed.");
- AssignIntrinsicFn->eraseFromParent();
- auto *LabelntrinsicFn = Intrinsic::getDeclaration(this, Intrinsic::dbg_label);
- assert((!isMaterialized() || LabelntrinsicFn->hasZeroLiveUses()) &&
- "Debug label intrinsic should have had uses removed.");
- LabelntrinsicFn->eraseFromParent();
-}
-
std::unique_ptr<RandomNumberGenerator>
Module::createRNG(const StringRef Name) const {
SmallString<32> Salt(Name);
diff --git a/llvm/lib/IRPrinter/IRPrintingPasses.cpp b/llvm/lib/IRPrinter/IRPrintingPasses.cpp
index 340f4fa6bfc840..52b242b4dcd52a 100644
--- a/llvm/lib/IRPrinter/IRPrintingPasses.cpp
+++ b/llvm/lib/IRPrinter/IRPrintingPasses.cpp
@@ -22,11 +22,6 @@
using namespace llvm;
-cl::opt<bool> WriteNewDbgInfoFormat(
- "write-experimental-debuginfo",
- cl::desc("Write debug info in the new non-intrinsic format"),
- cl::init(false));
-
PrintModulePass::PrintModulePass() : OS(dbgs()) {}
PrintModulePass::PrintModulePass(raw_ostream &OS, const std::string &Banner,
bool ShouldPreserveUseListOrder,
@@ -36,9 +31,11 @@ PrintModulePass::PrintModulePass(raw_ostream &OS, const std::string &Banner,
EmitSummaryIndex(EmitSummaryIndex) {}
PreservedAnalyses PrintModulePass::run(Module &M, ModuleAnalysisManager &AM) {
- // RemoveDIs: Regardless of the format we've processed this module in, use
- // `WriteNewDbgInfoFormat` to determine which format we use to write it.
- ScopedDbgInfoFormatSetter FormatSetter(M, WriteNewDbgInfoFormat);
+ // RemoveDIs: there's no textual representation of the DPValue debug-info,
+ // convert to dbg.values before writing out.
+ bool ShouldConvert = M.IsNewDbgInfoFormat;
+ if (ShouldConvert)
+ M.convertFromNewDbgValues();
if (llvm::isFunctionInPrintList("*")) {
if (!Banner.empty())
@@ -66,6 +63,9 @@ PreservedAnalyses PrintModulePass::run(Module &M, ModuleAnalysisManager &AM) {
Index->print(OS);
}
+ if (ShouldConvert)
+ M.convertToNewDbgValues();
+
return PreservedAnalyses::all();
}
@@ -75,9 +75,11 @@ PrintFunctionPass::PrintFunctionPass(raw_ostream &OS, const std::string &Banner)
PreservedAnalyses PrintFunctionPass::run(Function &F,
FunctionAnalysisManager &) {
- // RemoveDIs: Regardless of the format we've processed this function in, use
- // `WriteNewDbgInfoFormat` to determine which format we use to write it.
- ScopedDbgInfoFormatSetter FormatSetter(F, WriteNewDbgInfoFormat);
+ // RemoveDIs: there's no textual representation of the DPValue debug-info,
+ // convert to dbg.values before writing out.
+ bool ShouldConvert = F.IsNewDbgInfoFormat;
+ if (ShouldConvert)
+ F.convertFromNewDbgValues();
if (isFunctionInPrintList(F.getName())) {
if (forcePrintModuleIR())
@@ -86,5 +88,8 @@ PreservedAnalyses PrintFunctionPass::run(Function &F,
OS << Banner << '\n' << static_cast<Value &>(F);
}
+ if (ShouldConvert)
+ F.convertToNewDbgValues();
+
return PreservedAnalyses::all();
}
diff --git a/llvm/test/DebugInfo/Generic/inline-alloca-ordering.ll b/llvm/test/DebugInfo/Generic/inline-alloca-ordering.ll
index 9f401ceb5b6f4d..9ff3d80af80d1e 100644
--- a/llvm/test/DebugInfo/Generic/inline-alloca-ordering.ll
+++ b/llvm/test/DebugInfo/Generic/inline-alloca-ordering.ll
@@ -15,6 +15,8 @@
;; doesn't transfer the dbg.value to the entry block. This needs Special
;; Handling once we get rid of debug-intrinsics.
+; CHECK: declare void @llvm.dbg.value(metadata,
+
; CHECK: define i32 @bar()
; CHECK-NEXT: %1 = alloca [65 x i32], align 16
; CHECK-NEXT: call void @ext()
@@ -22,10 +24,9 @@
; CHECK-NEXT: call void @llvm.dbg.value(metadata i32 0, metadata !10, metadata !DIExpression()), !dbg !12
; CHECK-NEXT: call void @init(ptr %1)
-; CHECK: declare void @llvm.dbg.value(metadata,
-
declare void @ext()
declare void @init(ptr)
+declare void @llvm.dbg.value(metadata, metadata, metadata)
define internal i32 @foo() !dbg !4 {
%1 = alloca [65 x i32], align 16
@@ -41,8 +42,6 @@ define i32 @bar() !dbg !16 {
ret i32 %1
}
-declare void @llvm.dbg.value(metadata, metadata, metadata)
-
!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!8, !9}
!llvm.ident = !{!10}
diff --git a/llvm/test/DebugInfo/Generic/inline-dbg-values.ll b/llvm/test/DebugInfo/Generic/inline-dbg-values.ll
index b0390b9f78f418..7d580d6fba37a9 100644
--- a/llvm/test/DebugInfo/Generic/inline-dbg-values.ll
+++ b/llvm/test/DebugInfo/Generic/inline-dbg-values.ll
@@ -7,6 +7,8 @@
;;
;; test should be inlined into test2
+; CHECK: declare void @llvm.dbg.value(metadata,
+
; CHECK: define i32 @test2
; CHECK-NEXT: entry:
; CHECK: %k.addr.i = alloca i32, align 4
@@ -45,8 +47,6 @@
; CHECK-NEXT: call void @llvm.dbg.value(metadata i32 1, metadata ![[KVAR]], metadata !DIExpression()), !dbg ![[KLINE]]
; CHECK-NEXT: call void @llvm.dbg.value(metadata i32 1, metadata ![[K2VAR]], metadata !DIExpression()), !dbg ![[GLINE]]
;
-; CHECK: declare void @llvm.dbg.value(metadata,
-;
;; Test that the metadata maps onto the correct things, and that the DILocations
;; attached to the intrinsics have been inlined.
;
@@ -100,6 +100,8 @@ return: ; preds = %if.end, %if.then
ret i32 %3, !dbg !20
}
+declare void @llvm.dbg.value(metadata, metadata, metadata) #1
+
declare i32 @_Z8test_exti(i32)
define i32 @test2(i32 %foo, i32 %bar) !dbg !10 {
@@ -116,8 +118,6 @@ try.cont: ; preds = %catch, %invoke.cont
ret i32 0, !dbg !30
}
-declare void @llvm.dbg.value(metadata, metadata, metadata) #1
-
!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!31}
diff --git a/llvm/test/DebugInfo/dpvalue-print-nocrash.ll b/llvm/test/DebugInfo/dpvalue-print-nocrash.ll
index 0a618c6780d1d8..9f120af13ac9c8 100755
--- a/llvm/test/DebugInfo/dpvalue-print-nocrash.ll
+++ b/llvm/test/DebugInfo/dpvalue-print-nocrash.ll
@@ -2,7 +2,8 @@
; RUN: opt -passes="instcombine" -debug %s -o /dev/null 2>&1 | FileCheck %s
; REQUIRES: asserts
-; CHECK: CLONE: #dbg_value(
+; CHECK: CLONE: DPValue value {
+; CHECK-SAME: marker @0x0
define ptr @func_10(i32 %p_11) {
entry:
diff --git a/llvm/test/DebugInfo/print-non-instruction-debug-info.ll b/llvm/test/DebugInfo/print-non-instruction-debug-info.ll
deleted file mode 100644
index f8271df146fe96..00000000000000
--- a/llvm/test/DebugInfo/print-non-instruction-debug-info.ll
+++ /dev/null
@@ -1,86 +0,0 @@
-;; Test that we can write in the new debug info format.
-; RUN: opt --passes=verify -S --experimental-debuginfo-iterators=false --write-experimental-debuginfo=false < %s \
-; RUN: | FileCheck %s --check-prefixes=CHECK,OLDDBG --implicit-check-not=llvm.dbg
-; RUN: opt --passes=verify -S --experimental-debuginfo-iterators=false --write-experimental-debuginfo=true < %s \
-; RUN: | FileCheck %s --check-prefixes=CHECK,NEWDBG --implicit-check-not=llvm.dbg
-
-;; Test also that the new flag is independent of the flag that enables use of
-;; these non-instruction debug info during LLVM passes.
-; RUN: opt --passes=verify -S --experimental-debuginfo-iterators=true --write-experimental-debuginfo=false < %s \
-; RUN: | FileCheck %s --check-prefixes=CHECK,OLDDBG --implicit-check-not=llvm.dbg
-; RUN: opt --passes=verify -S --experimental-debuginfo-iterators=true --write-experimental-debuginfo=true < %s \
-; RUN: | FileCheck %s --check-prefixes=CHECK,NEWDBG --implicit-check-not=llvm.dbg
-
-; CHECK: @f(i32 %[[VAL_A:[0-9a-zA-Z]+]])
-; CHECK-NEXT: entry:
-; OLDDBG-NEXT: call void @llvm.dbg.value(metadata i32 %[[VAL_A]], metadata ![[VAR_A:[0-9]+]], metadata !DIExpression()), !dbg ![[LOC_1:[0-9]+]]
-; NEWDBG-NEXT: {{^}} #dbg_value(i32 %[[VAL_A]], ![[VAR_A:[0-9]+]], !DIExpression(), ![[LOC_1:[0-9]+]])
-; CHECK-NEXT: {{^}} %[[VAL_B:[0-9a-zA-Z]+]] = alloca
-; OLDDBG-NEXT: call void @llvm.dbg.declare(metadata ptr %[[VAL_B]], metadata ![[VAR_B:[0-9]+]], metadata !DIExpression()), !dbg ![[LOC_2:[0-9]+]]
-; NEWDBG-NEXT: {{^}} #dbg_declare(ptr %[[VAL_B]], ![[VAR_B:[0-9]+]], !DIExpression(), ![[LOC_2:[0-9]+]])
-; CHECK-NEXT: {{^}} %[[VAL_ADD:[0-9a-zA-Z]+]] = add i32 %[[VAL_A]], 5
-; OLDDBG-NEXT: call void @llvm.dbg.value(metadata !DIArgList(i32 %[[VAL_A]], i32 %[[VAL_ADD]]), metadata ![[VAR_A]], metadata !DIExpression(DW_OP_LLVM_arg, 0, DW_OP_LLVM_arg, 1, DW_OP_plus)), !dbg ![[LOC_3:[0-9]+]]
-; NEWDBG-NEXT: {{^}} #dbg_value(!DIArgList(i32 %[[VAL_A]], i32 %[[VAL_ADD]]), ![[VAR_A]], !DIExpression(DW_OP_LLVM_arg, 0, DW_OP_LLVM_arg, 1, DW_OP_plus), ![[LOC_3:[0-9]+]])
-; OLDDBG-NEXT: call void @llvm.dbg.label(metadata ![[LABEL_ID:[0-9]+]])
-; NEWDBG-NEXT: {{^}} #dbg_label(![[LABEL_ID:[0-9]+]])
-; CHECK-NEXT: {{^}} store i32 %[[VAL_ADD]]{{.+}}, !DIAssignID ![[ASSIGNID:[0-9]+]]
-; OLDDBG-NEXT: call void @llvm.dbg.assign(metadata i32 %[[VAL_ADD]], metadata ![[VAR_B]], metadata !DIExpression(), metadata ![[ASSIGNID]], metadata ptr %[[VAL_B]], metadata !DIExpression()), !dbg ![[LOC_4:[0-9]+]]
-; NEWDBG-NEXT: {{^}} #dbg_assign(i32 %[[VAL_ADD]], ![[VAR_B]], !DIExpression(), ![[ASSIGNID]], ptr %[[VAL_B]], !DIExpression(), ![[LOC_4:[0-9]+]])
-; CHECK-NEXT: {{^}} ret i32
-
-; OLDDBG-DAG: declare void @llvm.dbg.value
-; OLDDBG-DAG: declare void @llvm.dbg.declare
-; OLDDBG-DAG: declare void @llvm.dbg.assign
-
-; CHECK-DAG: llvm.dbg.cu
-; CHECK-DAG: ![[VAR_A]] = !DILocalVariable(name: "a"
-; CHECK-DAG: ![[VAR_B]] = !DILocalVariable(name: "b"
-; CHECK-DAG: ![[LOC_1]] = !DILocation(line: 3, column: 15
-; CHECK-DAG: ![[LOC_2]] = !DILocation(line: 3, column: 20
-; CHECK-DAG: ![[LOC_3]] = !DILocation(line: 3, column: 25
-; CHECK-DAG: ![[LOC_4]] = !DILocation(line: 3, column: 30
-; CHECK-DAG: ![[LABEL_ID]] = !DILabel(
-
-define dso_local i32 @f(i32 %a) !dbg !7 {
-entry:
- call void @llvm.dbg.value(metadata i32 %a, metadata !20, metadata !DIExpression()), !dbg !30
- %b = alloca i32, !dbg !30, !DIAssignID !40
- call void @llvm.dbg.declare(metadata ptr %b, metadata !21, metadata !DIExpression()), !dbg !31
- %add = add i32 %a, 5, !dbg !31
- call void @llvm.dbg.value(metadata !DIArgList(i32 %a, i32 %add), metadata !20, metadata !DIExpression(DW_OP_LLVM_arg, 0, DW_OP_LLVM_arg, 1, DW_OP_plus)), !dbg !32
- call void @llvm.dbg.label(metadata !50), !dbg !32
- store i32 %add, ptr %b, !dbg !32, !DIAssignID !40
- call void @llvm.dbg.assign(metadata i32 %add, metadata !21, metadata !DIExpression(), metadata !40, metadata ptr %b, metadata !DIExpression()), !dbg !33
- ret i32 %add, !dbg !33
-
-}
-
-declare void @llvm.dbg.value(metadata, metadata, metadata)
-declare void @llvm.dbg.declare(metadata, metadata, metadata)
-declare void @llvm.dbg.assign(metadata, metadata, metadata, metadata, metadata, metadata)
-declare void @llvm.dbg.label(metadata)
-
-!llvm.dbg.cu = !{!0}
-!llvm.module.flags = !{!3, !4, !5}
-!llvm.ident = !{!6}
-
-!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 18.0.0", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, nameTableKind: None)
-!1 = !DIFile(filename: "print.c", directory: "/tmp")
-!2 = !{}
-!3 = !{i32 2, !"Dwarf Version", i32 5}
-!4 = !{i32 2, !"Debug Info Version", i32 3}
-!5 = !{i32 1, !"wchar_size", i32 4}
-!6 = !{!"clang version 18.0.0"}
-!7 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 3, type: !8, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !13)
-!8 = !DISubroutineType(types: !9)
-!9 = !{!12, !12}
-!12 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
-!13 = !{!20, !21}
-!20 = !DILocalVariable(name: "a", arg: 1, scope: !7, file: !1, line: 3, type: !12)
-!21 = !DILocalVariable(name: "b", scope: !7, file: !1, line: 3, type: !12)
-!30 = !DILocation(line: 3, column: 15, scope: !7)
-!31 = !DILocation(line: 3, column: 20, scope: !7)
-!32 = !DILocation(line: 3, column: 25, scope: !7)
-!33 = !DILocation(line: 3, column: 30, scope: !7)
-!40 = distinct !DIAssignID()
-!50 = !DILabel(scope: !7, name: "label", file: !1, line: 3)
diff --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll
index e0777f9ecee8be..83226e56b5acd9 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll
@@ -30,7 +30,8 @@ define internal void @bar(%p_t %p) {
; CGSCC: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
; CGSCC-LABEL: define {{[^@]+}}@bar
; CGSCC-SAME: (ptr nocapture nofree readnone [[P:%.*]]) #[[ATTR0]] {
-; CGSCC-NEXT: tail call void @llvm.dbg.value(metadata ptr [[P]], metadata [[META3:![0-9]+]], metadata !DIExpression()), !dbg [[DBG5:![0-9]+]]
+; CGSCC-NEXT: call void @llvm.dbg.value(metadata ptr [[P]], metadata [[META3:![0-9]+]], metadata !DIExpression())
+; CGSCC-SAME: !dbg [[DBG5:![0-9]+]]
; CGSCC-NEXT: ret void
;
call void @llvm.dbg.value(metadata %p_t %p, metadata !4, metadata !5), !dbg !6
@@ -51,20 +52,21 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
!6 = !DILocation(line: 1, column: 1, scope: !3)
;.
; TUNIT: attributes #[[ATTR0]] = { mustprogress nofree norecurse nosync nounwind willreturn memory(none) }
+; TUNIT: attributes #[[ATTR1:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
;.
; CGSCC: attributes #[[ATTR0]] = { mustprogress nofree norecurse nosync nounwind willreturn memory(none) }
; CGSCC: attributes #[[ATTR1:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
;.
-; TUNIT: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C, file: [[META1:![0-9]+]], isOptimized: false, runtimeVersion: 0, emissionKind: NoDebug)
-; TUNIT: [[META1]] = !DIFile(filename: "test.c", directory: "")
+; TUNIT: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C, file: !1, isOptimized: false, runtimeVersion: 0, emissionKind: NoDebug)
+; TUNIT: [[META1:![0-9]+]] = !DIFile(filename: "test.c", directory: "")
; TUNIT: [[META2:![0-9]+]] = !{i32 2, !"Debug Info Version", i32 3}
;.
-; CGSCC: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C, file: [[META1:![0-9]+]], isOptimized: false, runtimeVersion: 0, emissionKind: NoDebug)
-; CGSCC: [[META1]] = !DIFile(filename: "test.c", directory: "")
+; CGSCC: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C, file: !1, isOptimized: false, runtimeVersion: 0, emissionKind: NoDebug)
+; CGSCC: [[META1:![0-9]+]] = !DIFile(filename: "test.c", directory: "")
; CGSCC: [[META2:![0-9]+]] = !{i32 2, !"Debug Info Version", i32 3}
-; CGSCC: [[META3]] = !DILocalVariable(name: "p", scope: [[META4:![0-9]+]])
-; CGSCC: [[META4]] = distinct !DISubprogram(name: "bar", scope: null, spFlags: DISPFlagDefinition, unit: [[META0]])
-; CGSCC: [[DBG5]] = !DILocation(line: 1, column: 1, scope: [[META4]])
+; CGSCC: [[META3]] = !DILocalVariable(name: "p", scope: !4)
+; CGSCC: [[META4:![0-9]+]] = distinct !DISubprogram(name: "bar", scope: null, spFlags: DISPFlagDefinition, unit: !0)
+; CGSCC: [[DBG5]] = !DILocation(line: 1, column: 1, scope: !4)
;.
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
; TUNIT: {{.*}}
diff --git a/llvm/test/Transforms/CallSiteSplitting/callsite-split-preserve-debug.ll b/llvm/test/Transforms/CallSiteSplitting/callsite-split-preserve-debug.ll
index 3fdf62bf575020..e185286304a686 100644
--- a/llvm/test/Transforms/CallSiteSplitting/callsite-split-preserve-debug.ll
+++ b/llvm/test/Transforms/CallSiteSplitting/callsite-split-preserve-debug.ll
@@ -3,6 +3,8 @@
;; Test that DebugLocs are preserved, and that dbg.values are duplicated.
+; CHECK: declare void @llvm.dbg.value(metadata,
+
; CHECK-LABEL: @test1
; CHECK: call void @llvm.dbg.value(metadata i32 0,
; CHECK-NEXT: [[R1:%.+]] = call i32 @callee(i32 0, i32 %dd), !dbg [[DBG1:!.*]]
@@ -41,8 +43,6 @@ CallSite: ; preds = %land.rhs, %entry
; CHECK-NEXT: phi i32 [ [[R1]], %Header.split ], [ [[R2]], %TBB.split ], !dbg [[DBG_CALL]]
; CHECK-NEXT: call void @llvm.dbg.value(metadata i32 1,
-; CHECK: declare void @llvm.dbg.value(metadata,
-
define void @test2(ptr %ptr, i32 %i) !dbg !19 {
Header:
%tobool = icmp ne i32 %i, 10
diff --git a/llvm/test/Transforms/CodeGenPrepare/debug-info-on-skipped-selects.ll b/llvm/test/Transforms/CodeGenPrepare/debug-info-on-skipped-selects.ll
index ce34b16a4d7a30..ffd4a0170ac9d4 100644
--- a/llvm/test/Transforms/CodeGenPrepare/debug-info-on-skipped-selects.ll
+++ b/llvm/test/Transforms/CodeGenPrepare/debug-info-on-skipped-selects.ll
@@ -5,8 +5,8 @@
; Test that when we skip over multiple selects in CGP, that the debug-info
; attached to those selects is still fixed up.
-; CHECK: call void @llvm.dbg.value(metadata ptr %sunkaddr,
; CHECK: declare void @llvm.dbg.value(metadata,
+; CHECK: call void @llvm.dbg.value(metadata ptr %sunkaddr,
source_filename = "reduced.ll"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
diff --git a/llvm/test/Transforms/DeadArgElim/2010-04-30-DbgInfo.ll b/llvm/test/Transforms/DeadArgElim/2010-04-30-DbgInfo.ll
index d84dd10e7d28bf..0dee72f4f6b6fe 100644
--- a/llvm/test/Transforms/DeadArgElim/2010-04-30-DbgInfo.ll
+++ b/llvm/test/Transforms/DeadArgElim/2010-04-30-DbgInfo.ll
@@ -8,21 +8,12 @@
define ptr @vfs_addname(ptr %name, i32 %len, i32 %hash, i32 %flags) nounwind ssp !dbg !1 {
;
-; CHECK-LABEL: define {{[^@]+}}@vfs_addname
-; CHECK-SAME: (ptr [[NAME:%.*]], i32 [[LEN:%.*]], i32 [[HASH:%.*]], i32 [[FLAGS:%.*]]) #[[ATTR0:[0-9]+]] !dbg [[DBG4:![0-9]+]] {
-; CHECK-NEXT: entry:
-; CHECK-NEXT: tail call void @llvm.dbg.value(metadata ptr [[NAME]], metadata [[META11:![0-9]+]], metadata !DIExpression()), !dbg [[DBG12:![0-9]+]]
-; CHECK-NEXT: tail call void @llvm.dbg.value(metadata i32 [[LEN]], metadata [[META13:![0-9]+]], metadata !DIExpression()), !dbg [[DBG12]]
-; CHECK-NEXT: tail call void @llvm.dbg.value(metadata i32 [[HASH]], metadata [[META14:![0-9]+]], metadata !DIExpression()), !dbg [[DBG12]]
-; CHECK-NEXT: tail call void @llvm.dbg.value(metadata i32 [[FLAGS]], metadata [[META15:![0-9]+]], metadata !DIExpression()), !dbg [[DBG12]]
-; CHECK-NEXT: [[TMP0:%.*]] = call fastcc ptr @add_name_internal(ptr [[NAME]], i32 [[HASH]]) #[[ATTR3:[0-9]+]], !dbg [[DBG16:![0-9]+]]
-; CHECK-NEXT: ret ptr [[TMP0]], !dbg [[DBG16]]
-;
entry:
call void @llvm.dbg.value(metadata ptr %name, metadata !0, metadata !DIExpression()), !dbg !DILocation(scope: !1)
call void @llvm.dbg.value(metadata i32 %len, metadata !10, metadata !DIExpression()), !dbg !DILocation(scope: !1)
call void @llvm.dbg.value(metadata i32 %hash, metadata !11, metadata !DIExpression()), !dbg !DILocation(scope: !1)
call void @llvm.dbg.value(metadata i32 %flags, metadata !12, metadata !DIExpression()), !dbg !DILocation(scope: !1)
+; CHECK: call fastcc ptr @add_name_internal(ptr %name, i32 %hash) [[NUW:#[0-9]+]], !dbg !{{[0-9]+}}
%0 = call fastcc ptr @add_name_internal(ptr %name, i32 %len, i32 %hash, i8 zeroext 0, i32 %flags) nounwind, !dbg !13 ; <ptr> [#uses=1]
ret ptr %0, !dbg !13
}
@@ -31,24 +22,6 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone
define internal fastcc ptr @add_name_internal(ptr %name, i32 %len, i32 %hash, i8 zeroext %extra, i32 %flags) noinline nounwind ssp !dbg !16 {
;
-; CHECK-LABEL: define {{[^@]+}}@add_name_internal
-; CHECK-SAME: (ptr [[NAME:%.*]], i32 [[HASH:%.*]]) #[[ATTR1:[0-9]+]] !dbg [[DBG18:![0-9]+]] {
-; CHECK-NEXT: entry:
-; CHECK-NEXT: tail call void @llvm.dbg.value(metadata ptr [[NAME]], metadata [[META22:![0-9]+]], metadata !DIExpression()), !dbg [[DBG23:![0-9]+]]
-; CHECK-NEXT: tail call void @llvm.dbg.value(metadata i32 poison, metadata [[META24:![0-9]+]], metadata !DIExpression()), !dbg [[DBG23]]
-; CHECK-NEXT: tail call void @llvm.dbg.value(metadata i32 [[HASH]], metadata [[META25:![0-9]+]], metadata !DIExpression()), !dbg [[DBG23]]
-; CHECK-NEXT: tail call void @llvm.dbg.value(metadata i8 poison, metadata [[META26:![0-9]+]], metadata !DIExpression()), !dbg [[DBG23]]
-; CHECK-NEXT: tail call void @llvm.dbg.value(metadata i32 poison, metadata [[META27:![0-9]+]], metadata !DIExpression()), !dbg [[DBG23]]
-; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i32 [[HASH]], 0, !dbg [[DBG28:![0-9]+]]
-; CHECK-NEXT: br i1 [[TMP0]], label [[BB:%.*]], label [[BB1:%.*]], !dbg [[DBG28]]
-; CHECK: bb:
-; CHECK-NEXT: br label [[BB2:%.*]], !dbg [[DBG30:![0-9]+]]
-; CHECK: bb1:
-; CHECK-NEXT: br label [[BB2]], !dbg [[DBG31:![0-9]+]]
-; CHECK: bb2:
-; CHECK-NEXT: [[DOT0:%.*]] = phi ptr [ @.str, [[BB]] ], [ [[NAME]], [[BB1]] ]
-; CHECK-NEXT: ret ptr [[DOT0]], !dbg [[DBG31]]
-;
entry:
call void @llvm.dbg.value(metadata ptr %name, metadata !15, metadata !DIExpression()), !dbg !DILocation(scope: !16)
call void @llvm.dbg.value(metadata i32 %len, metadata !20, metadata !DIExpression()), !dbg !DILocation(scope: !16)
@@ -72,7 +45,9 @@ bb2: ; preds = %bb1, %bb
declare void @llvm.dbg.value(metadata, metadata, metadata) nounwind readnone
; CHECK: attributes #0 = { nounwind ssp }
-; CHECK: attributes #1 = { noinline nounwind ssp }
+; CHECK: attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
+; CHECK: attributes #2 = { noinline nounwind ssp }
+; CHECK: attributes [[NUW]] = { nounwind }
!llvm.dbg.cu = !{!3}
!llvm.module.flags = !{!30}
@@ -93,7 +68,9 @@ declare void @llvm.dbg.value(metadata, metadata, metadata) nounwind readnone
!14 = distinct !DILexicalBlock(line: 12, column: 0, file: !28, scope: !1)
!15 = !DILocalVariable(name: "name", line: 17, arg: 1, scope: !16, file: !2, type: !6)
; CHECK: !DISubprogram(name: "add_name_internal"
+; CHECK-SAME: type: ![[MD:[0-9]+]]
!16 = distinct !DISubprogram(name: "add_name_internal", linkageName: "add_name_internal", line: 22, isLocal: true, isDefinition: true, virtualIndex: 6, isOptimized: false, unit: !3, file: !28, scope: !2, type: !17)
+; CHECK: ![[MD]] = !DISubroutineType(cc: DW_CC_nocall, types: !{{[0-9]+}})
!17 = !DISubroutineType(types: !18)
!18 = !{!6, !6, !9, !9, !19, !9}
!19 = !DIBasicType(tag: DW_TAG_base_type, name: "unsigned char", size: 8, align: 8, encoding: DW_ATE_unsigned_char)
diff --git a/llvm/test/Transforms/IROutliner/outlining-debug-statements.ll b/llvm/test/Transforms/IROutliner/outlining-debug-statements.ll
index bf846c310a5254..f932788c73e2ad 100644
--- a/llvm/test/Transforms/IROutliner/outlining-debug-statements.ll
+++ b/llvm/test/Transforms/IROutliner/outlining-debug-statements.ll
@@ -51,7 +51,14 @@ entry:
ret void
}
+; CHECK: define internal void @outlined_ir_func_0(ptr [[ARG0:%.*]], ptr [[ARG1:%.*]], ptr [[ARG2:%.*]]) #1 {
; CHECK: entry_to_outline:
+; CHECK-NEXT: store i32 2, ptr [[ARG0]], align 4
+; CHECK-NEXT: store i32 3, ptr [[ARG1]], align 4
+; CHECK-NEXT: store i32 4, ptr [[ARG2]], align 4
+; CHECK-NEXT: [[AL:%.*]] = load i32, ptr [[ARG0]], align 4
+; CHECK-NEXT: [[BL:%.*]] = load i32, ptr [[ARG1]], align 4
+; CHECK-NEXT: [[CL:%.*]] = load i32, ptr [[ARG2]], align 4
!0 = !DIFile(filename: "foo.c", directory: "/tmp")
!1 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
diff --git a/llvm/test/Transforms/LoopRotate/dbgvalue.ll b/llvm/test/Transforms/LoopRotate/dbgvalue.ll
index 331ca9efdd4a0a..92cc886bc81c10 100644
--- a/llvm/test/Transforms/LoopRotate/dbgvalue.ll
+++ b/llvm/test/Transforms/LoopRotate/dbgvalue.ll
@@ -4,6 +4,8 @@
declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone
declare void @llvm.dbg.value(metadata, metadata, metadata) nounwind readnone
+; CHECK: declare void @llvm.dbg.value(metadata,
+
; This function rotates the exit conditon into the entry block, moving the
; dbg.values with it. Check that they resolve through the PHIs to the arguments
; only in the entry block. In the loop block, the dbg.values shift down below
@@ -263,8 +265,6 @@ L0.latch:
br label %L0, !dbg !77
}
-; CHECK: declare void @llvm.dbg.value(metadata,
-
!llvm.module.flags = !{!20}
!llvm.dbg.cu = !{!2}
diff --git a/llvm/test/Transforms/LoopRotate/delete-dbg-values.ll b/llvm/test/Transforms/LoopRotate/delete-dbg-values.ll
index 8c23c0276024c2..bce5ed02b43bf9 100644
--- a/llvm/test/Transforms/LoopRotate/delete-dbg-values.ll
+++ b/llvm/test/Transforms/LoopRotate/delete-dbg-values.ll
@@ -10,6 +10,8 @@
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
+; CHECK: declare void @llvm.dbg.value(metadata,
+
; CHECK-LABEL: define void @_ZNK4llvm5APInt4sextEj(ptr
; CHECK-LABEL: entry:
; CHECK: call void @llvm.dbg.value(metadata i32 0, metadata ![[SRC:[0-9]+]],
@@ -20,8 +22,6 @@ target triple = "x86_64-unknown-linux-gnu"
; CHECK: call void @llvm.dbg.value(metadata i32 0, metadata ![[SINK]],
; CHECK-NEXT: call void @llvm.dbg.value(metadata i32 0, metadata ![[SRC]],
-; CHECK: declare void @llvm.dbg.value(metadata,
-
declare void @llvm.dbg.value(metadata, metadata, metadata)
define void @_ZNK4llvm5APInt4sextEj(ptr %agg.result) !dbg !5 {
diff --git a/llvm/test/Transforms/ObjCARC/ensure-that-exception-unwind-path-is-visited.ll b/llvm/test/Transforms/ObjCARC/ensure-that-exception-unwind-path-is-visited.ll
index 22d14f52e96647..e4c123e02540a1 100644
--- a/llvm/test/Transforms/ObjCARC/ensure-that-exception-unwind-path-is-visited.ll
+++ b/llvm/test/Transforms/ObjCARC/ensure-that-exception-unwind-path-is-visited.ll
@@ -103,9 +103,10 @@ declare void @NSLog(ptr, ...)
declare void @llvm.dbg.value(metadata, metadata, metadata) nounwind readnone
; CHECK: attributes #0 = { ssp uwtable }
-; CHECK: attributes #1 = { nonlazybind }
+; CHECK: attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
+; CHECK: attributes #2 = { nonlazybind }
; CHECK: attributes [[NUW]] = { nounwind }
-; CHECK: attributes #3 = { noinline ssp uwtable }
+; CHECK: attributes #4 = { noinline ssp uwtable }
!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!33, !34, !35, !36, !61}
diff --git a/llvm/test/Transforms/SROA/dbg-inline.ll b/llvm/test/Transforms/SROA/dbg-inline.ll
index 3e7683ad2db776..454ca13230bfa6 100644
--- a/llvm/test/Transforms/SROA/dbg-inline.ll
+++ b/llvm/test/Transforms/SROA/dbg-inline.ll
@@ -19,10 +19,10 @@ target triple = "x86_64-apple-macosx10.15.0"
define i64 @_Z1g4pair(i64 %p.coerce0, i64 %p.coerce1) #0 !dbg !8 {
; CHECK-LABEL: @_Z1g4pair(
; CHECK-NEXT: entry:
-; CHECK-NEXT: tail call void @llvm.dbg.value(metadata i64 [[P_COERCE0:%.*]], metadata [[META16:![0-9]+]], metadata !DIExpression(DW_OP_LLVM_fragment, 0, 64)), !dbg [[DBG17:![0-9]+]]
-; CHECK-NEXT: tail call void @llvm.dbg.value(metadata i64 [[P_COERCE0]], metadata [[META18:![0-9]+]], metadata !DIExpression(DW_OP_LLVM_fragment, 0, 64)), !dbg [[DBG20:![0-9]+]]
-; CHECK-NEXT: tail call void @llvm.dbg.value(metadata i64 [[P_COERCE1:%.*]], metadata [[META16]], metadata !DIExpression(DW_OP_LLVM_fragment, 64, 64)), !dbg [[DBG17]]
-; CHECK-NEXT: tail call void @llvm.dbg.value(metadata i64 [[P_COERCE1]], metadata [[META18]], metadata !DIExpression(DW_OP_LLVM_fragment, 64, 64)), !dbg [[DBG20]]
+; CHECK-NEXT: call void @llvm.dbg.value(metadata i64 [[P_COERCE0:%.*]], metadata [[META16:![0-9]+]], metadata !DIExpression(DW_OP_LLVM_fragment, 0, 64)), !dbg [[DBG17:![0-9]+]]
+; CHECK-NEXT: call void @llvm.dbg.value(metadata i64 [[P_COERCE0]], metadata [[META18:![0-9]+]], metadata !DIExpression(DW_OP_LLVM_fragment, 0, 64)), !dbg [[DBG20:![0-9]+]]
+; CHECK-NEXT: call void @llvm.dbg.value(metadata i64 [[P_COERCE1:%.*]], metadata [[META16]], metadata !DIExpression(DW_OP_LLVM_fragment, 64, 64)), !dbg [[DBG17]]
+; CHECK-NEXT: call void @llvm.dbg.value(metadata i64 [[P_COERCE1]], metadata [[META18]], metadata !DIExpression(DW_OP_LLVM_fragment, 64, 64)), !dbg [[DBG20]]
; CHECK-NEXT: ret i64 [[P_COERCE0]], !dbg [[DBG22:![0-9]+]]
;
entry:
@@ -77,32 +77,32 @@ attributes #2 = { argmemonly nounwind willreturn }
!26 = !DILocation(line: 10, column: 3, scope: !8)
;.
; CHECK: attributes #[[ATTR0:[0-9]+]] = { noinline ssp uwtable }
-; CHECK: attributes #[[ATTR1:[0-9]+]] = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
-; CHECK: attributes #[[ATTR2:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
+; CHECK: attributes #[[ATTR1:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
+; CHECK: attributes #[[ATTR2:[0-9]+]] = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
;.
-; CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: [[META1:![0-9]+]], producer: "{{.*}}clang version {{.*}}", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: [[META2:![0-9]+]], nameTableKind: None, sysroot: "/")
-; CHECK: [[META1]] = !DIFile(filename: "/tmp/inlinesplit.cpp", directory: {{.*}})
-; CHECK: [[META2]] = !{}
+; CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 12.0.0 (git at github.com:llvm/llvm-project 5110fd0343c2d06c8ae538741fbef13ece5e68de)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, nameTableKind: None, sysroot: "/")
+; CHECK: [[META1:![0-9]+]] = !DIFile(filename: "/tmp/inlinesplit.cpp", directory: "/Volumes/Data/llvm-project")
+; CHECK: [[META2:![0-9]+]] = !{}
; CHECK: [[META3:![0-9]+]] = !{i32 7, !"Dwarf Version", i32 4}
; CHECK: [[META4:![0-9]+]] = !{i32 2, !"Debug Info Version", i32 3}
; CHECK: [[META5:![0-9]+]] = !{i32 1, !"wchar_size", i32 4}
; CHECK: [[META6:![0-9]+]] = !{i32 8, !"PIC Level", i32 2}
-; CHECK: [[META7:![0-9]+]] = distinct !DISubprogram(name: "g", linkageName: "_Z1g4pair", scope: [[META8:![0-9]+]], file: [[META8]], line: 9, type: [[META9:![0-9]+]], scopeLine: 9, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META2]])
-; CHECK: [[META8]] = !DIFile(filename: "/tmp/inlinesplit.cpp", directory: "")
-; CHECK: [[META9]] = !DISubroutineType(types: [[META10:![0-9]+]])
-; CHECK: [[META10]] = !{[[META11:![0-9]+]], [[META12:![0-9]+]]}
-; CHECK: [[META11]] = !DIBasicType(name: "long long unsigned int", size: 64, encoding: DW_ATE_unsigned)
-; CHECK: [[META12]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "pair", file: [[META8]], line: 1, size: 128, flags: DIFlagTypePassByValue, elements: [[META13:![0-9]+]], identifier: "_ZTS4pair")
-; CHECK: [[META13]] = !{[[META14:![0-9]+]], [[META15:![0-9]+]]}
-; CHECK: [[META14]] = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: [[META12]], file: [[META8]], line: 1, baseType: [[META11]], size: 64)
-; CHECK: [[META15]] = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: [[META12]], file: [[META8]], line: 1, baseType: [[META11]], size: 64, offset: 64)
-; CHECK: [[META16]] = !DILocalVariable(name: "p", arg: 1, scope: [[META7]], file: [[META8]], line: 9, type: [[META12]])
-; CHECK: [[DBG17]] = !DILocation(line: 0, scope: [[META7]])
-; CHECK: [[META18]] = !DILocalVariable(name: "p", arg: 1, scope: [[META19:![0-9]+]], file: [[META8]], line: 5, type: [[META12]])
-; CHECK: [[META19]] = distinct !DISubprogram(name: "f", linkageName: "_ZL1f4pair", scope: [[META8]], file: [[META8]], line: 5, type: [[META9]], scopeLine: 5, flags: DIFlagPrototyped, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META2]])
-; CHECK: [[DBG20]] = !DILocation(line: 0, scope: [[META19]], inlinedAt: [[META21:![0-9]+]])
-; CHECK: [[META21]] = distinct !DILocation(line: 10, column: 10, scope: [[META7]])
-; CHECK: [[DBG22]] = !DILocation(line: 10, column: 3, scope: [[META7]])
+; CHECK: [[META7:![0-9]+]] = distinct !DISubprogram(name: "g", linkageName: "_Z1g4pair", scope: !8, file: !8, line: 9, type: !9, scopeLine: 9, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
+; CHECK: [[META8:![0-9]+]] = !DIFile(filename: "/tmp/inlinesplit.cpp", directory: "")
+; CHECK: [[META9:![0-9]+]] = !DISubroutineType(types: !10)
+; CHECK: [[META10:![0-9]+]] = !{!11, !12}
+; CHECK: [[META11:![0-9]+]] = !DIBasicType(name: "long long unsigned int", size: 64, encoding: DW_ATE_unsigned)
+; CHECK: [[META12:![0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "pair", file: !8, line: 1, size: 128, flags: DIFlagTypePassByValue, elements: !13, identifier: "_ZTS4pair")
+; CHECK: [[META13:![0-9]+]] = !{!14, !15}
+; CHECK: [[META14:![0-9]+]] = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !12, file: !8, line: 1, baseType: !11, size: 64)
+; CHECK: [[META15:![0-9]+]] = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !12, file: !8, line: 1, baseType: !11, size: 64, offset: 64)
+; CHECK: [[META16]] = !DILocalVariable(name: "p", arg: 1, scope: !7, file: !8, line: 9, type: !12)
+; CHECK: [[DBG17]] = !DILocation(line: 0, scope: !7)
+; CHECK: [[META18]] = !DILocalVariable(name: "p", arg: 1, scope: !19, file: !8, line: 5, type: !12)
+; CHECK: [[META19:![0-9]+]] = distinct !DISubprogram(name: "f", linkageName: "_ZL1f4pair", scope: !8, file: !8, line: 5, type: !9, scopeLine: 5, flags: DIFlagPrototyped, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !0, retainedNodes: !2)
+; CHECK: [[DBG20]] = !DILocation(line: 0, scope: !19, inlinedAt: !21)
+; CHECK: [[META21:![0-9]+]] = distinct !DILocation(line: 10, column: 10, scope: !7)
+; CHECK: [[DBG22]] = !DILocation(line: 10, column: 3, scope: !7)
;.
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
; CHECK-MODIFY-CFG: {{.*}}
More information about the llvm-commits
mailing list