Skip to content

Commit e7c9a99

Browse files
heiherSixWeining
authored andcommitted
[LoongArch] Implement isSExtCheaperThanZExt
Implement isSExtCheaperThanZExt. Signed-off-by: WANG Rui <[email protected]> Differential Revision: https://reviews.llvm.org/D154919
1 parent 74720d1 commit e7c9a99

13 files changed

+83
-85
lines changed

llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3285,6 +3285,10 @@ bool LoongArchTargetLowering::isZExtFree(SDValue Val, EVT VT2) const {
32853285
return TargetLowering::isZExtFree(Val, VT2);
32863286
}
32873287

3288+
bool LoongArchTargetLowering::isSExtCheaperThanZExt(EVT SrcVT, EVT DstVT) const {
3289+
return Subtarget.is64Bit() && SrcVT == MVT::i32 && DstVT == MVT::i64;
3290+
}
3291+
32883292
bool LoongArchTargetLowering::hasAndNotCompare(SDValue Y) const {
32893293
// TODO: Support vectors.
32903294
if (Y.getValueType().isVector())

llvm/lib/Target/LoongArch/LoongArchISelLowering.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ class LoongArchTargetLowering : public TargetLowering {
205205
bool isLegalICmpImmediate(int64_t Imm) const override;
206206
bool isLegalAddImmediate(int64_t Imm) const override;
207207
bool isZExtFree(SDValue Val, EVT VT2) const override;
208+
bool isSExtCheaperThanZExt(EVT SrcVT, EVT DstVT) const override;
208209

209210
bool hasAndNotCompare(SDValue Y) const override;
210211

llvm/test/CodeGen/LoongArch/atomicrmw-uinc-udec-wrap.ll

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -112,16 +112,16 @@ define i32 @atomicrmw_uinc_wrap_i32(ptr %ptr, i32 %val) {
112112
; LA64-LABEL: atomicrmw_uinc_wrap_i32:
113113
; LA64: # %bb.0:
114114
; LA64-NEXT: ld.w $a3, $a0, 0
115-
; LA64-NEXT: bstrpick.d $a2, $a1, 31, 0
115+
; LA64-NEXT: addi.w $a2, $a1, 0
116116
; LA64-NEXT: .p2align 4, , 16
117117
; LA64-NEXT: .LBB2_1: # %atomicrmw.start
118118
; LA64-NEXT: # =>This Loop Header: Depth=1
119119
; LA64-NEXT: # Child Loop BB2_3 Depth 2
120-
; LA64-NEXT: bstrpick.d $a1, $a3, 31, 0
121-
; LA64-NEXT: sltu $a1, $a1, $a2
120+
; LA64-NEXT: addi.w $a4, $a3, 0
121+
; LA64-NEXT: sltu $a1, $a4, $a2
122122
; LA64-NEXT: xori $a1, $a1, 1
123-
; LA64-NEXT: addi.d $a4, $a3, 1
124-
; LA64-NEXT: masknez $a4, $a4, $a1
123+
; LA64-NEXT: addi.d $a5, $a3, 1
124+
; LA64-NEXT: masknez $a5, $a5, $a1
125125
; LA64-NEXT: .LBB2_3: # %atomicrmw.start
126126
; LA64-NEXT: # Parent Loop BB2_1 Depth=1
127127
; LA64-NEXT: # => This Inner Loop Header: Depth=2
@@ -130,16 +130,15 @@ define i32 @atomicrmw_uinc_wrap_i32(ptr %ptr, i32 %val) {
130130
; LA64-NEXT: # %bb.4: # %atomicrmw.start
131131
; LA64-NEXT: # in Loop: Header=BB2_3 Depth=2
132132
; LA64-NEXT: dbar 0
133-
; LA64-NEXT: move $a5, $a4
134-
; LA64-NEXT: sc.w $a5, $a0, 0
135-
; LA64-NEXT: beqz $a5, .LBB2_3
133+
; LA64-NEXT: move $a6, $a5
134+
; LA64-NEXT: sc.w $a6, $a0, 0
135+
; LA64-NEXT: beqz $a6, .LBB2_3
136136
; LA64-NEXT: b .LBB2_6
137137
; LA64-NEXT: .LBB2_5: # %atomicrmw.start
138138
; LA64-NEXT: # in Loop: Header=BB2_1 Depth=1
139139
; LA64-NEXT: dbar 1792
140140
; LA64-NEXT: .LBB2_6: # %atomicrmw.start
141141
; LA64-NEXT: # in Loop: Header=BB2_1 Depth=1
142-
; LA64-NEXT: addi.w $a4, $a3, 0
143142
; LA64-NEXT: move $a3, $a1
144143
; LA64-NEXT: bne $a1, $a4, .LBB2_1
145144
; LA64-NEXT: # %bb.2: # %atomicrmw.end
@@ -308,21 +307,21 @@ define i32 @atomicrmw_udec_wrap_i32(ptr %ptr, i32 %val) {
308307
; LA64-LABEL: atomicrmw_udec_wrap_i32:
309308
; LA64: # %bb.0:
310309
; LA64-NEXT: ld.w $a4, $a0, 0
311-
; LA64-NEXT: bstrpick.d $a3, $a1, 31, 0
310+
; LA64-NEXT: addi.w $a3, $a1, 0
312311
; LA64-NEXT: .p2align 4, , 16
313312
; LA64-NEXT: .LBB6_1: # %atomicrmw.start
314313
; LA64-NEXT: # =>This Loop Header: Depth=1
315314
; LA64-NEXT: # Child Loop BB6_3 Depth 2
316-
; LA64-NEXT: bstrpick.d $a2, $a4, 31, 0
317-
; LA64-NEXT: sltu $a5, $a3, $a2
315+
; LA64-NEXT: addi.w $a5, $a4, 0
316+
; LA64-NEXT: sltu $a2, $a3, $a5
318317
; LA64-NEXT: addi.d $a6, $a4, -1
319-
; LA64-NEXT: masknez $a6, $a6, $a5
320-
; LA64-NEXT: maskeqz $a5, $a1, $a5
321-
; LA64-NEXT: or $a5, $a5, $a6
322-
; LA64-NEXT: sltui $a2, $a2, 1
323-
; LA64-NEXT: masknez $a5, $a5, $a2
318+
; LA64-NEXT: masknez $a6, $a6, $a2
324319
; LA64-NEXT: maskeqz $a2, $a1, $a2
325-
; LA64-NEXT: or $a5, $a2, $a5
320+
; LA64-NEXT: or $a2, $a2, $a6
321+
; LA64-NEXT: sltui $a6, $a5, 1
322+
; LA64-NEXT: masknez $a2, $a2, $a6
323+
; LA64-NEXT: maskeqz $a6, $a1, $a6
324+
; LA64-NEXT: or $a6, $a6, $a2
326325
; LA64-NEXT: .LBB6_3: # %atomicrmw.start
327326
; LA64-NEXT: # Parent Loop BB6_1 Depth=1
328327
; LA64-NEXT: # => This Inner Loop Header: Depth=2
@@ -331,16 +330,15 @@ define i32 @atomicrmw_udec_wrap_i32(ptr %ptr, i32 %val) {
331330
; LA64-NEXT: # %bb.4: # %atomicrmw.start
332331
; LA64-NEXT: # in Loop: Header=BB6_3 Depth=2
333332
; LA64-NEXT: dbar 0
334-
; LA64-NEXT: move $a6, $a5
335-
; LA64-NEXT: sc.w $a6, $a0, 0
336-
; LA64-NEXT: beqz $a6, .LBB6_3
333+
; LA64-NEXT: move $a7, $a6
334+
; LA64-NEXT: sc.w $a7, $a0, 0
335+
; LA64-NEXT: beqz $a7, .LBB6_3
337336
; LA64-NEXT: b .LBB6_6
338337
; LA64-NEXT: .LBB6_5: # %atomicrmw.start
339338
; LA64-NEXT: # in Loop: Header=BB6_1 Depth=1
340339
; LA64-NEXT: dbar 1792
341340
; LA64-NEXT: .LBB6_6: # %atomicrmw.start
342341
; LA64-NEXT: # in Loop: Header=BB6_1 Depth=1
343-
; LA64-NEXT: addi.w $a5, $a4, 0
344342
; LA64-NEXT: move $a4, $a2
345343
; LA64-NEXT: bne $a2, $a5, .LBB6_1
346344
; LA64-NEXT: # %bb.2: # %atomicrmw.end

llvm/test/CodeGen/LoongArch/duplicate-returns-for-tailcall.ll

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,12 @@ declare i32 @test3()
99
define i32 @duplicate_returns(i32 %a, i32 %b) nounwind {
1010
; CHECK-LABEL: duplicate_returns:
1111
; CHECK: # %bb.0: # %entry
12-
; CHECK-NEXT: bstrpick.d $a2, $a0, 31, 0
13-
; CHECK-NEXT: beqz $a2, .LBB0_4
14-
; CHECK-NEXT: # %bb.1: # %if.else
15-
; CHECK-NEXT: bstrpick.d $a2, $a1, 31, 0
16-
; CHECK-NEXT: beqz $a2, .LBB0_5
17-
; CHECK-NEXT: # %bb.2: # %if.else2
1812
; CHECK-NEXT: addi.w $a0, $a0, 0
13+
; CHECK-NEXT: beqz $a0, .LBB0_4
14+
; CHECK-NEXT: # %bb.1: # %if.else
1915
; CHECK-NEXT: addi.w $a1, $a1, 0
16+
; CHECK-NEXT: beqz $a1, .LBB0_5
17+
; CHECK-NEXT: # %bb.2: # %if.else2
2018
; CHECK-NEXT: bge $a1, $a0, .LBB0_6
2119
; CHECK-NEXT: # %bb.3: # %if.then3
2220
; CHECK-NEXT: b %plt(test2)

llvm/test/CodeGen/LoongArch/get-setcc-result-type.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,19 @@
55
define void @getSetCCResultType(ptr %p) {
66
; CHECK-LABEL: getSetCCResultType:
77
; CHECK: # %bb.0: # %entry
8-
; CHECK-NEXT: ld.wu $a1, $a0, 12
8+
; CHECK-NEXT: ld.w $a1, $a0, 12
99
; CHECK-NEXT: sltui $a1, $a1, 1
1010
; CHECK-NEXT: sub.d $a1, $zero, $a1
1111
; CHECK-NEXT: st.w $a1, $a0, 12
12-
; CHECK-NEXT: ld.wu $a1, $a0, 8
12+
; CHECK-NEXT: ld.w $a1, $a0, 8
1313
; CHECK-NEXT: sltui $a1, $a1, 1
1414
; CHECK-NEXT: sub.d $a1, $zero, $a1
1515
; CHECK-NEXT: st.w $a1, $a0, 8
16-
; CHECK-NEXT: ld.wu $a1, $a0, 4
16+
; CHECK-NEXT: ld.w $a1, $a0, 4
1717
; CHECK-NEXT: sltui $a1, $a1, 1
1818
; CHECK-NEXT: sub.d $a1, $zero, $a1
1919
; CHECK-NEXT: st.w $a1, $a0, 4
20-
; CHECK-NEXT: ld.wu $a1, $a0, 0
20+
; CHECK-NEXT: ld.w $a1, $a0, 0
2121
; CHECK-NEXT: sltui $a1, $a1, 1
2222
; CHECK-NEXT: sub.d $a1, $zero, $a1
2323
; CHECK-NEXT: st.w $a1, $a0, 0

llvm/test/CodeGen/LoongArch/ir-instruction/atomic-cmpxchg.ll

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -233,32 +233,31 @@ define i1 @cmpxchg_i8_acquire_acquire_reti1(ptr %ptr, i8 %cmp, i8 %val) nounwind
233233
; LA64-NEXT: addi.w $a3, $zero, -4
234234
; LA64-NEXT: and $a3, $a0, $a3
235235
; LA64-NEXT: slli.d $a0, $a0, 3
236-
; LA64-NEXT: andi $a1, $a1, 255
237-
; LA64-NEXT: sll.w $a1, $a1, $a0
238236
; LA64-NEXT: ori $a4, $zero, 255
239237
; LA64-NEXT: sll.w $a4, $a4, $a0
238+
; LA64-NEXT: andi $a1, $a1, 255
239+
; LA64-NEXT: sll.w $a1, $a1, $a0
240240
; LA64-NEXT: andi $a2, $a2, 255
241241
; LA64-NEXT: sll.w $a0, $a2, $a0
242242
; LA64-NEXT: addi.w $a0, $a0, 0
243+
; LA64-NEXT: addi.w $a1, $a1, 0
243244
; LA64-NEXT: addi.w $a2, $a4, 0
244-
; LA64-NEXT: addi.w $a5, $a1, 0
245245
; LA64-NEXT: .LBB8_1: # =>This Inner Loop Header: Depth=1
246-
; LA64-NEXT: ll.w $a6, $a3, 0
247-
; LA64-NEXT: and $a7, $a6, $a2
248-
; LA64-NEXT: bne $a7, $a5, .LBB8_3
246+
; LA64-NEXT: ll.w $a5, $a3, 0
247+
; LA64-NEXT: and $a6, $a5, $a2
248+
; LA64-NEXT: bne $a6, $a1, .LBB8_3
249249
; LA64-NEXT: # %bb.2: # in Loop: Header=BB8_1 Depth=1
250250
; LA64-NEXT: dbar 0
251-
; LA64-NEXT: andn $a7, $a6, $a2
252-
; LA64-NEXT: or $a7, $a7, $a0
253-
; LA64-NEXT: sc.w $a7, $a3, 0
254-
; LA64-NEXT: beqz $a7, .LBB8_1
251+
; LA64-NEXT: andn $a6, $a5, $a2
252+
; LA64-NEXT: or $a6, $a6, $a0
253+
; LA64-NEXT: sc.w $a6, $a3, 0
254+
; LA64-NEXT: beqz $a6, .LBB8_1
255255
; LA64-NEXT: b .LBB8_4
256256
; LA64-NEXT: .LBB8_3:
257257
; LA64-NEXT: dbar 1792
258258
; LA64-NEXT: .LBB8_4:
259-
; LA64-NEXT: and $a0, $a6, $a4
260-
; LA64-NEXT: bstrpick.d $a0, $a0, 31, 0
261-
; LA64-NEXT: bstrpick.d $a1, $a1, 31, 0
259+
; LA64-NEXT: and $a0, $a5, $a4
260+
; LA64-NEXT: addi.w $a0, $a0, 0
262261
; LA64-NEXT: xor $a0, $a1, $a0
263262
; LA64-NEXT: sltui $a0, $a0, 1
264263
; LA64-NEXT: ret
@@ -273,33 +272,32 @@ define i1 @cmpxchg_i16_acquire_acquire_reti1(ptr %ptr, i16 %cmp, i16 %val) nounw
273272
; LA64-NEXT: addi.w $a3, $zero, -4
274273
; LA64-NEXT: and $a3, $a0, $a3
275274
; LA64-NEXT: slli.d $a0, $a0, 3
276-
; LA64-NEXT: bstrpick.d $a1, $a1, 15, 0
277-
; LA64-NEXT: sll.w $a1, $a1, $a0
278275
; LA64-NEXT: lu12i.w $a4, 15
279276
; LA64-NEXT: ori $a4, $a4, 4095
280277
; LA64-NEXT: sll.w $a4, $a4, $a0
278+
; LA64-NEXT: bstrpick.d $a1, $a1, 15, 0
279+
; LA64-NEXT: sll.w $a1, $a1, $a0
281280
; LA64-NEXT: bstrpick.d $a2, $a2, 15, 0
282281
; LA64-NEXT: sll.w $a0, $a2, $a0
283282
; LA64-NEXT: addi.w $a0, $a0, 0
283+
; LA64-NEXT: addi.w $a1, $a1, 0
284284
; LA64-NEXT: addi.w $a2, $a4, 0
285-
; LA64-NEXT: addi.w $a5, $a1, 0
286285
; LA64-NEXT: .LBB9_1: # =>This Inner Loop Header: Depth=1
287-
; LA64-NEXT: ll.w $a6, $a3, 0
288-
; LA64-NEXT: and $a7, $a6, $a2
289-
; LA64-NEXT: bne $a7, $a5, .LBB9_3
286+
; LA64-NEXT: ll.w $a5, $a3, 0
287+
; LA64-NEXT: and $a6, $a5, $a2
288+
; LA64-NEXT: bne $a6, $a1, .LBB9_3
290289
; LA64-NEXT: # %bb.2: # in Loop: Header=BB9_1 Depth=1
291290
; LA64-NEXT: dbar 0
292-
; LA64-NEXT: andn $a7, $a6, $a2
293-
; LA64-NEXT: or $a7, $a7, $a0
294-
; LA64-NEXT: sc.w $a7, $a3, 0
295-
; LA64-NEXT: beqz $a7, .LBB9_1
291+
; LA64-NEXT: andn $a6, $a5, $a2
292+
; LA64-NEXT: or $a6, $a6, $a0
293+
; LA64-NEXT: sc.w $a6, $a3, 0
294+
; LA64-NEXT: beqz $a6, .LBB9_1
296295
; LA64-NEXT: b .LBB9_4
297296
; LA64-NEXT: .LBB9_3:
298297
; LA64-NEXT: dbar 1792
299298
; LA64-NEXT: .LBB9_4:
300-
; LA64-NEXT: and $a0, $a6, $a4
301-
; LA64-NEXT: bstrpick.d $a0, $a0, 31, 0
302-
; LA64-NEXT: bstrpick.d $a1, $a1, 31, 0
299+
; LA64-NEXT: and $a0, $a5, $a4
300+
; LA64-NEXT: addi.w $a0, $a0, 0
303301
; LA64-NEXT: xor $a0, $a1, $a0
304302
; LA64-NEXT: sltui $a0, $a0, 1
305303
; LA64-NEXT: ret

llvm/test/CodeGen/LoongArch/ir-instruction/br.ll

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ define void @foo_br_eq(i32 %a, ptr %b) nounwind {
2727
;
2828
; LA64-LABEL: foo_br_eq:
2929
; LA64: # %bb.0:
30-
; LA64-NEXT: ld.wu $a2, $a1, 0
31-
; LA64-NEXT: bstrpick.d $a0, $a0, 31, 0
30+
; LA64-NEXT: ld.w $a2, $a1, 0
31+
; LA64-NEXT: addi.w $a0, $a0, 0
3232
; LA64-NEXT: beq $a2, $a0, .LBB1_2
3333
; LA64-NEXT: # %bb.1: # %test
3434
; LA64-NEXT: ld.w $a0, $a1, 0
@@ -57,8 +57,8 @@ define void @foo_br_ne(i32 %a, ptr %b) nounwind {
5757
;
5858
; LA64-LABEL: foo_br_ne:
5959
; LA64: # %bb.0:
60-
; LA64-NEXT: ld.wu $a2, $a1, 0
61-
; LA64-NEXT: bstrpick.d $a0, $a0, 31, 0
60+
; LA64-NEXT: ld.w $a2, $a1, 0
61+
; LA64-NEXT: addi.w $a0, $a0, 0
6262
; LA64-NEXT: bne $a2, $a0, .LBB2_2
6363
; LA64-NEXT: # %bb.1: # %test
6464
; LA64-NEXT: ld.w $a0, $a1, 0
@@ -147,8 +147,8 @@ define void @foo_br_ult(i32 %a, ptr %b) nounwind {
147147
;
148148
; LA64-LABEL: foo_br_ult:
149149
; LA64: # %bb.0:
150-
; LA64-NEXT: ld.wu $a2, $a1, 0
151-
; LA64-NEXT: bstrpick.d $a0, $a0, 31, 0
150+
; LA64-NEXT: ld.w $a2, $a1, 0
151+
; LA64-NEXT: addi.w $a0, $a0, 0
152152
; LA64-NEXT: bltu $a2, $a0, .LBB5_2
153153
; LA64-NEXT: # %bb.1: # %test
154154
; LA64-NEXT: ld.w $a0, $a1, 0
@@ -177,8 +177,8 @@ define void @foo_br_uge(i32 %a, ptr %b) nounwind {
177177
;
178178
; LA64-LABEL: foo_br_uge:
179179
; LA64: # %bb.0:
180-
; LA64-NEXT: ld.wu $a2, $a1, 0
181-
; LA64-NEXT: bstrpick.d $a0, $a0, 31, 0
180+
; LA64-NEXT: ld.w $a2, $a1, 0
181+
; LA64-NEXT: addi.w $a0, $a0, 0
182182
; LA64-NEXT: bgeu $a2, $a0, .LBB6_2
183183
; LA64-NEXT: # %bb.1: # %test
184184
; LA64-NEXT: ld.w $a0, $a1, 0
@@ -268,8 +268,8 @@ define void @foo_br_ugt(i32 %a, ptr %b) nounwind {
268268
;
269269
; LA64-LABEL: foo_br_ugt:
270270
; LA64: # %bb.0:
271-
; LA64-NEXT: ld.wu $a2, $a1, 0
272-
; LA64-NEXT: bstrpick.d $a0, $a0, 31, 0
271+
; LA64-NEXT: ld.w $a2, $a1, 0
272+
; LA64-NEXT: addi.w $a0, $a0, 0
273273
; LA64-NEXT: bltu $a0, $a2, .LBB9_2
274274
; LA64-NEXT: # %bb.1: # %test
275275
; LA64-NEXT: ld.w $a0, $a1, 0
@@ -298,8 +298,8 @@ define void @foo_br_ule(i32 %a, ptr %b) nounwind {
298298
;
299299
; LA64-LABEL: foo_br_ule:
300300
; LA64: # %bb.0:
301-
; LA64-NEXT: ld.wu $a2, $a1, 0
302-
; LA64-NEXT: bstrpick.d $a0, $a0, 31, 0
301+
; LA64-NEXT: ld.w $a2, $a1, 0
302+
; LA64-NEXT: addi.w $a0, $a0, 0
303303
; LA64-NEXT: bgeu $a0, $a2, .LBB10_2
304304
; LA64-NEXT: # %bb.1: # %test
305305
; LA64-NEXT: ld.w $a0, $a1, 0

llvm/test/CodeGen/LoongArch/jump-table.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ define void @switch_4_arms(i32 %in, ptr %out) nounwind {
4848
;
4949
; LA64-LABEL: switch_4_arms:
5050
; LA64: # %bb.0: # %entry
51-
; LA64-NEXT: bstrpick.d $a0, $a0, 31, 0
51+
; LA64-NEXT: addi.w $a0, $a0, 0
5252
; LA64-NEXT: ori $a2, $zero, 2
5353
; LA64-NEXT: blt $a2, $a0, .LBB0_4
5454
; LA64-NEXT: # %bb.1: # %entry
@@ -105,7 +105,7 @@ define void @switch_4_arms(i32 %in, ptr %out) nounwind {
105105
;
106106
; LA64-JT-LABEL: switch_4_arms:
107107
; LA64-JT: # %bb.0: # %entry
108-
; LA64-JT-NEXT: bstrpick.d $a0, $a0, 31, 0
108+
; LA64-JT-NEXT: addi.w $a0, $a0, 0
109109
; LA64-JT-NEXT: addi.d $a2, $a0, -1
110110
; LA64-JT-NEXT: ori $a0, $zero, 3
111111
; LA64-JT-NEXT: bltu $a0, $a2, .LBB0_6

llvm/test/CodeGen/LoongArch/nomerge.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ define void @foo(i32 %i) nounwind {
66
; CHECK: # %bb.0: # %entry
77
; CHECK-NEXT: addi.d $sp, $sp, -16
88
; CHECK-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill
9-
; CHECK-NEXT: bstrpick.d $a0, $a0, 31, 0
9+
; CHECK-NEXT: addi.w $a0, $a0, 0
1010
; CHECK-NEXT: ori $a1, $zero, 7
1111
; CHECK-NEXT: beq $a0, $a1, .LBB0_3
1212
; CHECK-NEXT: # %bb.1: # %entry

llvm/test/CodeGen/LoongArch/sext-cheaper-than-zext.ll

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@
44
define signext i32 @sext_icmp(i32 signext %x, i32 signext %y) {
55
; CHECK-LABEL: sext_icmp:
66
; CHECK: # %bb.0:
7-
; CHECK-NEXT: bstrpick.d $a1, $a1, 31, 0
8-
; CHECK-NEXT: addi.d $a0, $a0, 1
9-
; CHECK-NEXT: bstrpick.d $a0, $a0, 31, 0
7+
; CHECK-NEXT: addi.w $a0, $a0, 1
108
; CHECK-NEXT: xor $a0, $a0, $a1
119
; CHECK-NEXT: sltu $a0, $zero, $a0
1210
; CHECK-NEXT: ret

llvm/test/CodeGen/LoongArch/shrinkwrap.ll

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ define void @eliminate_restore(i32 %n) nounwind {
1010
; NOSHRINKW-NEXT: addi.d $sp, $sp, -16
1111
; NOSHRINKW-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill
1212
; NOSHRINKW-NEXT: # kill: def $r5 killed $r4
13-
; NOSHRINKW-NEXT: bstrpick.d $a1, $a0, 31, 0
13+
; NOSHRINKW-NEXT: addi.w $a1, $a0, 0
1414
; NOSHRINKW-NEXT: ori $a0, $zero, 32
1515
; NOSHRINKW-NEXT: bltu $a0, $a1, .LBB0_2
1616
; NOSHRINKW-NEXT: b .LBB0_1
@@ -23,7 +23,7 @@ define void @eliminate_restore(i32 %n) nounwind {
2323
;
2424
; SHRINKW-LABEL: eliminate_restore:
2525
; SHRINKW: # %bb.0:
26-
; SHRINKW-NEXT: bstrpick.d $a0, $a0, 31, 0
26+
; SHRINKW-NEXT: addi.w $a0, $a0, 0
2727
; SHRINKW-NEXT: ori $a1, $zero, 32
2828
; SHRINKW-NEXT: bgeu $a1, $a0, .LBB0_2
2929
; SHRINKW-NEXT: # %bb.1: # %if.end
@@ -54,7 +54,7 @@ define void @conditional_alloca(i32 %n) nounwind {
5454
; NOSHRINKW-NEXT: addi.d $fp, $sp, 32
5555
; NOSHRINKW-NEXT: move $a1, $a0
5656
; NOSHRINKW-NEXT: st.d $a1, $fp, -24 # 8-byte Folded Spill
57-
; NOSHRINKW-NEXT: bstrpick.d $a1, $a0, 31, 0
57+
; NOSHRINKW-NEXT: addi.w $a1, $a0, 0
5858
; NOSHRINKW-NEXT: ori $a0, $zero, 32
5959
; NOSHRINKW-NEXT: bltu $a0, $a1, .LBB1_2
6060
; NOSHRINKW-NEXT: b .LBB1_1
@@ -78,14 +78,15 @@ define void @conditional_alloca(i32 %n) nounwind {
7878
;
7979
; SHRINKW-LABEL: conditional_alloca:
8080
; SHRINKW: # %bb.0:
81-
; SHRINKW-NEXT: bstrpick.d $a0, $a0, 31, 0
82-
; SHRINKW-NEXT: ori $a1, $zero, 32
83-
; SHRINKW-NEXT: bltu $a1, $a0, .LBB1_2
81+
; SHRINKW-NEXT: addi.w $a1, $a0, 0
82+
; SHRINKW-NEXT: ori $a2, $zero, 32
83+
; SHRINKW-NEXT: bltu $a2, $a1, .LBB1_2
8484
; SHRINKW-NEXT: # %bb.1: # %if.then
8585
; SHRINKW-NEXT: addi.d $sp, $sp, -16
8686
; SHRINKW-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill
8787
; SHRINKW-NEXT: st.d $fp, $sp, 0 # 8-byte Folded Spill
8888
; SHRINKW-NEXT: addi.d $fp, $sp, 16
89+
; SHRINKW-NEXT: bstrpick.d $a0, $a0, 31, 0
8990
; SHRINKW-NEXT: addi.d $a0, $a0, 15
9091
; SHRINKW-NEXT: bstrpick.d $a0, $a0, 32, 4
9192
; SHRINKW-NEXT: slli.d $a0, $a0, 4

0 commit comments

Comments
 (0)