Skip to content

Commit 819feca

Browse files
[RISCV][GISEL] Legalize G_ICMP for scalable vector types
The result of a vector G_ICMP is a vector with an s1 element type. The input vectors can be integer, floating-point, or boolean element type.
1 parent 2ff117a commit 819feca

File tree

6 files changed

+487
-4
lines changed

6 files changed

+487
-4
lines changed

llvm/lib/CodeGen/GlobalISel/LegalizerInfo.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,8 @@ static bool mutationIsSane(const LegalizeRule &Rule,
154154
case WidenScalar: {
155155
if (OldTy.isVector()) {
156156
// Number of elements should not change.
157-
if (!NewTy.isVector() || OldTy.getNumElements() != NewTy.getNumElements())
157+
if (!NewTy.isVector() ||
158+
OldTy.getElementCount() != NewTy.getElementCount())
158159
return false;
159160
} else {
160161
// Both types must be vectors

llvm/lib/CodeGen/MachineVerifier.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1506,7 +1506,8 @@ void MachineVerifier::verifyPreISelGenericInstruction(const MachineInstr *MI) {
15061506
LLT SrcTy = MRI->getType(MI->getOperand(2).getReg());
15071507

15081508
if ((DstTy.isVector() != SrcTy.isVector()) ||
1509-
(DstTy.isVector() && DstTy.getNumElements() != SrcTy.getNumElements()))
1509+
(DstTy.isVector() &&
1510+
DstTy.getElementCount() != SrcTy.getElementCount()))
15101511
report("Generic vector icmp/fcmp must preserve number of lanes", MI);
15111512

15121513
break;

llvm/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,9 @@ RISCVLegalizerInfo::RISCVLegalizerInfo(const RISCVSubtarget &ST)
231231

232232
getActionDefinitionsBuilder(G_ICMP)
233233
.legalFor({{sXLen, sXLen}, {sXLen, p0}})
234+
.widenScalarOrEltToNextPow2OrMinSize(1, 8)
235+
.legalIf(all(typeIsLegalBoolVec(0, BoolVecTys, ST),
236+
typeIsLegalIntOrFPVec(1, IntOrFPVecTys, ST)))
234237
.widenScalarToNextPow2(1)
235238
.clampScalar(1, sXLen, sXLen)
236239
.clampScalar(0, sXLen, sXLen);

0 commit comments

Comments
 (0)