Skip to content

Commit e4fb302

Browse files
authored
[LoongArch] Adds support for vectors in OptWInstrs (#118935)
1 parent de1a423 commit e4fb302

File tree

2 files changed

+32
-7
lines changed

2 files changed

+32
-7
lines changed

llvm/lib/Target/LoongArch/LoongArchOptWInstrs.cpp

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,6 @@ static bool hasAllNBitUsers(const MachineInstr &OrigMI,
126126

127127
switch (UserMI->getOpcode()) {
128128
default:
129-
// TODO: Add vector
130129
return false;
131130

132131
case LoongArch::ADD_W:
@@ -162,6 +161,10 @@ static bool hasAllNBitUsers(const MachineInstr &OrigMI,
162161
case LoongArch::MOVGR2FCSR:
163162
case LoongArch::MOVGR2FRH_W:
164163
case LoongArch::MOVGR2FR_W_64:
164+
case LoongArch::VINSGR2VR_W:
165+
case LoongArch::XVINSGR2VR_W:
166+
case LoongArch::VREPLGR2VR_W:
167+
case LoongArch::XVREPLGR2VR_W:
165168
if (Bits >= 32)
166169
break;
167170
return false;
@@ -175,14 +178,37 @@ static bool hasAllNBitUsers(const MachineInstr &OrigMI,
175178
break;
176179
return false;
177180
case LoongArch::MOVGR2CF:
181+
case LoongArch::VREPLVE_D:
182+
case LoongArch::XVREPLVE_D:
178183
if (Bits >= 1)
179184
break;
180185
return false;
186+
case LoongArch::VREPLVE_W:
187+
case LoongArch::XVREPLVE_W:
188+
if (Bits >= 2)
189+
break;
190+
return false;
191+
case LoongArch::VREPLVE_H:
192+
case LoongArch::XVREPLVE_H:
193+
if (Bits >= 3)
194+
break;
195+
return false;
196+
case LoongArch::VREPLVE_B:
197+
case LoongArch::XVREPLVE_B:
198+
if (Bits >= 4)
199+
break;
200+
return false;
181201
case LoongArch::EXT_W_B:
202+
case LoongArch::VINSGR2VR_B:
203+
case LoongArch::VREPLGR2VR_B:
204+
case LoongArch::XVREPLGR2VR_B:
182205
if (Bits >= 8)
183206
break;
184207
return false;
185208
case LoongArch::EXT_W_H:
209+
case LoongArch::VINSGR2VR_H:
210+
case LoongArch::VREPLGR2VR_H:
211+
case LoongArch::XVREPLGR2VR_H:
186212
if (Bits >= 16)
187213
break;
188214
return false;
@@ -435,7 +461,8 @@ static bool isSignExtendingOpW(const MachineInstr &MI,
435461
case LoongArch::MOVCF2GR:
436462
case LoongArch::MOVFRH2GR_S:
437463
case LoongArch::MOVFR2GR_S_64:
438-
// TODO: Add vector
464+
case LoongArch::VPICKVE2GR_W:
465+
case LoongArch::XVPICKVE2GR_W:
439466
return true;
440467
// Special cases that require checking operands.
441468
// shifting right sufficiently makes the value 32-bit sign-extended

llvm/test/CodeGen/LoongArch/sextw-removal.ll

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1322,7 +1322,6 @@ define signext i32 @test20(<4 x i32> %v) {
13221322
; CHECK-LABEL: test20:
13231323
; CHECK: # %bb.0: # %entry
13241324
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 3
1325-
; CHECK-NEXT: addi.w $a0, $a0, 0
13261325
; CHECK-NEXT: ret
13271326
;
13281327
; NORMV-LABEL: test20:
@@ -1358,7 +1357,7 @@ define fastcc ptr @test21(ptr %B, ptr %Op0, ptr %Op1, ptr %P, ptr %M, i1 zeroext
13581357
; CHECK-NEXT: .cfi_offset 27, -56
13591358
; CHECK-NEXT: .cfi_offset 28, -64
13601359
; CHECK-NEXT: .cfi_offset 29, -72
1361-
; CHECK-NEXT: ld.d $s6, $sp, 80
1360+
; CHECK-NEXT: ld.w $s6, $sp, 80
13621361
; CHECK-NEXT: move $s2, $a7
13631362
; CHECK-NEXT: move $s4, $a5
13641363
; CHECK-NEXT: move $s0, $a4
@@ -1379,8 +1378,7 @@ define fastcc ptr @test21(ptr %B, ptr %Op0, ptr %Op1, ptr %P, ptr %M, i1 zeroext
13791378
; CHECK-NEXT: .LBB24_3: # %for.cond32.preheader.preheader
13801379
; CHECK-NEXT: ld.d $a0, $sp, 96
13811380
; CHECK-NEXT: ld.d $a1, $sp, 88
1382-
; CHECK-NEXT: addi.w $a2, $s6, 0
1383-
; CHECK-NEXT: sltui $a2, $a2, 1
1381+
; CHECK-NEXT: sltui $a2, $s6, 1
13841382
; CHECK-NEXT: masknez $a0, $a0, $a2
13851383
; CHECK-NEXT: vreplgr2vr.w $vr0, $s6
13861384
; CHECK-NEXT: andi $a1, $a1, 1
@@ -1452,7 +1450,7 @@ define fastcc ptr @test21(ptr %B, ptr %Op0, ptr %Op1, ptr %P, ptr %M, i1 zeroext
14521450
; NORMV-NEXT: beqz $s4, .LBB24_2
14531451
; NORMV-NEXT: # %bb.1: # %if.then26
14541452
; NORMV-NEXT: addi.d $a0, $s6, 1
1455-
; NORMV-NEXT: addi.w $s6, $a0, 0
1453+
; NORMV-NEXT: addi.d $s6, $a0, 0
14561454
; NORMV-NEXT: beqz $s4, .LBB24_3
14571455
; NORMV-NEXT: b .LBB24_6
14581456
; NORMV-NEXT: .LBB24_2:

0 commit comments

Comments
 (0)