[llvm] r354032 - Refine ArgPromotion metadata handling
Teresa Johnson via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 14 06:14:24 PST 2019
Author: tejohnson
Date: Thu Feb 14 06:14:24 2019
New Revision: 354032
URL: http://llvm.org/viewvc/llvm-project?rev=354032&view=rev
Log:
Refine ArgPromotion metadata handling
Summary:
In r353537 we now copy all metadata to the new function, with the old
being removed when the old function is eliminated. In some cases the old
function is dropped to a declaration (seems to only occur with the old
PM). Go ahead and clear all metadata from the old function to handle that
case, since verification will complain otherwise. This is consistent
with what was being done for debug metadata before r353537.
Reviewers: davidxl, uabelho
Subscribers: jdoerfert, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D58215
Added:
llvm/trunk/test/Transforms/ArgumentPromotion/dbg2.ll
Modified:
llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp
Modified: llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp?rev=354032&r1=354031&r2=354032&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp Thu Feb 14 06:14:24 2019
@@ -217,6 +217,7 @@ doPromotion(Function *F, SmallPtrSetImpl
F->getName());
NF->copyAttributesFrom(F);
NF->copyMetadata(F, 0);
+ F->clearMetadata();
LLVM_DEBUG(dbgs() << "ARG PROMOTION: Promoting to:" << *NF << "\n"
<< "From: " << *F);
@@ -471,6 +472,7 @@ doPromotion(Function *F, SmallPtrSetImpl
std::advance(I2, ArgIndices.size());
}
+ assert(F->isDeclaration());
return NF;
}
Added: llvm/trunk/test/Transforms/ArgumentPromotion/dbg2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ArgumentPromotion/dbg2.ll?rev=354032&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/ArgumentPromotion/dbg2.ll (added)
+++ llvm/trunk/test/Transforms/ArgumentPromotion/dbg2.ll Thu Feb 14 06:14:24 2019
@@ -0,0 +1,31 @@
+; RUN: opt < %s -argpromotion -instcombine -S | FileCheck %s
+
+%f_ty = type void (i8*)*
+
+define void @foo() {
+entry:
+ %f_p = getelementptr inbounds %f_ty, %f_ty* null, i32 0
+ store %f_ty @bar, %f_ty* %f_p, align 1
+ ret void
+}
+
+define internal void @bar(i8*) !dbg !1 {
+entry:
+ ret void
+}
+
+; The new copy should get the !dbg metadata
+; CHECK: define internal void @bar() !dbg
+; The old copy should now be a declaration without any !dbg metadata
+; CHECK-NOT: declare dso_local void @0(i8*) !dbg
+; CHECK: declare dso_local void @0(i8*)
+
+!llvm.dbg.cu = !{}
+!llvm.module.flags = !{!0}
+
+!0 = !{i32 2, !"Debug Info Version", i32 3}
+!1 = distinct !DISubprogram(name: "bar", scope: !2, file: !2, line: 14, type: !3, scopeLine: 14, spFlags: DISPFlagDefinition, unit: !5)
+!2 = !DIFile(filename: "foo.c", directory: "/bar")
+!3 = !DISubroutineType(types: !4)
+!4 = !{}
+!5 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, producer: "My Compiler", isOptimized: false, runtimeVersion: 0, emissionKind: LineTablesOnly, nameTableKind: None)
More information about the llvm-commits
mailing list