[llvm] r347257 - [InstCombine] Set debug loc on `mergeStoreIntoSuccessor` phi
Vedant Kumar via llvm-commits
llvm-commits at lists.llvm.org
Mon Nov 19 11:55:03 PST 2018
Author: vedantk
Date: Mon Nov 19 11:55:02 2018
New Revision: 347257
URL: http://llvm.org/viewvc/llvm-project?rev=347257&view=rev
Log:
[InstCombine] Set debug loc on `mergeStoreIntoSuccessor` phi
Assigning a merged debug location to the `mergeStoreIntoSuccessor` phi
improves backtrace quality.
Fixes llvm.org/PR38083.
Added:
llvm/trunk/test/Transforms/InstCombine/storemerge-dbg.ll
Modified:
llvm/trunk/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp?rev=347257&r1=347256&r2=347257&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp (original)
+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp Mon Nov 19 11:55:02 2018
@@ -19,6 +19,7 @@
#include "llvm/Transforms/Utils/Local.h"
#include "llvm/IR/ConstantRange.h"
#include "llvm/IR/DataLayout.h"
+#include "llvm/IR/DebugInfoMetadata.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/MDBuilder.h"
@@ -1600,11 +1601,15 @@ bool InstCombiner::mergeStoreIntoSuccess
// Insert a PHI node now if we need it.
Value *MergedVal = OtherStore->getOperand(0);
+ // The debug locations of the original instructions might differ. Merge them.
+ DebugLoc MergedLoc = DILocation::getMergedLocation(SI.getDebugLoc(),
+ OtherStore->getDebugLoc());
if (MergedVal != SI.getOperand(0)) {
PHINode *PN = PHINode::Create(MergedVal->getType(), 2, "storemerge");
PN->addIncoming(SI.getOperand(0), SI.getParent());
PN->addIncoming(OtherStore->getOperand(0), OtherBB);
MergedVal = InsertNewInstBefore(PN, DestBB->front());
+ PN->setDebugLoc(MergedLoc);
}
// Advance to a place where it is safe to insert the new store and insert it.
@@ -1613,8 +1618,7 @@ bool InstCombiner::mergeStoreIntoSuccess
SI.isVolatile(), SI.getAlignment(),
SI.getOrdering(), SI.getSyncScopeID());
InsertNewInstBefore(NewSI, *BBI);
- // The debug locations of the original instructions might differ. Merge them.
- NewSI->applyMergedLocation(SI.getDebugLoc(), OtherStore->getDebugLoc());
+ NewSI->setDebugLoc(MergedLoc);
// If the two stores had AA tags, merge them.
AAMDNodes AATags;
Added: llvm/trunk/test/Transforms/InstCombine/storemerge-dbg.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/storemerge-dbg.ll?rev=347257&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/storemerge-dbg.ll (added)
+++ llvm/trunk/test/Transforms/InstCombine/storemerge-dbg.ll Mon Nov 19 11:55:02 2018
@@ -0,0 +1,26 @@
+; RUN: opt < %s -debugify -instcombine -S | FileCheck %s
+
+declare i32 @escape(i32)
+
+; CHECK-LABEL: define {{.*}}@foo(
+define i32 @foo() {
+entry:
+ %baz = alloca i32
+ br i1 undef, label %lhs, label %rhs
+
+lhs:
+ store i32 1, i32* %baz
+ br label %cleanup
+
+rhs:
+ store i32 2, i32* %baz
+ br label %cleanup
+
+cleanup:
+ ; CHECK: %storemerge = phi i32 [ 1, %lhs ], [ 2, %rhs ], !dbg [[merge_loc:![0-9]+]]
+ %baz.val = load i32, i32* %baz
+ %ret.val = call i32 @escape(i32 %baz.val)
+ ret i32 %ret.val
+}
+
+; CHECK: [[merge_loc]] = !DILocation(line: 0
More information about the llvm-commits
mailing list