[mips] Move the code which does dag-combine for multiply-add/sub nodes to
[oota-llvm.git] / test / CodeGen / Mips / madd-msub.ll
1 ; RUN: llc -march=mips < %s | FileCheck %s
2 ; RUN: llc -march=mips -mcpu=mips16 < %s
3
4 ; CHECK: madd 
5 define i64 @madd1(i32 %a, i32 %b, i32 %c) nounwind readnone {
6 entry:
7   %conv = sext i32 %a to i64
8   %conv2 = sext i32 %b to i64
9   %mul = mul nsw i64 %conv2, %conv
10   %conv4 = sext i32 %c to i64
11   %add = add nsw i64 %mul, %conv4
12   ret i64 %add
13 }
14
15 ; CHECK: maddu
16 define i64 @madd2(i32 %a, i32 %b, i32 %c) nounwind readnone {
17 entry:
18   %conv = zext i32 %a to i64
19   %conv2 = zext i32 %b to i64
20   %mul = mul nsw i64 %conv2, %conv
21   %conv4 = zext i32 %c to i64
22   %add = add nsw i64 %mul, %conv4
23   ret i64 %add
24 }
25
26 ; CHECK: madd
27 define i64 @madd3(i32 %a, i32 %b, i64 %c) nounwind readnone {
28 entry:
29   %conv = sext i32 %a to i64
30   %conv2 = sext i32 %b to i64
31   %mul = mul nsw i64 %conv2, %conv
32   %add = add nsw i64 %mul, %c
33   ret i64 %add
34 }
35
36 ; CHECK: msub
37 define i64 @msub1(i32 %a, i32 %b, i32 %c) nounwind readnone {
38 entry:
39   %conv = sext i32 %c to i64
40   %conv2 = sext i32 %a to i64
41   %conv4 = sext i32 %b to i64
42   %mul = mul nsw i64 %conv4, %conv2
43   %sub = sub nsw i64 %conv, %mul
44   ret i64 %sub
45 }
46
47 ; CHECK: msubu 
48 define i64 @msub2(i32 %a, i32 %b, i32 %c) nounwind readnone {
49 entry:
50   %conv = zext i32 %c to i64
51   %conv2 = zext i32 %a to i64
52   %conv4 = zext i32 %b to i64
53   %mul = mul nsw i64 %conv4, %conv2
54   %sub = sub nsw i64 %conv, %mul
55   ret i64 %sub
56 }
57
58 ; CHECK: msub 
59 define i64 @msub3(i32 %a, i32 %b, i64 %c) nounwind readnone {
60 entry:
61   %conv = sext i32 %a to i64
62   %conv3 = sext i32 %b to i64
63   %mul = mul nsw i64 %conv3, %conv
64   %sub = sub nsw i64 %c, %mul
65   ret i64 %sub
66 }