diff options
Diffstat (limited to 'llvm/lib/Target/X86/X86WinEHState.cpp')
| -rw-r--r-- | llvm/lib/Target/X86/X86WinEHState.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86WinEHState.cpp b/llvm/lib/Target/X86/X86WinEHState.cpp index 38dc5db3430..d1206ec0ee0 100644 --- a/llvm/lib/Target/X86/X86WinEHState.cpp +++ b/llvm/lib/Target/X86/X86WinEHState.cpp @@ -167,6 +167,20 @@ bool WinEHStatePass::runOnFunction(Function &F) { if (!isMSVCEHPersonality(Personality)) return false; + // Skip this function if there are no EH pads and we aren't using IR-level + // outlining. + if (WinEHParentName.empty()) { + bool HasPads = false; + for (BasicBlock &BB : F) { + if (BB.isEHPad()) { + HasPads = true; + break; + } + } + if (!HasPads) + return false; + } + // Disable frame pointer elimination in this function. // FIXME: Do the nested handlers need to keep the parent ebp in ebp, or can we // use an arbitrary register? |

