178cba3ce98cb84218acd14dad60d3037c33496c
[oota-llvm.git] / test / CodeGen / Mips / mips64muldiv.ll
1 ; RUN: llc -march=mips64el -mcpu=mips4 < %s | FileCheck %s -check-prefix=ALL
2 ; RUN: llc -march=mips64el -mcpu=mips64 < %s | FileCheck %s -check-prefix=ALL
3
4 define i64 @m0(i64 %a0, i64 %a1) nounwind readnone {
5 entry:
6 ; ALL-LABEL: m0:
7 ; ALL:           dmult ${{[45]}}, ${{[45]}}
8 ; ALL:           mflo $2
9   %mul = mul i64 %a1, %a0
10   ret i64 %mul
11 }
12
13 define i64 @m1(i64 %a) nounwind readnone {
14 entry:
15 ; ALL-LABEL: m1:
16 ; ALL:           lui $[[T0:[0-9]+]], 21845
17 ; ALL:           addiu $[[T0]], $[[T0]], 21845
18 ; ALL:           dsll $[[T0]], $[[T0]], 16
19 ; ALL:           addiu $[[T0]], $[[T0]], 21845
20 ; ALL:           dsll $[[T0]], $[[T0]], 16
21 ; ALL:           addiu $[[T0]], $[[T0]], 21846
22 ; ALL:           dmult ${{[45]}}, $[[T0]]
23 ; ALL:           mfhi $[[T1:[0-9]+]]
24 ; ALL:           dsrl $2, $[[T1]], 63
25 ; ALL:           daddu $2, $[[T1]], $2
26   %div = sdiv i64 %a, 3
27   ret i64 %div
28 }
29
30 define i64 @d0(i64 %a0, i64 %a1) nounwind readnone {
31 entry:
32 ; ALL-LABEL: d0:
33 ; ALL:           ddivu $zero, $4, $5
34 ; ALL:           mflo $2
35   %div = udiv i64 %a0, %a1
36   ret i64 %div
37 }
38
39 define i64 @d1(i64 %a0, i64 %a1) nounwind readnone {
40 entry:
41 ; ALL-LABEL: d1:
42 ; ALL:           ddiv $zero, $4, $5
43 ; ALL:           mflo $2
44   %div = sdiv i64 %a0, %a1
45   ret i64 %div
46 }
47
48 define i64 @d2(i64 %a0, i64 %a1) nounwind readnone {
49 entry:
50 ; ALL-LABEL: d2:
51 ; ALL:           ddivu $zero, $4, $5
52 ; ALL:           mfhi $2
53   %rem = urem i64 %a0, %a1
54   ret i64 %rem
55 }
56
57 define i64 @d3(i64 %a0, i64 %a1) nounwind readnone {
58 entry:
59 ; ALL-LABEL: d3:
60 ; ALL:           ddiv $zero, $4, $5
61 ; ALL:           mfhi $2
62   %rem = srem i64 %a0, %a1
63   ret i64 %rem
64 }