5
5
; RUN: llc -march=mips -mattr=+msa,+fp64 < %s | FileCheck %s
6
6
; RUN: llc -march=mipsel -mattr=+msa,+fp64 < %s | FileCheck %s
7
7
8
- @llvm_mips_dpadd_s_h_ARG1 = global <8 x i16 > <i16 0 , i16 1 , i16 2 , i16 3 , i16 4 , i16 5 , i16 6 , i16 7 >, align 16
9
8
@llvm_mips_dpadd_s_h_ARG2 = global <16 x i8 > <i8 8 , i8 9 , i8 10 , i8 11 , i8 12 , i8 13 , i8 14 , i8 15 , i8 16 , i8 17 , i8 18 , i8 19 , i8 20 , i8 21 , i8 22 , i8 23 >, align 16
10
9
@llvm_mips_dpadd_s_h_ARG3 = global <16 x i8 > <i8 24 , i8 25 , i8 26 , i8 27 , i8 28 , i8 29 , i8 30 , i8 31 , i8 32 , i8 33 , i8 34 , i8 35 , i8 36 , i8 37 , i8 38 , i8 39 >, align 16
11
10
@llvm_mips_dpadd_s_h_RES = global <8 x i16 > <i16 0 , i16 0 , i16 0 , i16 0 , i16 0 , i16 0 , i16 0 , i16 0 >, align 16
12
11
13
12
define void @llvm_mips_dpadd_s_h_test () nounwind {
14
13
entry:
15
- %0 = load <8 x i16 >, <8 x i16 >* @llvm_mips_dpadd_s_h_ARG1
16
- %1 = load <16 x i8 >, <16 x i8 >* @llvm_mips_dpadd_s_h_ARG2
17
- %2 = load <16 x i8 >, <16 x i8 >* @llvm_mips_dpadd_s_h_ARG3
18
- %3 = tail call <8 x i16 > @llvm.mips.dpadd.s.h (<8 x i16 > %0 , <16 x i8 > %1 , <16 x i8 > %2 )
19
- store <8 x i16 > %3 , <8 x i16 >* @llvm_mips_dpadd_s_h_RES
14
+ %0 = load <16 x i8 >, <16 x i8 >* @llvm_mips_dpadd_s_h_ARG2
15
+ %1 = load <16 x i8 >, <16 x i8 >* @llvm_mips_dpadd_s_h_ARG3
16
+ %2 = tail call <8 x i16 > @llvm.mips.dpadd.s.h (<8 x i16 > <i16 4 , i16 4 , i16 4 , i16 4 , i16 4 , i16 4 , i16 4 , i16 4 >, <16 x i8 > %0 , <16 x i8 > %1 )
17
+ store <8 x i16 > %2 , <8 x i16 >* @llvm_mips_dpadd_s_h_RES
20
18
ret void
21
19
}
22
20
@@ -25,23 +23,21 @@ declare <8 x i16> @llvm.mips.dpadd.s.h(<8 x i16>, <16 x i8>, <16 x i8>) nounwind
25
23
; CHECK: llvm_mips_dpadd_s_h_test:
26
24
; CHECK: ld.b
27
25
; CHECK: ld.b
28
- ; CHECK: ld.h
29
- ; CHECK: dpadd_s.h
26
+ ; CHECK: ldi.h [[R1:\$w[0-9]+]],
27
+ ; CHECK: dpadd_s.h [[R1]],
30
28
; CHECK: st.h
31
29
; CHECK: .size llvm_mips_dpadd_s_h_test
32
30
;
33
- @llvm_mips_dpadd_s_w_ARG1 = global <4 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 >, align 16
34
31
@llvm_mips_dpadd_s_w_ARG2 = global <8 x i16 > <i16 4 , i16 5 , i16 6 , i16 7 , i16 8 , i16 9 , i16 10 , i16 11 >, align 16
35
32
@llvm_mips_dpadd_s_w_ARG3 = global <8 x i16 > <i16 12 , i16 13 , i16 14 , i16 15 , i16 16 , i16 17 , i16 18 , i16 19 >, align 16
36
33
@llvm_mips_dpadd_s_w_RES = global <4 x i32 > <i32 0 , i32 0 , i32 0 , i32 0 >, align 16
37
34
38
35
define void @llvm_mips_dpadd_s_w_test () nounwind {
39
36
entry:
40
- %0 = load <4 x i32 >, <4 x i32 >* @llvm_mips_dpadd_s_w_ARG1
41
- %1 = load <8 x i16 >, <8 x i16 >* @llvm_mips_dpadd_s_w_ARG2
42
- %2 = load <8 x i16 >, <8 x i16 >* @llvm_mips_dpadd_s_w_ARG3
43
- %3 = tail call <4 x i32 > @llvm.mips.dpadd.s.w (<4 x i32 > %0 , <8 x i16 > %1 , <8 x i16 > %2 )
44
- store <4 x i32 > %3 , <4 x i32 >* @llvm_mips_dpadd_s_w_RES
37
+ %0 = load <8 x i16 >, <8 x i16 >* @llvm_mips_dpadd_s_w_ARG2
38
+ %1 = load <8 x i16 >, <8 x i16 >* @llvm_mips_dpadd_s_w_ARG3
39
+ %2 = tail call <4 x i32 > @llvm.mips.dpadd.s.w (<4 x i32 > <i32 4 , i32 4 , i32 4 , i32 4 >, <8 x i16 > %0 , <8 x i16 > %1 )
40
+ store <4 x i32 > %2 , <4 x i32 >* @llvm_mips_dpadd_s_w_RES
45
41
ret void
46
42
}
47
43
@@ -50,48 +46,44 @@ declare <4 x i32> @llvm.mips.dpadd.s.w(<4 x i32>, <8 x i16>, <8 x i16>) nounwind
50
46
; CHECK: llvm_mips_dpadd_s_w_test:
51
47
; CHECK: ld.h
52
48
; CHECK: ld.h
53
- ; CHECK: ld.w
54
- ; CHECK: dpadd_s.w
49
+ ; CHECK: ldi.w [[R1:\$w[0-9]+]],
50
+ ; CHECK: dpadd_s.w [[R1]],
55
51
; CHECK: st.w
56
52
; CHECK: .size llvm_mips_dpadd_s_w_test
57
53
;
58
- @llvm_mips_dpadd_s_d_ARG1 = global <2 x i64 > <i64 0 , i64 1 >, align 16
59
54
@llvm_mips_dpadd_s_d_ARG2 = global <4 x i32 > <i32 2 , i32 3 , i32 4 , i32 5 >, align 16
60
55
@llvm_mips_dpadd_s_d_ARG3 = global <4 x i32 > <i32 6 , i32 7 , i32 8 , i32 9 >, align 16
61
56
@llvm_mips_dpadd_s_d_RES = global <2 x i64 > <i64 0 , i64 0 >, align 16
62
57
63
58
define void @llvm_mips_dpadd_s_d_test () nounwind {
64
59
entry:
65
- %0 = load <2 x i64 >, <2 x i64 >* @llvm_mips_dpadd_s_d_ARG1
66
- %1 = load <4 x i32 >, <4 x i32 >* @llvm_mips_dpadd_s_d_ARG2
67
- %2 = load <4 x i32 >, <4 x i32 >* @llvm_mips_dpadd_s_d_ARG3
68
- %3 = tail call <2 x i64 > @llvm.mips.dpadd.s.d (<2 x i64 > %0 , <4 x i32 > %1 , <4 x i32 > %2 )
69
- store <2 x i64 > %3 , <2 x i64 >* @llvm_mips_dpadd_s_d_RES
60
+ %0 = load <4 x i32 >, <4 x i32 >* @llvm_mips_dpadd_s_d_ARG2
61
+ %1 = load <4 x i32 >, <4 x i32 >* @llvm_mips_dpadd_s_d_ARG3
62
+ %2 = tail call <2 x i64 > @llvm.mips.dpadd.s.d (<2 x i64 > <i64 4 , i64 4 >, <4 x i32 > %0 , <4 x i32 > %1 )
63
+ store <2 x i64 > %2 , <2 x i64 >* @llvm_mips_dpadd_s_d_RES
70
64
ret void
71
65
}
72
66
73
67
declare <2 x i64 > @llvm.mips.dpadd.s.d (<2 x i64 >, <4 x i32 >, <4 x i32 >) nounwind
74
68
75
69
; CHECK: llvm_mips_dpadd_s_d_test:
70
+ ; CHECK: ldi.d [[R1:\$w[0-9]+]],
76
71
; CHECK: ld.w
77
72
; CHECK: ld.w
78
- ; CHECK: ld.d
79
- ; CHECK: dpadd_s.d
73
+ ; CHECK: dpadd_s.d [[R1]],
80
74
; CHECK: st.d
81
75
; CHECK: .size llvm_mips_dpadd_s_d_test
82
76
;
83
- @llvm_mips_dpadd_u_h_ARG1 = global <8 x i16 > <i16 0 , i16 1 , i16 2 , i16 3 , i16 4 , i16 5 , i16 6 , i16 7 >, align 16
84
77
@llvm_mips_dpadd_u_h_ARG2 = global <16 x i8 > <i8 8 , i8 9 , i8 10 , i8 11 , i8 12 , i8 13 , i8 14 , i8 15 , i8 16 , i8 17 , i8 18 , i8 19 , i8 20 , i8 21 , i8 22 , i8 23 >, align 16
85
78
@llvm_mips_dpadd_u_h_ARG3 = global <16 x i8 > <i8 24 , i8 25 , i8 26 , i8 27 , i8 28 , i8 29 , i8 30 , i8 31 , i8 32 , i8 33 , i8 34 , i8 35 , i8 36 , i8 37 , i8 38 , i8 39 >, align 16
86
79
@llvm_mips_dpadd_u_h_RES = global <8 x i16 > <i16 0 , i16 0 , i16 0 , i16 0 , i16 0 , i16 0 , i16 0 , i16 0 >, align 16
87
80
88
81
define void @llvm_mips_dpadd_u_h_test () nounwind {
89
82
entry:
90
- %0 = load <8 x i16 >, <8 x i16 >* @llvm_mips_dpadd_u_h_ARG1
91
- %1 = load <16 x i8 >, <16 x i8 >* @llvm_mips_dpadd_u_h_ARG2
92
- %2 = load <16 x i8 >, <16 x i8 >* @llvm_mips_dpadd_u_h_ARG3
93
- %3 = tail call <8 x i16 > @llvm.mips.dpadd.u.h (<8 x i16 > %0 , <16 x i8 > %1 , <16 x i8 > %2 )
94
- store <8 x i16 > %3 , <8 x i16 >* @llvm_mips_dpadd_u_h_RES
83
+ %0 = load <16 x i8 >, <16 x i8 >* @llvm_mips_dpadd_u_h_ARG2
84
+ %1 = load <16 x i8 >, <16 x i8 >* @llvm_mips_dpadd_u_h_ARG3
85
+ %2 = tail call <8 x i16 > @llvm.mips.dpadd.u.h (<8 x i16 > <i16 4 , i16 4 , i16 4 , i16 4 , i16 4 , i16 4 , i16 4 , i16 4 >, <16 x i8 > %0 , <16 x i8 > %1 )
86
+ store <8 x i16 > %2 , <8 x i16 >* @llvm_mips_dpadd_u_h_RES
95
87
ret void
96
88
}
97
89
@@ -100,23 +92,21 @@ declare <8 x i16> @llvm.mips.dpadd.u.h(<8 x i16>, <16 x i8>, <16 x i8>) nounwind
100
92
; CHECK: llvm_mips_dpadd_u_h_test:
101
93
; CHECK: ld.b
102
94
; CHECK: ld.b
103
- ; CHECK: ld.h
104
- ; CHECK: dpadd_u.h
95
+ ; CHECK: ldi.h [[R1:\$w[0-9]+]],
96
+ ; CHECK: dpadd_u.h [[R1]],
105
97
; CHECK: st.h
106
98
; CHECK: .size llvm_mips_dpadd_u_h_test
107
99
;
108
- @llvm_mips_dpadd_u_w_ARG1 = global <4 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 >, align 16
109
100
@llvm_mips_dpadd_u_w_ARG2 = global <8 x i16 > <i16 4 , i16 5 , i16 6 , i16 7 , i16 8 , i16 9 , i16 10 , i16 11 >, align 16
110
101
@llvm_mips_dpadd_u_w_ARG3 = global <8 x i16 > <i16 12 , i16 13 , i16 14 , i16 15 , i16 16 , i16 17 , i16 18 , i16 19 >, align 16
111
102
@llvm_mips_dpadd_u_w_RES = global <4 x i32 > <i32 0 , i32 0 , i32 0 , i32 0 >, align 16
112
103
113
104
define void @llvm_mips_dpadd_u_w_test () nounwind {
114
105
entry:
115
- %0 = load <4 x i32 >, <4 x i32 >* @llvm_mips_dpadd_u_w_ARG1
116
- %1 = load <8 x i16 >, <8 x i16 >* @llvm_mips_dpadd_u_w_ARG2
117
- %2 = load <8 x i16 >, <8 x i16 >* @llvm_mips_dpadd_u_w_ARG3
118
- %3 = tail call <4 x i32 > @llvm.mips.dpadd.u.w (<4 x i32 > %0 , <8 x i16 > %1 , <8 x i16 > %2 )
119
- store <4 x i32 > %3 , <4 x i32 >* @llvm_mips_dpadd_u_w_RES
106
+ %0 = load <8 x i16 >, <8 x i16 >* @llvm_mips_dpadd_u_w_ARG2
107
+ %1 = load <8 x i16 >, <8 x i16 >* @llvm_mips_dpadd_u_w_ARG3
108
+ %2 = tail call <4 x i32 > @llvm.mips.dpadd.u.w (<4 x i32 > <i32 4 , i32 4 , i32 4 , i32 4 >, <8 x i16 > %0 , <8 x i16 > %1 )
109
+ store <4 x i32 > %2 , <4 x i32 >* @llvm_mips_dpadd_u_w_RES
120
110
ret void
121
111
}
122
112
@@ -125,33 +115,31 @@ declare <4 x i32> @llvm.mips.dpadd.u.w(<4 x i32>, <8 x i16>, <8 x i16>) nounwind
125
115
; CHECK: llvm_mips_dpadd_u_w_test:
126
116
; CHECK: ld.h
127
117
; CHECK: ld.h
128
- ; CHECK: ld.w
129
- ; CHECK: dpadd_u.w
118
+ ; CHECK: ldi.w [[R1:\$w[0-9]+]],
119
+ ; CHECK: dpadd_u.w [[R1]],
130
120
; CHECK: st.w
131
121
; CHECK: .size llvm_mips_dpadd_u_w_test
132
122
;
133
- @llvm_mips_dpadd_u_d_ARG1 = global <2 x i64 > <i64 0 , i64 1 >, align 16
134
123
@llvm_mips_dpadd_u_d_ARG2 = global <4 x i32 > <i32 2 , i32 3 , i32 4 , i32 5 >, align 16
135
124
@llvm_mips_dpadd_u_d_ARG3 = global <4 x i32 > <i32 6 , i32 7 , i32 8 , i32 9 >, align 16
136
125
@llvm_mips_dpadd_u_d_RES = global <2 x i64 > <i64 0 , i64 0 >, align 16
137
126
138
127
define void @llvm_mips_dpadd_u_d_test () nounwind {
139
128
entry:
140
- %0 = load <2 x i64 >, <2 x i64 >* @llvm_mips_dpadd_u_d_ARG1
141
- %1 = load <4 x i32 >, <4 x i32 >* @llvm_mips_dpadd_u_d_ARG2
142
- %2 = load <4 x i32 >, <4 x i32 >* @llvm_mips_dpadd_u_d_ARG3
143
- %3 = tail call <2 x i64 > @llvm.mips.dpadd.u.d (<2 x i64 > %0 , <4 x i32 > %1 , <4 x i32 > %2 )
144
- store <2 x i64 > %3 , <2 x i64 >* @llvm_mips_dpadd_u_d_RES
129
+ %0 = load <4 x i32 >, <4 x i32 >* @llvm_mips_dpadd_u_d_ARG2
130
+ %1 = load <4 x i32 >, <4 x i32 >* @llvm_mips_dpadd_u_d_ARG3
131
+ %2 = tail call <2 x i64 > @llvm.mips.dpadd.u.d (<2 x i64 > <i64 4 , i64 4 >, <4 x i32 > %0 , <4 x i32 > %1 )
132
+ store <2 x i64 > %2 , <2 x i64 >* @llvm_mips_dpadd_u_d_RES
145
133
ret void
146
134
}
147
135
148
136
declare <2 x i64 > @llvm.mips.dpadd.u.d (<2 x i64 >, <4 x i32 >, <4 x i32 >) nounwind
149
137
150
138
; CHECK: llvm_mips_dpadd_u_d_test:
139
+ ; CHECK: ldi.d [[R1:\$w[0-9]+]],
151
140
; CHECK: ld.w
152
141
; CHECK: ld.w
153
- ; CHECK: ld.d
154
- ; CHECK: dpadd_u.d
142
+ ; CHECK: dpadd_u.d [[R1]],
155
143
; CHECK: st.d
156
144
; CHECK: .size llvm_mips_dpadd_u_d_test
157
145
;
0 commit comments