blob: 0dbb2c27b8f95c27b78560650b3963918a74811c [file] [log] [blame]
Akira Hatanaka2c2c33a2013-03-30 01:58:00 +00001; RUN: llc -march=mips < %s | FileCheck %s -check-prefix=32
2; RUN: llc -march=mips -mattr=dsp < %s | FileCheck %s -check-prefix=DSP
Akira Hatanakad593a772013-03-30 01:42:24 +00003; RUN: llc -march=mips -mcpu=mips16 < %s
Bruno Cardoso Lopes8be76112011-01-18 19:29:17 +00004
Akira Hatanaka2c2c33a2013-03-30 01:58:00 +00005; 32: madd ${{[0-9]+}}
6; DSP: madd $ac
Bruno Cardoso Lopes8be76112011-01-18 19:29:17 +00007define i64 @madd1(i32 %a, i32 %b, i32 %c) nounwind readnone {
8entry:
9 %conv = sext i32 %a to i64
10 %conv2 = sext i32 %b to i64
11 %mul = mul nsw i64 %conv2, %conv
12 %conv4 = sext i32 %c to i64
13 %add = add nsw i64 %mul, %conv4
14 ret i64 %add
15}
16
Akira Hatanaka2c2c33a2013-03-30 01:58:00 +000017; 32: maddu ${{[0-9]+}}
18; DSP: maddu $ac
Bruno Cardoso Lopes8be76112011-01-18 19:29:17 +000019define i64 @madd2(i32 %a, i32 %b, i32 %c) nounwind readnone {
20entry:
21 %conv = zext i32 %a to i64
22 %conv2 = zext i32 %b to i64
23 %mul = mul nsw i64 %conv2, %conv
24 %conv4 = zext i32 %c to i64
25 %add = add nsw i64 %mul, %conv4
26 ret i64 %add
27}
28
Akira Hatanaka2c2c33a2013-03-30 01:58:00 +000029; 32: madd ${{[0-9]+}}
30; DSP: madd $ac
Bruno Cardoso Lopes8be76112011-01-18 19:29:17 +000031define i64 @madd3(i32 %a, i32 %b, i64 %c) nounwind readnone {
32entry:
33 %conv = sext i32 %a to i64
34 %conv2 = sext i32 %b to i64
35 %mul = mul nsw i64 %conv2, %conv
36 %add = add nsw i64 %mul, %c
37 ret i64 %add
38}
39
Akira Hatanaka2c2c33a2013-03-30 01:58:00 +000040; 32: msub ${{[0-9]+}}
41; DSP: msub $ac
Bruno Cardoso Lopes8be76112011-01-18 19:29:17 +000042define i64 @msub1(i32 %a, i32 %b, i32 %c) nounwind readnone {
43entry:
44 %conv = sext i32 %c to i64
45 %conv2 = sext i32 %a to i64
46 %conv4 = sext i32 %b to i64
47 %mul = mul nsw i64 %conv4, %conv2
48 %sub = sub nsw i64 %conv, %mul
49 ret i64 %sub
50}
51
Akira Hatanaka2c2c33a2013-03-30 01:58:00 +000052; 32: msubu ${{[0-9]+}}
53; DSP: msubu $ac
Bruno Cardoso Lopes8be76112011-01-18 19:29:17 +000054define i64 @msub2(i32 %a, i32 %b, i32 %c) nounwind readnone {
55entry:
56 %conv = zext i32 %c to i64
57 %conv2 = zext i32 %a to i64
58 %conv4 = zext i32 %b to i64
59 %mul = mul nsw i64 %conv4, %conv2
60 %sub = sub nsw i64 %conv, %mul
61 ret i64 %sub
62}
63
Akira Hatanaka2c2c33a2013-03-30 01:58:00 +000064; 32: msub ${{[0-9]+}}
65; DSP: msub $ac
Bruno Cardoso Lopes8be76112011-01-18 19:29:17 +000066define i64 @msub3(i32 %a, i32 %b, i64 %c) nounwind readnone {
67entry:
68 %conv = sext i32 %a to i64
69 %conv3 = sext i32 %b to i64
70 %mul = mul nsw i64 %conv3, %conv
71 %sub = sub nsw i64 %c, %mul
72 ret i64 %sub
73}