mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-28 07:05:11 +00:00
543ae79447
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
21 lines
399 B
LLVM
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()
|