1; This tests the basic structure of the Unreachable instruction.
2
3; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \
4; RUN:   --target x8632 -i %s --args -O2 \
5; RUN:   | %if --need=target_X8632 --command FileCheck %s
6; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \
7; RUN:   --target x8632 -i %s --args -Om1 \
8; RUN:   | %if --need=target_X8632 --command FileCheck %s
9
10; RUN: %if --need=target_ARM32 \
11; RUN:   --command %p2i --filetype=obj \
12; RUN:   --disassemble --target arm32 -i %s --args -O2 \
13; RUN:   | %if --need=target_ARM32 \
14; RUN:   --command FileCheck --check-prefix ARM32 %s
15; RUN: %if --need=target_ARM32 \
16; RUN:   --command %p2i --filetype=obj \
17; RUN:   --disassemble --target arm32 -i %s --args -Om1 \
18; RUN:   | %if --need=target_ARM32 \
19; RUN:   --command FileCheck --check-prefix ARM32 %s
20
21; RUN: %if --need=target_MIPS32 --need=allow_dump \
22; RUN:   --command %p2i --filetype=asm --assemble \
23; RUN:   --disassemble --target mips32 -i %s --args -Om1 \
24; RUN:   | %if --need=target_MIPS32 --need=allow_dump \
25; RUN:   --command FileCheck --check-prefix MIPS32 %s
26
27; RUN: %if --need=target_MIPS32 --need=allow_dump \
28; RUN:   --command %p2i --filetype=asm --assemble \
29; RUN:   --disassemble --target mips32 -i %s --args -O2 \
30; RUN:   | %if --need=target_MIPS32 --need=allow_dump \
31; RUN:   --command FileCheck --check-prefix MIPS32-O2 %s
32
33define internal i32 @divide(i32 %num, i32 %den) {
34entry:
35  %cmp = icmp ne i32 %den, 0
36  br i1 %cmp, label %return, label %abort
37
38abort:                                            ; preds = %entry
39  unreachable
40
41return:                                           ; preds = %entry
42  %div = sdiv i32 %num, %den
43  ret i32 %div
44}
45
46; CHECK-LABEL: divide
47; CHECK: cmp
48; CHECK: ud2
49; CHECK: cdq
50; CHECK: idiv
51; CHECK: ret
52
53; ARM32-LABEL: divide
54; ARM32: tst
55; ARM32: e7fedef0
56; ARM32: bl {{.*}} __divsi3
57; ARM32: bx lr
58
59; MIPS32-LABEL: divide
60; MIPS32: beqz
61; MIPS32: nop
62; MIPS32: teq zero,zero
63; MIPS32: div
64
65; MIPS32-O2-LABEL: divide
66; MIPS32-O2: bne
67; MIPS32-O2: nop
68; MIPS32-O2: teq zero,zero
69; MIPS32-O2: div
70