Skip to content

Commit 02408d6

Browse files
authored
[VP] Refactoring some functions in ExpandVectorPredication.NFC (#115840)
Building vp intrinsic functions using a unified interface for expandPredicationToIntCall/expandPredicationToFPCall/expandPredicationToCastIntrinsic functions.
1 parent e70f9e2 commit 02408d6

File tree

1 file changed

+26
-90
lines changed

1 file changed

+26
-90
lines changed

llvm/lib/CodeGen/ExpandVectorPredication.cpp

Lines changed: 26 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -175,8 +175,7 @@ struct CachingVPExpander {
175175
VPIntrinsic &PI);
176176

177177
/// Lower this VP int call to a unpredicated int call.
178-
Value *expandPredicationToIntCall(IRBuilder<> &Builder, VPIntrinsic &PI,
179-
unsigned UnpredicatedIntrinsicID);
178+
Value *expandPredicationToIntCall(IRBuilder<> &Builder, VPIntrinsic &PI);
180179

181180
/// Lower this VP fp call to a unpredicated fp call.
182181
Value *expandPredicationToFPCall(IRBuilder<> &Builder, VPIntrinsic &PI,
@@ -287,33 +286,19 @@ CachingVPExpander::expandPredicationInBinaryOperator(IRBuilder<> &Builder,
287286
return NewBinOp;
288287
}
289288

290-
Value *CachingVPExpander::expandPredicationToIntCall(
291-
IRBuilder<> &Builder, VPIntrinsic &VPI, unsigned UnpredicatedIntrinsicID) {
292-
switch (UnpredicatedIntrinsicID) {
293-
case Intrinsic::abs:
294-
case Intrinsic::smax:
295-
case Intrinsic::smin:
296-
case Intrinsic::umax:
297-
case Intrinsic::umin: {
298-
Value *Op0 = VPI.getOperand(0);
299-
Value *Op1 = VPI.getOperand(1);
300-
Value *NewOp = Builder.CreateIntrinsic(
301-
UnpredicatedIntrinsicID, {VPI.getType()}, {Op0, Op1},
302-
/*FMFSource=*/nullptr, VPI.getName());
303-
replaceOperation(*NewOp, VPI);
304-
return NewOp;
305-
}
306-
case Intrinsic::bswap:
307-
case Intrinsic::bitreverse: {
308-
Value *Op = VPI.getOperand(0);
309-
Value *NewOp =
310-
Builder.CreateIntrinsic(UnpredicatedIntrinsicID, {VPI.getType()}, {Op},
311-
/*FMFSource=*/nullptr, VPI.getName());
312-
replaceOperation(*NewOp, VPI);
313-
return NewOp;
314-
}
289+
Value *CachingVPExpander::expandPredicationToIntCall(IRBuilder<> &Builder,
290+
VPIntrinsic &VPI) {
291+
std::optional<unsigned> FID = VPI.getFunctionalIntrinsicID();
292+
if (!FID)
293+
return nullptr;
294+
SmallVector<Value *, 2> Argument;
295+
for (unsigned i = 0; i < VPI.getNumOperands() - 3; i++) {
296+
Argument.push_back(VPI.getOperand(i));
315297
}
316-
return nullptr;
298+
Value *NewOp = Builder.CreateIntrinsic(FID.value(), {VPI.getType()}, Argument,
299+
/*FMFSource=*/nullptr, VPI.getName());
300+
replaceOperation(*NewOp, VPI);
301+
return NewOp;
317302
}
318303

319304
Value *CachingVPExpander::expandPredicationToFPCall(
@@ -323,20 +308,15 @@ Value *CachingVPExpander::expandPredicationToFPCall(
323308

324309
switch (UnpredicatedIntrinsicID) {
325310
case Intrinsic::fabs:
326-
case Intrinsic::sqrt: {
327-
Value *Op0 = VPI.getOperand(0);
328-
Value *NewOp =
329-
Builder.CreateIntrinsic(UnpredicatedIntrinsicID, {VPI.getType()}, {Op0},
330-
/*FMFSource=*/nullptr, VPI.getName());
331-
replaceOperation(*NewOp, VPI);
332-
return NewOp;
333-
}
311+
case Intrinsic::sqrt:
334312
case Intrinsic::maxnum:
335313
case Intrinsic::minnum: {
336-
Value *Op0 = VPI.getOperand(0);
337-
Value *Op1 = VPI.getOperand(1);
314+
SmallVector<Value *, 2> Argument;
315+
for (unsigned i = 0; i < VPI.getNumOperands() - 3; i++) {
316+
Argument.push_back(VPI.getOperand(i));
317+
}
338318
Value *NewOp = Builder.CreateIntrinsic(
339-
UnpredicatedIntrinsicID, {VPI.getType()}, {Op0, Op1},
319+
UnpredicatedIntrinsicID, {VPI.getType()}, Argument,
340320
/*FMFSource=*/nullptr, VPI.getName());
341321
replaceOperation(*NewOp, VPI);
342322
return NewOp;
@@ -438,56 +418,13 @@ CachingVPExpander::expandPredicationInReduction(IRBuilder<> &Builder,
438418

439419
Value *CachingVPExpander::expandPredicationToCastIntrinsic(IRBuilder<> &Builder,
440420
VPIntrinsic &VPI) {
441-
Value *CastOp = nullptr;
442-
switch (VPI.getIntrinsicID()) {
443-
default:
444-
llvm_unreachable("Not a VP cast intrinsic");
445-
case Intrinsic::vp_sext:
446-
CastOp =
447-
Builder.CreateSExt(VPI.getOperand(0), VPI.getType(), VPI.getName());
448-
break;
449-
case Intrinsic::vp_zext:
450-
CastOp =
451-
Builder.CreateZExt(VPI.getOperand(0), VPI.getType(), VPI.getName());
452-
break;
453-
case Intrinsic::vp_trunc:
454-
CastOp =
455-
Builder.CreateTrunc(VPI.getOperand(0), VPI.getType(), VPI.getName());
456-
break;
457-
case Intrinsic::vp_inttoptr:
458-
CastOp =
459-
Builder.CreateIntToPtr(VPI.getOperand(0), VPI.getType(), VPI.getName());
460-
break;
461-
case Intrinsic::vp_ptrtoint:
462-
CastOp =
463-
Builder.CreatePtrToInt(VPI.getOperand(0), VPI.getType(), VPI.getName());
464-
break;
465-
case Intrinsic::vp_fptosi:
466-
CastOp =
467-
Builder.CreateFPToSI(VPI.getOperand(0), VPI.getType(), VPI.getName());
468-
break;
421+
Intrinsic::ID VPID = VPI.getIntrinsicID();
422+
unsigned CastOpcode = VPIntrinsic::getFunctionalOpcodeForVP(VPID).value();
423+
assert(Instruction::isCast(CastOpcode));
424+
Value *CastOp =
425+
Builder.CreateCast(Instruction::CastOps(CastOpcode), VPI.getOperand(0),
426+
VPI.getType(), VPI.getName());
469427

470-
case Intrinsic::vp_fptoui:
471-
CastOp =
472-
Builder.CreateFPToUI(VPI.getOperand(0), VPI.getType(), VPI.getName());
473-
break;
474-
case Intrinsic::vp_sitofp:
475-
CastOp =
476-
Builder.CreateSIToFP(VPI.getOperand(0), VPI.getType(), VPI.getName());
477-
break;
478-
case Intrinsic::vp_uitofp:
479-
CastOp =
480-
Builder.CreateUIToFP(VPI.getOperand(0), VPI.getType(), VPI.getName());
481-
break;
482-
case Intrinsic::vp_fptrunc:
483-
CastOp =
484-
Builder.CreateFPTrunc(VPI.getOperand(0), VPI.getType(), VPI.getName());
485-
break;
486-
case Intrinsic::vp_fpext:
487-
CastOp =
488-
Builder.CreateFPExt(VPI.getOperand(0), VPI.getType(), VPI.getName());
489-
break;
490-
}
491428
replaceOperation(*CastOp, VPI);
492429
return CastOp;
493430
}
@@ -672,8 +609,7 @@ Value *CachingVPExpander::expandPredication(VPIntrinsic &VPI) {
672609
case Intrinsic::vp_umin:
673610
case Intrinsic::vp_bswap:
674611
case Intrinsic::vp_bitreverse:
675-
return expandPredicationToIntCall(Builder, VPI,
676-
VPI.getFunctionalIntrinsicID().value());
612+
return expandPredicationToIntCall(Builder, VPI);
677613
case Intrinsic::vp_fabs:
678614
case Intrinsic::vp_sqrt:
679615
case Intrinsic::vp_maxnum:

0 commit comments

Comments
 (0)