[PATCH] Fix failure to invoke exception handler on Win64.
Reid Kleckner
rnk at google.com
Fri Aug 1 11:54:24 PDT 2014
================
Comment at: lib/Target/X86/X86FrameLowering.cpp:844
@@ +843,3 @@
+ --MFI;
+ MBBI = MFI->end();
+ }
----------------
Vadim Chugunov wrote:
> Reid Kleckner wrote:
> > Does this not return one-past-the-end?
> >
> > That aside, I don't think this will work in general, because basic block placement runs *after* prologue-epilogue insertion.
> >
> > For now I think we should always insert a nop if the epilogue is at the beginning of a basic block, just to be safe. The actual solution is probably to insert some kind of target-specific pseudo that we lower out after block placement to either a nop or nothing.
> > Does this not return one-past-the-end?
> Hmm, yes it probably does.
>
> > That aside, I don't think this will work in general, because basic block placement runs *after* prologue-epilogue insertion.
>
> I can make it do what you suggest, though I think that 'ret' starts out in a MBB of its' own quite often.
>
> > The actual solution is probably to insert some kind of target-specific pseudo that we lower out after block placement to either a nop or nothing.
> I was considering creating 'SEH_Epilogue' pseudo, then checking for preceding CALLs when lowering it in X86AsmPrinter. Unfortunately, some pseudos, like EH_LABEL, are not lowered till the last moment, so it'd still have to have logic to skip those.
> How does that sound?
The SEH_Epilogue pseudo sounds good, even with exciting logic to skip non-instruction pseudos.
http://reviews.llvm.org/D4751
More information about the llvm-commits
mailing list