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 33 define internal i32 @divide(i32 %num, i32 %den) { 34 entry: 35 %cmp = icmp ne i32 %den, 0 36 br i1 %cmp, label %return, label %abort 37 38 abort: ; preds = %entry 39 unreachable 40 41 return: ; 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