Skip to content

Commit 33a06a3

Browse files
fixup! move to widenScalar
1 parent b9a272f commit 33a06a3

File tree

2 files changed

+29
-10
lines changed

2 files changed

+29
-10
lines changed

llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3276,6 +3276,33 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {
32763276
Observer.changedInstr(MI);
32773277
return Legalized;
32783278
}
3279+
case TargetOpcode::G_INSERT_SUBVECTOR: {
3280+
if (TypeIdx != 0)
3281+
return UnableToLegalize;
3282+
3283+
GInsertSubvector &IS = cast<GInsertSubvector>(MI);
3284+
Register BigVec = IS.getBigVec();
3285+
Register SubVec = IS.getSubVec();
3286+
3287+
LLT SubVecTy = MRI.getType(SubVec);
3288+
LLT SubVecWideTy = SubVecTy.changeElementType(WideTy.getElementType());
3289+
3290+
// Widen the G_INSERT_SUBVECTOR
3291+
auto BigZExt = MIRBuilder.buildZExt(WideTy, BigVec);
3292+
auto SubZExt = MIRBuilder.buildZExt(SubVecWideTy, SubVec);
3293+
auto WideInsert = MIRBuilder.buildInsertSubvector(WideTy, BigZExt, SubZExt,
3294+
IS.getIndexImm());
3295+
3296+
// Truncate back down
3297+
auto SplatZero = MIRBuilder.buildSplatVector(
3298+
WideTy, MIRBuilder.buildConstant(WideTy.getElementType(), 0));
3299+
MIRBuilder.buildICmp(CmpInst::Predicate::ICMP_NE, IS.getReg(0), WideInsert,
3300+
SplatZero);
3301+
3302+
MI.eraseFromParent();
3303+
3304+
return Legalized;
3305+
}
32793306
}
32803307
}
32813308

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

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1064,16 +1064,8 @@ bool RISCVLegalizerInfo::legalizeInsertSubvector(MachineInstr &MI,
10641064
// This poses a problem when we wish to insert a scalable vector which
10651065
// can't be re-expressed as a larger type. Just choose the slow path and
10661066
// extend to a larger type, then truncate back down.
1067-
BigTy = BigTy.changeElementType(LLT::scalar(8));
1068-
LitTy = LitTy.changeElementType(LLT::scalar(8));
1069-
auto BigZExt = MIB.buildZExt(BigTy, BigVec);
1070-
auto LitZExt = MIB.buildZExt(LitTy, LitVec);
1071-
auto Insert = MIB.buildInsertSubvector(BigTy, BigZExt, LitZExt, Idx);
1072-
auto SplatZero = MIB.buildSplatVector(
1073-
BigTy, MIB.buildConstant(BigTy.getElementType(), 0));
1074-
MIB.buildICmp(CmpInst::Predicate::ICMP_NE, Dst, Insert, SplatZero);
1075-
MI.eraseFromParent();
1076-
return true;
1067+
LLT ExtBigTy = BigTy.changeElementType(LLT::scalar(8));
1068+
return Helper.widenScalar(IS, 0, ExtBigTy);
10771069
}
10781070

10791071
const RISCVRegisterInfo *TRI = STI.getRegisterInfo();

0 commit comments

Comments
 (0)