blob: 3b60a8f88b0b04bf3cbc055e885a9aff08e237a4 [file] [log] [blame]
Chen Zhengffece2d2019-02-20 02:30:06 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
Zi Xuan Wuac79ef82019-04-12 05:21:31 +00002; RUN: llc -verify-machineinstrs -mcpu=pwr9 -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P9
3; RUN: llc -verify-machineinstrs -mcpu=pwr8 -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P8
Chen Zhengffece2d2019-02-20 02:30:06 +00004
5define signext i64 @maddld64(i64 signext %a, i64 signext %b) {
Zi Xuan Wuac79ef82019-04-12 05:21:31 +00006; CHECK-LABEL: maddld64:
7; CHECK: # %bb.0: # %entry
Chen Zhengffece2d2019-02-20 02:30:06 +00008; CHECK-P9-NEXT: maddld 3, 4, 3, 3
Chen Zhengffece2d2019-02-20 02:30:06 +00009; CHECK-P8-NEXT: mulld 4, 4, 3
10; CHECK-P8-NEXT: add 3, 4, 3
Zi Xuan Wuac79ef82019-04-12 05:21:31 +000011; CHECK-NEXT: blr
12
Chen Zhengffece2d2019-02-20 02:30:06 +000013entry:
14 %mul = mul i64 %b, %a
15 %add = add i64 %mul, %a
16 ret i64 %add
17}
18
19define signext i32 @maddld32(i32 signext %a, i32 signext %b) {
Zi Xuan Wuac79ef82019-04-12 05:21:31 +000020; CHECK-LABEL: maddld32:
21; CHECK: # %bb.0: # %entry
Chen Zhengffece2d2019-02-20 02:30:06 +000022; CHECK-P9-NEXT: maddld 3, 4, 3, 3
23; CHECK-P9-NEXT: extsw 3, 3
Chen Zhengffece2d2019-02-20 02:30:06 +000024; CHECK-P8-NEXT: mullw 4, 4, 3
25; CHECK-P8-NEXT: add 3, 4, 3
26; CHECK-P8-NEXT: extsw 3, 3
Zi Xuan Wuac79ef82019-04-12 05:21:31 +000027; CHECK-NEXT: blr
28
Chen Zhengffece2d2019-02-20 02:30:06 +000029entry:
30 %mul = mul i32 %b, %a
31 %add = add i32 %mul, %a
32 ret i32 %add
33}
34
35define signext i16 @maddld16(i16 signext %a, i16 signext %b, i16 signext %c) {
Zi Xuan Wuac79ef82019-04-12 05:21:31 +000036; CHECK-LABEL: maddld16:
37; CHECK: # %bb.0: # %entry
Chen Zhengffece2d2019-02-20 02:30:06 +000038; CHECK-P9-NEXT: maddld 3, 4, 3, 5
39; CHECK-P9-NEXT: extsh 3, 3
Chen Zhengffece2d2019-02-20 02:30:06 +000040; CHECK-P8-NEXT: mullw 3, 4, 3
Zi Xuan Wuac79ef82019-04-12 05:21:31 +000041; CHECK-P8-NEXT: add 3, 3, 5
Chen Zhengffece2d2019-02-20 02:30:06 +000042; CHECK-P8-NEXT: extsh 3, 3
Zi Xuan Wuac79ef82019-04-12 05:21:31 +000043; CHECK-NEXT: blr
44
Chen Zhengffece2d2019-02-20 02:30:06 +000045entry:
46 %mul = mul i16 %b, %a
47 %add = add i16 %mul, %c
48 ret i16 %add
49}
50
51define zeroext i32 @maddld32zeroext(i32 zeroext %a, i32 zeroext %b) {
Zi Xuan Wuac79ef82019-04-12 05:21:31 +000052; CHECK-LABEL: maddld32zeroext:
53; CHECK: # %bb.0: # %entry
Chen Zhengffece2d2019-02-20 02:30:06 +000054; CHECK-P9-NEXT: maddld 3, 4, 3, 3
Chen Zhengffece2d2019-02-20 02:30:06 +000055; CHECK-P8-NEXT: mullw 4, 4, 3
56; CHECK-P8-NEXT: add 3, 4, 3
Zi Xuan Wuac79ef82019-04-12 05:21:31 +000057; CHECK-NEXT: clrldi 3, 3, 32
58; CHECK-NEXT: blr
59
Chen Zhengffece2d2019-02-20 02:30:06 +000060entry:
61 %mul = mul i32 %b, %a
62 %add = add i32 %mul, %a
63 ret i32 %add
64}
65
66define signext i32 @maddld32nsw(i32 signext %a, i32 signext %b) {
Zi Xuan Wuac79ef82019-04-12 05:21:31 +000067; CHECK-LABEL: maddld32nsw:
68; CHECK: # %bb.0: # %entry
Chen Zhengffece2d2019-02-20 02:30:06 +000069; CHECK-P9-NEXT: maddld 3, 4, 3, 3
Chen Zhengffece2d2019-02-20 02:30:06 +000070; CHECK-P8-NEXT: mullw 4, 4, 3
71; CHECK-P8-NEXT: add 3, 4, 3
Zi Xuan Wuac79ef82019-04-12 05:21:31 +000072; CHECK-NEXT: extsw 3, 3
73; CHECK-NEXT: blr
74
Chen Zhengffece2d2019-02-20 02:30:06 +000075entry:
76 %mul = mul nsw i32 %b, %a
77 %add = add nsw i32 %mul, %a
78 ret i32 %add
79}
80
81define zeroext i32 @maddld32nuw(i32 zeroext %a, i32 zeroext %b) {
Zi Xuan Wuac79ef82019-04-12 05:21:31 +000082; CHECK-LABEL: maddld32nuw:
83; CHECK: # %bb.0: # %entry
Chen Zhengffece2d2019-02-20 02:30:06 +000084; CHECK-P9-NEXT: maddld 3, 4, 3, 3
Chen Zhengffece2d2019-02-20 02:30:06 +000085; CHECK-P8-NEXT: mullw 4, 4, 3
86; CHECK-P8-NEXT: add 3, 4, 3
Zi Xuan Wuac79ef82019-04-12 05:21:31 +000087; CHECK-NEXT: clrldi 3, 3, 32
88; CHECK-NEXT: blr
89
Chen Zhengffece2d2019-02-20 02:30:06 +000090entry:
91 %mul = mul nuw i32 %b, %a
92 %add = add nuw i32 %mul, %a
93 ret i32 %add
94}
Zi Xuan Wuac79ef82019-04-12 05:21:31 +000095
96define signext i64 @maddld64_imm(i64 signext %a, i64 signext %b) {
97; CHECK-LABEL: maddld64_imm:
98; CHECK: # %bb.0: # %entry
99; CHECK-NOT: maddld
100; CHECK-NEXT: mulli 4, 4, 13
101; CHECK-NEXT: add 3, 4, 3
102; CHECK-NEXT: blr
103
104entry:
105 %mul = mul i64 %b, 13
106 %add = add i64 %mul, %a
107 ret i64 %add
108}
109
110define signext i32 @maddld32_imm(i32 signext %a, i32 signext %b) {
111; CHECK-LABEL: maddld32_imm:
112; CHECK: # %bb.0: # %entry
113; CHECK-NOT: maddld
114; CHECK-NEXT: mullw 3, 4, 3
115; CHECK-NEXT: addi 3, 3, 13
116; CHECK-NEXT: extsw 3, 3
117; CHECK-NEXT: blr
118
119entry:
120 %mul = mul i32 %b, %a
121 %add = add i32 %mul, 13
122 ret i32 %add
123}
124
125define signext i16 @maddld16_imm(i16 signext %a, i16 signext %b, i16 signext %c) {
126; CHECK-LABEL: maddld16_imm:
127; CHECK: # %bb.0: # %entry
128; CHECK-NOT: maddld
129; CHECK-NEXT: mulli 3, 4, 13
130; CHECK-NEXT: add 3, 3, 5
131; CHECK-NEXT: extsh 3, 3
132; CHECK-NEXT: blr
133
134entry:
135 %mul = mul i16 %b, 13
136 %add = add i16 %mul, %c
137 ret i16 %add
138}
139
140define zeroext i32 @maddld32zeroext_imm(i32 zeroext %a, i32 zeroext %b) {
141; CHECK-LABEL: maddld32zeroext_imm:
142; CHECK: # %bb.0: # %entry
143; CHECK-NOT: maddld
144; CHECK-NEXT: mullw 3, 4, 3
145; CHECK-NEXT: addi 3, 3, 13
146; CHECK-NEXT: clrldi 3, 3, 32
147; CHECK-NEXT: blr
148
149entry:
150 %mul = mul i32 %b, %a
151 %add = add i32 %mul, 13
152 ret i32 %add
153}
154
155define signext i32 @maddld32nsw_imm(i32 signext %a, i32 signext %b) {
156; CHECK-LABEL: maddld32nsw_imm:
157; CHECK: # %bb.0: # %entry
158; CHECK-NOT: maddld
159; CHECK-NEXT: mulli 4, 4, 13
160; CHECK-NEXT: add 3, 4, 3
161; CHECK-NEXT: extsw 3, 3
162; CHECK-NEXT: blr
163
164entry:
165 %mul = mul nsw i32 %b, 13
166 %add = add nsw i32 %mul, %a
167 ret i32 %add
168}
169
170define zeroext i32 @maddld32nuw_imm(i32 zeroext %a, i32 zeroext %b) {
171; CHECK-LABEL: maddld32nuw_imm:
172; CHECK: # %bb.0: # %entry
173; CHECK-NOT: maddld
174; CHECK-NEXT: mullw 3, 4, 3
175; CHECK-NEXT: addi 3, 3, 13
176; CHECK-NEXT: clrldi 3, 3, 32
177; CHECK-NEXT: blr
178
179entry:
180 %mul = mul nuw i32 %b, %a
181 %add = add nuw i32 %mul, 13
182 ret i32 %add
183}
184
185define zeroext i32 @maddld32nuw_imm_imm(i32 zeroext %b) {
186; CHECK-LABEL: maddld32nuw_imm_imm:
187; CHECK: # %bb.0: # %entry
188; CHECK-NOT: maddld
189; CHECK-NEXT: mulli 3, 3, 18
190; CHECK-NEXT: addi 3, 3, 13
191; CHECK-NEXT: clrldi 3, 3, 32
192; CHECK-NEXT: blr
193
194entry:
195 %mul = mul nuw i32 %b, 18
196 %add = add nuw i32 %mul, 13
197 ret i32 %add
198}
199
200define zeroext i32 @maddld32nuw_bigimm_imm(i32 zeroext %b) {
201; CHECK-LABEL: maddld32nuw_bigimm_imm:
202; CHECK: # %bb.0: # %entry
203; CHECK-NOT: maddld
204; CHECK-NEXT: lis 4, 26127
205; CHECK-NEXT: ori 4, 4, 63251
206; CHECK-NEXT: mullw 3, 3, 4
207; CHECK-NEXT: addi 3, 3, 13
208; CHECK-NEXT: clrldi 3, 3, 32
209; CHECK-NEXT: blr
210
211entry:
212 %mul = mul nuw i32 %b, 1712322323
213 %add = add nuw i32 %mul, 13
214 ret i32 %add
215}
216
217define zeroext i32 @maddld32nuw_bigimm_bigimm(i32 zeroext %b) {
218; CHECK-LABEL: maddld32nuw_bigimm_bigimm:
219; CHECK: # %bb.0: # %entry
220; CHECK-P9-NEXT: lis 4, -865
221; CHECK-P9-NEXT: lis 5, 26127
222; CHECK-P9-NEXT: ori 4, 4, 42779
223; CHECK-P9-NEXT: ori 5, 5, 63251
224; CHECK-P9-NEXT: maddld 3, 3, 5, 4
225
226; CHECK-P8-NEXT: lis 4, 26127
227; CHECK-P8-NEXT: ori 4, 4, 63251
228; CHECK-P8-NEXT: mullw 3, 3, 4
229; CHECK-P8-NEXT: addi 3, 3, -22757
230; CHECK-P8-NEXT: addis 3, 3, -864
231
232; CHECK-NEXT: clrldi 3, 3, 32
233; CHECK-NEXT: blr
234
235entry:
236 %mul = mul nuw i32 %b, 1712322323
237 %add = add nuw i32 %mul, 17123223323
238 ret i32 %add
239}