Home | History | Annotate | Download | only in llvm2ice_tests
      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