[llvm] r355060 - Temporarily revert "ArgumentPromotion should copy all metadata to new Function" and the dependent patch "Refine ArgPromotion metadata handling" as they're causing segfaults in argument promotion.
Eric Christopher via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 27 17:11:13 PST 2019
Author: echristo
Date: Wed Feb 27 17:11:12 2019
New Revision: 355060
URL: http://llvm.org/viewvc/llvm-project?rev=355060&view=rev
Log:
Temporarily revert "ArgumentPromotion should copy all metadata to new Function" and the dependent patch "Refine ArgPromotion metadata handling" as they're causing segfaults in argument promotion.
This reverts commits r354032 and r353537.
Removed:
llvm/trunk/test/Transforms/ArgumentPromotion/dbg2.ll
Modified:
llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp
llvm/trunk/test/Transforms/ArgumentPromotion/profile.ll
Modified: llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp?rev=355060&r1=355059&r2=355060&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp Wed Feb 27 17:11:12 2019
@@ -216,8 +216,10 @@ doPromotion(Function *F, SmallPtrSetImpl
Function *NF = Function::Create(NFTy, F->getLinkage(), F->getAddressSpace(),
F->getName());
NF->copyAttributesFrom(F);
- NF->copyMetadata(F, 0);
- F->clearMetadata();
+
+ // Patch the pointer to LLVM function in debug info descriptor.
+ NF->setSubprogram(F->getSubprogram());
+ F->setSubprogram(nullptr);
LLVM_DEBUG(dbgs() << "ARG PROMOTION: Promoting to:" << *NF << "\n"
<< "From: " << *F);
@@ -472,7 +474,6 @@ doPromotion(Function *F, SmallPtrSetImpl
std::advance(I2, ArgIndices.size());
}
- assert(F->isDeclaration());
return NF;
}
Removed: llvm/trunk/test/Transforms/ArgumentPromotion/dbg2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ArgumentPromotion/dbg2.ll?rev=355059&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/ArgumentPromotion/dbg2.ll (original)
+++ llvm/trunk/test/Transforms/ArgumentPromotion/dbg2.ll (removed)
@@ -1,31 +0,0 @@
-; 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)
Modified: llvm/trunk/test/Transforms/ArgumentPromotion/profile.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ArgumentPromotion/profile.ll?rev=355060&r1=355059&r2=355060&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/ArgumentPromotion/profile.ll (original)
+++ llvm/trunk/test/Transforms/ArgumentPromotion/profile.ll Wed Feb 27 17:11:12 2019
@@ -1,18 +1,17 @@
; RUN: opt -argpromotion -mem2reg -S < %s | FileCheck %s
target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
-; Checks if !prof metadata is correct after argpromotion
+; Checks if !prof metadata is corret in deadargelim.
define void @caller() #0 {
%x = alloca i32
store i32 42, i32* %x
- call void @promote_i32_ptr(i32* %x), !prof !6
-; CHECK: call void @promote_i32_ptr(i32 42), !prof ![[PROF:[0-9]+]]
+ call void @promote_i32_ptr(i32* %x), !prof !0
+; CHECK: call void @promote_i32_ptr(i32 42), !prof ![[PROF:[0-9]]]
ret void
}
-; CHECK: define internal void @promote_i32_ptr(i32 %xp.val) !dbg ![[DBG:[0-9]+]] !prof ![[FUNCPROF:[0-9]+]]
-define internal void @promote_i32_ptr(i32* %xp) !dbg !7 !prof !12 {
+define internal void @promote_i32_ptr(i32* %xp) {
%x = load i32, i32* %xp
call void @use_i32(i32 %x)
ret void
@@ -20,22 +19,5 @@ define internal void @promote_i32_ptr(i3
declare void @use_i32(i32)
-!llvm.dbg.cu = !{!0}
-!llvm.module.flags = !{!3, !4, !5}
-
-!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 9.0.0 (trunk 353186) (llvm/trunk 353190)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, nameTableKind: None)
-!1 = !DIFile(filename: "profile.cc", directory: ".")
-!2 = !{}
-!3 = !{i32 2, !"Dwarf Version", i32 4}
-!4 = !{i32 2, !"Debug Info Version", i32 3}
-!5 = !{i32 1, !"wchar_size", i32 4}
; CHECK: ![[PROF]] = !{!"branch_weights", i32 30}
-!6 = !{!"branch_weights", i32 30}
-; CHECK: ![[DBG]] = distinct !DISubprogram(name: "promote_i32_ptr"
-!7 = distinct !DISubprogram(name: "promote_i32_ptr", linkageName: "_ZL15promote_i32_ptrPi", scope: !1, file: !1, line: 2, type: !8, scopeLine: 2, flags: DIFlagPrototyped, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !0, retainedNodes: !2)
-!8 = !DISubroutineType(types: !9)
-!9 = !{null, !10}
-!10 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !11, size: 64)
-!11 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
-; CHECK: ![[FUNCPROF]] = !{!"function_entry_count", i64 331}
-!12 = !{!"function_entry_count", i64 331}
+!0 = !{!"branch_weights", i32 30}
More information about the llvm-commits
mailing list