xref: /llvm-project/llvm/test/CodeGen/ARM/trap.ll (revision dd76d9b1bbe0a4ca5375604bc941bb422de55ed6)
1;; Check encodings of trap instructions and that their properties are set
2;; correctly so that they are not placed after the stack frame is destroyed.
3
4; RUN: llc < %s -mtriple=arm-apple-darwin | FileCheck %s -check-prefix=DARWIN
5; RUN: llc < %s -mtriple=arm-apple-darwin -trap-func=_trap | FileCheck %s -check-prefix=FUNC
6; RUN: llc < %s -mtriple=arm-apple-darwin -trap-func=_trap -O0 | FileCheck %s -check-prefix=FUNC
7; RUN: llc < %s -mtriple=armv7 -mattr=+nacl-trap | FileCheck %s -check-prefix=NACL
8; RUN: llc < %s -mtriple=armv7 | FileCheck %s -check-prefix=ARM
9; RUN: llc < %s -mtriple=thumbv7 | FileCheck %s -check-prefix=THUMB
10
11; RUN: llc -mtriple=armv7 -mattr=+nacl-trap -filetype=obj %s -o - \
12; RUN:  | llvm-objdump -d --triple=armv7 --mattr=+nacl-trap - \
13; RUN:  | FileCheck %s -check-prefix=ENCODING-NACL
14; RUN: llc -verify-machineinstrs -fast-isel -mtriple=armv7 -mattr=+nacl-trap -filetype=obj %s -o - \
15; RUN:  | llvm-objdump -d --triple=armv7 --mattr=+nacl-trap - \
16; RUN:  | FileCheck %s -check-prefix=ENCODING-NACL
17
18; RUN: llc -mtriple=armv7 -filetype=obj %s -o - \
19; RUN:  | llvm-objdump -d --triple=armv7 - \
20; RUN:  | FileCheck %s -check-prefix=ENCODING-ARM
21; RUN: llc -verify-machineinstrs -fast-isel -mtriple=armv7 -filetype=obj %s -o - \
22; RUN:  | llvm-objdump -d --triple=armv7 - \
23; RUN:  | FileCheck %s -check-prefix=ENCODING-ARM
24
25; RUN: llc -mtriple=thumbv7 -filetype=obj %s -o - \
26; RUN:  | llvm-objdump -d --triple=thumbv7 - \
27; RUN:  | FileCheck %s -check-prefix=ENCODING-THUMB
28; RUN: llc -verify-machineinstrs -fast-isel -mtriple=thumbv7 -filetype=obj %s -o - \
29; RUN:  | llvm-objdump -d --triple=thumbv7 - \
30; RUN:  | FileCheck %s -check-prefix=ENCODING-THUMB
31
32; rdar://7961298
33; rdar://9249183
34
35define void @t() noinline optnone {
36entry:
37  ;; So that we have a stack frame.
38  %1 = alloca i32, align 4
39  store volatile i32 0, ptr %1, align 4
40
41; DARWIN-LABEL: t:
42; DARWIN:      trap
43; DARWIN-NEXT: add sp, sp, #4
44
45; FUNC-LABEL: t:
46; FUNC:      bl __trap
47; FUNC-NEXT: add sp, sp, #4
48
49; NACL-LABEL: t:
50; NACL:      .inst 0xe7fedef0
51; NACL-NEXT: add sp, sp, #4
52
53; ARM-LABEL: t:
54; ARM:      .inst 0xe7ffdefe
55; ARM-NEXT: add sp, sp, #4
56
57; THUMB-LABEL: t:
58; THUMB:      .inst.n 0xdefe
59; THUMB-NEXT: add sp, #4
60
61; ENCODING-NACL: e7fedef0    trap
62
63; ENCODING-ARM: e7ffdefe    trap
64
65; ENCODING-THUMB: defe  trap
66
67  call void @llvm.trap()
68  ret void
69}
70
71define void @t2() {
72entry:
73  ;; So that we have a stack frame.
74  %1 = alloca i32, align 4
75  store volatile i32 0, ptr %1, align 4
76
77; DARWIN-LABEL: t2:
78; DARWIN:      udf #254
79; DARWIN-NEXT: add sp, sp, #4
80
81; FUNC-LABEL: t2:
82; FUNC:      bl __trap
83; FUNC-NEXT: add sp, sp, #4
84
85; NACL-LABEL: t2:
86; NACL:      bkpt #0
87; NACL-NEXT: add sp, sp, #4
88
89; ARM-LABEL: t2:
90; ARM:      bkpt #0
91; ARM-NEXT: add sp, sp, #4
92
93; THUMB-LABEL: t2:
94; THUMB:      bkpt #0
95; THUMB-NEXT: add sp, #4
96
97; ENCODING-NACL: e1200070    bkpt #0
98
99; ENCODING-ARM: e1200070    bkpt #0
100
101; ENCODING-THUMB: be00  bkpt #0
102
103  call void @llvm.debugtrap()
104  ret void
105}
106
107declare void @llvm.trap() nounwind
108declare void @llvm.debugtrap() nounwind
109