[PATCH] D13514: [WinEH] Set NoModuleLevelChanges in clone flags
Joseph Tremoulet via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 7 09:46:44 PDT 2015
JosephTremoulet updated this revision to Diff 36752.
JosephTremoulet added a comment.
use the conventional merge behavior (2/warning) for the debug info version flag
http://reviews.llvm.org/D13514
Files:
lib/CodeGen/WinEHPrepare.cpp
test/CodeGen/WinEH/wineh-cloning.ll
Index: test/CodeGen/WinEH/wineh-cloning.ll
===================================================================
--- test/CodeGen/WinEH/wineh-cloning.ll
+++ test/CodeGen/WinEH/wineh-cloning.ll
@@ -452,3 +452,44 @@
; CHECK: %inner = cleanuppad []
; CHECK-NEXT: call void @f()
; CHECK-NEXT: unreachable
+
+define void @test12() personality i32 (...)* @__CxxFrameHandler3 {
+entry:
+ invoke void @f()
+ to label %cont unwind label %left, !dbg !8
+cont:
+ invoke void @f()
+ to label %exit unwind label %right
+left:
+ cleanuppad []
+ br label %join
+right:
+ cleanuppad []
+ br label %join
+join:
+ ; This call will get cloned; make sure we can handle cloning
+ ; instructions with debug metadata attached.
+ call void @f(), !dbg !9
+ unreachable
+exit:
+ ret void
+}
+
+; Make sure the DISubprogram doesn't get cloned
+; CHECK-LABEL: !llvm.module.flags
+; CHECK-NOT: !DISubprogram
+; CHECK: !{{[0-9]+}} = distinct !DISubprogram(name: "test12"
+; CHECK-NOT: !DISubprogram
+!llvm.module.flags = !{!0}
+!llvm.dbg.cu = !{!1}
+
+!0 = !{i32 2, !"Debug Info Version", i32 3}
+!1 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !2, producer: "compiler", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !3, subprograms: !4)
+!2 = !DIFile(filename: "test.cpp", directory: ".")
+!3 = !{}
+!4 = !{!5}
+!5 = distinct !DISubprogram(name: "test12", scope: !2, file: !2, type: !6, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, function: void ()* @test12, variables: !3)
+!6 = !DISubroutineType(types: !7)
+!7 = !{null}
+!8 = !DILocation(line: 1, scope: !5)
+!9 = !DILocation(line: 2, scope: !5)
Index: lib/CodeGen/WinEHPrepare.cpp
===================================================================
--- lib/CodeGen/WinEHPrepare.cpp
+++ lib/CodeGen/WinEHPrepare.cpp
@@ -3222,6 +3222,10 @@
Orig2Clone[BB] = CBB;
}
+ // If nothing was cloned, we're done cloning in this funclet.
+ if (Orig2Clone.empty())
+ continue;
+
// Update our color mappings to reflect that one block has lost a color and
// another has gained a color.
for (auto &BBMapping : Orig2Clone) {
@@ -3235,12 +3239,13 @@
BlockColors[OldBlock].erase(FuncletPadBB);
}
- // Loop over all of the instructions in the function, fixing up operand
+ // Loop over all of the instructions in this funclet, fixing up operand
// references as we go. This uses VMap to do all the hard work.
for (BasicBlock *BB : BlocksInFunclet)
// Loop over all instructions, fixing each one as we find it...
for (Instruction &I : *BB)
- RemapInstruction(&I, VMap, RF_IgnoreMissingEntries);
+ RemapInstruction(&I, VMap,
+ RF_IgnoreMissingEntries | RF_NoModuleLevelChanges);
// Check to see if SuccBB has PHI nodes. If so, we need to add entries to
// the PHI nodes for NewBB now.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D13514.36752.patch
Type: text/x-patch
Size: 2933 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151007/b3e84d73/attachment.bin>
More information about the llvm-commits
mailing list