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