llvm/test/CodeGen/X86/x86-framelowering-trap.ll
David Majnemer 543ae79447 [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
2016-08-09 17:55:12 +00:00

21 lines
399 B
LLVM

; RUN: llc %s -o - | FileCheck %s
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
; CHECK-LABEL: bar:
; CHECK: pushq
; CHECK: ud2
; CHECK-NEXT: popq
; CHECK-NEXT: retq
define void @bar() {
entry:
call void @callee()
call void @llvm.trap()
ret void
}
; Function Attrs: noreturn nounwind
declare void @llvm.trap()
declare void @callee()