[PATCH] D13514: [WinEH] Set NoModuleLevelChanges in clone flags

Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 7 12:31:48 PDT 2015


This revision was automatically updated to reflect the committed changes.
Closed by commit rL249591: [WinEH] Set NoModuleLevelChanges in clone flags (authored by josepht).

Changed prior to commit:
  http://reviews.llvm.org/D13514?vs=36752&id=36779#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D13514

Files:
  llvm/trunk/lib/CodeGen/WinEHPrepare.cpp
  llvm/trunk/test/CodeGen/WinEH/wineh-cloning.ll

Index: llvm/trunk/test/CodeGen/WinEH/wineh-cloning.ll
===================================================================
--- llvm/trunk/test/CodeGen/WinEH/wineh-cloning.ll
+++ llvm/trunk/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: llvm/trunk/lib/CodeGen/WinEHPrepare.cpp
===================================================================
--- llvm/trunk/lib/CodeGen/WinEHPrepare.cpp
+++ llvm/trunk/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.36779.patch
Type: text/x-patch
Size: 2999 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151007/d916da8f/attachment.bin>


More information about the llvm-commits mailing list