[ShrinkWrap] Make sure we do not mess up with EH funclet lowering.
authorQuentin Colombet <qcolombet@apple.com>
Thu, 12 Nov 2015 18:13:42 +0000 (18:13 +0000)
committerQuentin Colombet <qcolombet@apple.com>
Thu, 12 Nov 2015 18:13:42 +0000 (18:13 +0000)
ShrinkWrapping does not understand exception handling constraints for now, so
make sure we do not mess with them by aborting on functions that use EH
funclets.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@252917 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/ShrinkWrap.cpp
test/CodeGen/X86/late-address-taken.ll

index 8261caa4f849c7c1f31d08011ed69ede2a5ec003..368f138f95930ae97389fe1d9147dcfb1a4784b3 100644 (file)
 #include "llvm/CodeGen/Passes.h"
 // To know about callee-saved.
 #include "llvm/CodeGen/RegisterClassInfo.h"
+#include "llvm/MC/MCAsmInfo.h"
 #include "llvm/Support/Debug.h"
 // To query the target about frame lowering.
 #include "llvm/Target/TargetFrameLowering.h"
 // To know about frame setup operation.
 #include "llvm/Target/TargetInstrInfo.h"
+#include "llvm/Target/TargetMachine.h"
 // To access TargetInstrInfo.
 #include "llvm/Target/TargetSubtargetInfo.h"
 
@@ -377,6 +379,11 @@ bool ShrinkWrap::runOnMachineFunction(MachineFunction &MF) {
     DEBUG(dbgs() << "Look into: " << MBB.getNumber() << ' ' << MBB.getName()
                  << '\n');
 
+    if (MBB.isEHFuncletEntry()) {
+      DEBUG(dbgs() << "EH Funclets are not supported yet.\n");
+      return false;
+    }
+
     for (const MachineInstr &MI : MBB) {
       if (!useOrDefCSROrFI(MI))
         continue;
@@ -458,7 +465,10 @@ bool ShrinkWrap::isShrinkWrapEnabled(const MachineFunction &MF) {
 
   switch (EnableShrinkWrapOpt) {
   case cl::BOU_UNSET:
-    return TFI->enableShrinkWrapping(MF);
+    return TFI->enableShrinkWrapping(MF) &&
+      // Windows with CFI has some limitations that makes it impossible
+      // to use shrink-wrapping.
+      !MF.getTarget().getMCAsmInfo()->usesWindowsCFI();
   // If EnableShrinkWrap is set, it takes precedence on whatever the
   // target sets. The rational is that we assume we want to test
   // something related to shrink-wrapping.
index 7d4dde80bbd2651a2e4487801e0b77002d09866a..8f85393b67c190ad8a3093dfc8db9371bf393429 100644 (file)
@@ -1,4 +1,6 @@
-; RUN: llc -mtriple=x86_64-pc-windows-msvc < %s | FileCheck %s
+; RUN: llc -mtriple=x86_64-pc-windows-msvc < %s -enable-shrink-wrap=false | FileCheck %s
+; Make sure shrink-wrapping does not break the lowering of exception handling.
+; RUN: llc -mtriple=x86_64-pc-windows-msvc < %s -enable-shrink-wrap=true | FileCheck %s
 
 ; Repro cases from PR25168