OSDN Git Service

[X86] Don't model UD2/UD2B as a terminator
authorDavid Majnemer <david.majnemer@gmail.com>
Tue, 9 Aug 2016 17:55:12 +0000 (17:55 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Tue, 9 Aug 2016 17:55:12 +0000 (17:55 +0000)
commit543ae79447535954092b754be14f1a31f5503e14
tree3714bfe5720dd2e1df714715eeacde8074085988
parent4cdc9853bc1be2c6f6aa08bd46f9df31ea8d7435
[X86] Don't model UD2/UD2B as a terminator

A UD2 might make its way into the program via a call to @llvm.trap.
Obviously, calls are not terminators.  However, we modeled the X86
instruction, UD2, as a terminator.  Later on, this confuses the epilogue
insertion machinery which results in the epilogue getting inserted
before the UD2.  For some platforms, like x64, the result is a
violation of the ABI.

Instead, model UD2/UD2B as a side effecting instruction which may
observe memory.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278144 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86InstrSystem.td
test/CodeGen/X86/x86-framelowering-trap.ll