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