1 ; RUN: llc -march=mips < %s | FileCheck %s -check-prefix=TRAP 2 ; RUN: llc -march=mips -mno-check-zero-division < %s |\ 3 ; RUN: FileCheck %s -check-prefix=NOCHECK 4 5 ; TRAP-LABEL: sdiv1: 6 ; TRAP: div $zero, ${{[0-9]+}}, $[[R0:[0-9]+]] 7 ; TRAP: teq $[[R0]], $zero, 7 8 ; TRAP: mflo 9 10 ; NOCHECK-LABEL: sdiv1: 11 ; NOCHECK-NOT: teq 12 ; NOCHECK: .end sdiv1 13 14 define i32 @sdiv1(i32 %a0, i32 %a1) nounwind readnone { 15 entry: 16 %div = sdiv i32 %a0, %a1 17 ret i32 %div 18 } 19 20 ; TRAP-LABEL: srem1: 21 ; TRAP: div $zero, ${{[0-9]+}}, $[[R0:[0-9]+]] 22 ; TRAP: teq $[[R0]], $zero, 7 23 ; TRAP: mfhi 24 25 define i32 @srem1(i32 %a0, i32 %a1) nounwind readnone { 26 entry: 27 %rem = srem i32 %a0, %a1 28 ret i32 %rem 29 } 30 31 ; TRAP-LABEL: udiv1: 32 ; TRAP: divu $zero, ${{[0-9]+}}, $[[R0:[0-9]+]] 33 ; TRAP: teq $[[R0]], $zero, 7 34 ; TRAP: mflo 35 36 define i32 @udiv1(i32 %a0, i32 %a1) nounwind readnone { 37 entry: 38 %div = udiv i32 %a0, %a1 39 ret i32 %div 40 } 41 42 ; TRAP-LABEL: urem1: 43 ; TRAP: divu $zero, ${{[0-9]+}}, $[[R0:[0-9]+]] 44 ; TRAP: teq $[[R0]], $zero, 7 45 ; TRAP: mfhi 46 47 define i32 @urem1(i32 %a0, i32 %a1) nounwind readnone { 48 entry: 49 %rem = urem i32 %a0, %a1 50 ret i32 %rem 51 } 52 53 ; TRAP: div $zero, 54 define i32 @sdivrem1(i32 %a0, i32 %a1, i32* nocapture %r) nounwind { 55 entry: 56 %rem = srem i32 %a0, %a1 57 store i32 %rem, i32* %r, align 4 58 %div = sdiv i32 %a0, %a1 59 ret i32 %div 60 } 61 62 ; TRAP: divu $zero, 63 define i32 @udivrem1(i32 %a0, i32 %a1, i32* nocapture %r) nounwind { 64 entry: 65 %rem = urem i32 %a0, %a1 66 store i32 %rem, i32* %r, align 4 67 %div = udiv i32 %a0, %a1 68 ret i32 %div 69 } 70