Skip to content

Commit 7cf605e

Browse files
committed
[𝘀𝗽𝗿] changes introduced through rebase
Created using spr 1.3.6-beta.1 [skip ci]
1 parent 080b9fd commit 7cf605e

File tree

4 files changed

+16
-11
lines changed

4 files changed

+16
-11
lines changed

llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3708,6 +3708,15 @@ static bool isImplicitDef(SDValue V) {
37083708
return V.getMachineOpcode() == TargetOpcode::IMPLICIT_DEF;
37093709
}
37103710

3711+
static bool hasGPROut(unsigned Opc) {
3712+
switch (RISCV::getRVVMCOpcode(Opc)) {
3713+
case RISCV::VCPOP_M:
3714+
case RISCV::VFIRST_M:
3715+
return true;
3716+
}
3717+
return false;
3718+
}
3719+
37113720
// Optimize masked RVV pseudo instructions with a known all-ones mask to their
37123721
// corresponding "unmasked" pseudo versions. The mask we're interested in will
37133722
// take the form of a V0 physical register operand, with a glued
@@ -3737,8 +3746,9 @@ bool RISCVDAGToDAGISel::doPeepholeMaskedRVV(MachineSDNode *N) {
37373746
#endif
37383747

37393748
SmallVector<SDValue, 8> Ops;
3740-
// Skip the passthru operand at index 0 if !UseTUPseudo.
3741-
for (unsigned I = !UseTUPseudo, E = N->getNumOperands(); I != E; I++) {
3749+
// Skip the passthru operand at index 0 if !UseTUPseudo and no GPR out.
3750+
bool ShouldSkip = !UseTUPseudo && !hasGPROut(Opc);
3751+
for (unsigned I = ShouldSkip, E = N->getNumOperands(); I != E; I++) {
37423752
// Skip the mask, and the Glue.
37433753
SDValue Op = N->getOperand(I);
37443754
if (I == MaskOpIdx || Op.getValueType() == MVT::Glue)

llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1150,6 +1150,7 @@ class VPseudoUnaryNoMaskGPROut :
11501150
class VPseudoUnaryMaskGPROut :
11511151
Pseudo<(outs GPR:$rd),
11521152
(ins VR:$rs1, VMaskOp:$vm, AVL:$vl, sew:$sew), []>,
1153+
RISCVMaskedPseudo<MaskIdx=1>,
11531154
RISCVVPseudo {
11541155
let mayLoad = 0;
11551156
let mayStore = 0;

llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2527,7 +2527,7 @@ RISCVTTIImpl::enableMemCmpExpansion(bool OptSize, bool IsZeroCmp) const {
25272527
Options.LoadSizes = {8, 4, 2, 1};
25282528
else
25292529
Options.LoadSizes = {4, 2, 1};
2530-
if (IsZeroCmp && ST->hasVInstructions()) {
2530+
if (IsZeroCmp && ST->hasVInstructions() && ST->enableUnalignedVectorMem()) {
25312531
unsigned RealMinVLen = ST->getRealMinVLen();
25322532
// Support Fractional LMULs if the lengths are larger than XLen.
25332533
// TODO: Support non-power-of-2 types.

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-reduction-fp.ll

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1797,11 +1797,8 @@ define float @vreduce_fminimum_v7f32(ptr %x) {
17971797
; CHECK: # %bb.0:
17981798
; CHECK-NEXT: vsetivli zero, 7, e32, m2, ta, ma
17991799
; CHECK-NEXT: vle32.v v8, (a0)
1800-
; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
1801-
; CHECK-NEXT: vmset.m v0
1802-
; CHECK-NEXT: vsetivli zero, 7, e32, m2, ta, ma
18031800
; CHECK-NEXT: vmfne.vv v10, v8, v8
1804-
; CHECK-NEXT: vcpop.m a0, v10, v0.t
1801+
; CHECK-NEXT: vcpop.m a0, v10
18051802
; CHECK-NEXT: beqz a0, .LBB111_2
18061803
; CHECK-NEXT: # %bb.1:
18071804
; CHECK-NEXT: lui a0, 523264
@@ -2558,11 +2555,8 @@ define float @vreduce_fmaximum_v7f32(ptr %x) {
25582555
; CHECK: # %bb.0:
25592556
; CHECK-NEXT: vsetivli zero, 7, e32, m2, ta, ma
25602557
; CHECK-NEXT: vle32.v v8, (a0)
2561-
; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
2562-
; CHECK-NEXT: vmset.m v0
2563-
; CHECK-NEXT: vsetivli zero, 7, e32, m2, ta, ma
25642558
; CHECK-NEXT: vmfne.vv v10, v8, v8
2565-
; CHECK-NEXT: vcpop.m a0, v10, v0.t
2559+
; CHECK-NEXT: vcpop.m a0, v10
25662560
; CHECK-NEXT: beqz a0, .LBB139_2
25672561
; CHECK-NEXT: # %bb.1:
25682562
; CHECK-NEXT: lui a0, 523264

0 commit comments

Comments
 (0)