@@ -7542,66 +7542,68 @@ llvm::Type *CodeGenFunction::getEltType(SVETypeFlags TypeFlags) {
7542
7542
7543
7543
// Return the llvm predicate vector type corresponding to the specified element
7544
7544
// TypeFlags.
7545
- llvm::VectorType* CodeGenFunction::getSVEPredType(SVETypeFlags TypeFlags) {
7545
+ llvm::ScalableVectorType *
7546
+ CodeGenFunction::getSVEPredType(SVETypeFlags TypeFlags) {
7546
7547
switch (TypeFlags.getEltType()) {
7547
7548
default: llvm_unreachable("Unhandled SVETypeFlag!");
7548
7549
7549
7550
case SVETypeFlags::EltTyInt8:
7550
- return llvm::VectorType ::get(Builder.getInt1Ty(), { 16, true } );
7551
+ return llvm::ScalableVectorType ::get(Builder.getInt1Ty(), 16 );
7551
7552
case SVETypeFlags::EltTyInt16:
7552
- return llvm::VectorType ::get(Builder.getInt1Ty(), { 8, true } );
7553
+ return llvm::ScalableVectorType ::get(Builder.getInt1Ty(), 8 );
7553
7554
case SVETypeFlags::EltTyInt32:
7554
- return llvm::VectorType ::get(Builder.getInt1Ty(), { 4, true } );
7555
+ return llvm::ScalableVectorType ::get(Builder.getInt1Ty(), 4 );
7555
7556
case SVETypeFlags::EltTyInt64:
7556
- return llvm::VectorType ::get(Builder.getInt1Ty(), { 2, true } );
7557
+ return llvm::ScalableVectorType ::get(Builder.getInt1Ty(), 2 );
7557
7558
7558
7559
case SVETypeFlags::EltTyFloat16:
7559
- return llvm::VectorType ::get(Builder.getInt1Ty(), { 8, true } );
7560
+ return llvm::ScalableVectorType ::get(Builder.getInt1Ty(), 8 );
7560
7561
case SVETypeFlags::EltTyFloat32:
7561
- return llvm::VectorType ::get(Builder.getInt1Ty(), { 4, true } );
7562
+ return llvm::ScalableVectorType ::get(Builder.getInt1Ty(), 4 );
7562
7563
case SVETypeFlags::EltTyFloat64:
7563
- return llvm::VectorType ::get(Builder.getInt1Ty(), { 2, true } );
7564
+ return llvm::ScalableVectorType ::get(Builder.getInt1Ty(), 2 );
7564
7565
}
7565
7566
}
7566
7567
7567
7568
// Return the llvm vector type corresponding to the specified element TypeFlags.
7568
- llvm::VectorType *CodeGenFunction::getSVEType(const SVETypeFlags &TypeFlags) {
7569
+ llvm::ScalableVectorType *
7570
+ CodeGenFunction::getSVEType(const SVETypeFlags &TypeFlags) {
7569
7571
switch (TypeFlags.getEltType()) {
7570
7572
default:
7571
7573
llvm_unreachable("Invalid SVETypeFlag!");
7572
7574
7573
7575
case SVETypeFlags::EltTyInt8:
7574
- return llvm::VectorType ::get(Builder.getInt8Ty(), {16, true} );
7576
+ return llvm::ScalableVectorType ::get(Builder.getInt8Ty(), 16 );
7575
7577
case SVETypeFlags::EltTyInt16:
7576
- return llvm::VectorType ::get(Builder.getInt16Ty(), {8, true} );
7578
+ return llvm::ScalableVectorType ::get(Builder.getInt16Ty(), 8 );
7577
7579
case SVETypeFlags::EltTyInt32:
7578
- return llvm::VectorType ::get(Builder.getInt32Ty(), {4, true} );
7580
+ return llvm::ScalableVectorType ::get(Builder.getInt32Ty(), 4 );
7579
7581
case SVETypeFlags::EltTyInt64:
7580
- return llvm::VectorType ::get(Builder.getInt64Ty(), {2, true} );
7582
+ return llvm::ScalableVectorType ::get(Builder.getInt64Ty(), 2 );
7581
7583
7582
7584
case SVETypeFlags::EltTyFloat16:
7583
- return llvm::VectorType ::get(Builder.getHalfTy(), {8, true} );
7585
+ return llvm::ScalableVectorType ::get(Builder.getHalfTy(), 8 );
7584
7586
case SVETypeFlags::EltTyFloat32:
7585
- return llvm::VectorType ::get(Builder.getFloatTy(), {4, true} );
7587
+ return llvm::ScalableVectorType ::get(Builder.getFloatTy(), 4 );
7586
7588
case SVETypeFlags::EltTyFloat64:
7587
- return llvm::VectorType ::get(Builder.getDoubleTy(), {2, true} );
7589
+ return llvm::ScalableVectorType ::get(Builder.getDoubleTy(), 2 );
7588
7590
7589
7591
case SVETypeFlags::EltTyBool8:
7590
- return llvm::VectorType ::get(Builder.getInt1Ty(), {16, true} );
7592
+ return llvm::ScalableVectorType ::get(Builder.getInt1Ty(), 16 );
7591
7593
case SVETypeFlags::EltTyBool16:
7592
- return llvm::VectorType ::get(Builder.getInt1Ty(), {8, true} );
7594
+ return llvm::ScalableVectorType ::get(Builder.getInt1Ty(), 8 );
7593
7595
case SVETypeFlags::EltTyBool32:
7594
- return llvm::VectorType ::get(Builder.getInt1Ty(), {4, true} );
7596
+ return llvm::ScalableVectorType ::get(Builder.getInt1Ty(), 4 );
7595
7597
case SVETypeFlags::EltTyBool64:
7596
- return llvm::VectorType ::get(Builder.getInt1Ty(), {2, true} );
7598
+ return llvm::ScalableVectorType ::get(Builder.getInt1Ty(), 2 );
7597
7599
}
7598
7600
}
7599
7601
7600
7602
constexpr unsigned SVEBitsPerBlock = 128;
7601
7603
7602
- static llvm::VectorType* getSVEVectorForElementType(llvm::Type *EltTy) {
7604
+ static llvm::ScalableVectorType * getSVEVectorForElementType(llvm::Type *EltTy) {
7603
7605
unsigned NumElts = SVEBitsPerBlock / EltTy->getScalarSizeInBits();
7604
- return llvm::VectorType ::get(EltTy, { NumElts, true } );
7606
+ return llvm::ScalableVectorType ::get(EltTy, NumElts);
7605
7607
}
7606
7608
7607
7609
// Reinterpret the input predicate so that it can be used to correctly isolate
@@ -7640,8 +7642,8 @@ Value *CodeGenFunction::EmitSVEGatherLoad(SVETypeFlags TypeFlags,
7640
7642
SmallVectorImpl<Value *> &Ops,
7641
7643
unsigned IntID) {
7642
7644
auto *ResultTy = getSVEType(TypeFlags);
7643
- auto *OverloadedTy = llvm::VectorType::get(SVEBuiltinMemEltTy(TypeFlags),
7644
- ResultTy->getElementCount() );
7645
+ auto *OverloadedTy =
7646
+ llvm::ScalableVectorType::get(SVEBuiltinMemEltTy(TypeFlags), ResultTy );
7645
7647
7646
7648
// At the ACLE level there's only one predicate type, svbool_t, which is
7647
7649
// mapped to <n x 16 x i1>. However, this might be incompatible with the
@@ -7692,8 +7694,8 @@ Value *CodeGenFunction::EmitSVEScatterStore(SVETypeFlags TypeFlags,
7692
7694
SmallVectorImpl<Value *> &Ops,
7693
7695
unsigned IntID) {
7694
7696
auto *SrcDataTy = getSVEType(TypeFlags);
7695
- auto *OverloadedTy = llvm::VectorType::get(SVEBuiltinMemEltTy(TypeFlags),
7696
- SrcDataTy->getElementCount() );
7697
+ auto *OverloadedTy =
7698
+ llvm::ScalableVectorType::get(SVEBuiltinMemEltTy(TypeFlags), SrcDataTy );
7697
7699
7698
7700
// In ACLE the source data is passed in the last argument, whereas in LLVM IR
7699
7701
// it's the first argument. Move it accordingly.
@@ -7748,7 +7750,7 @@ Value *CodeGenFunction::EmitSVEPrefetchLoad(SVETypeFlags TypeFlags,
7748
7750
unsigned BuiltinID) {
7749
7751
auto *MemEltTy = SVEBuiltinMemEltTy(TypeFlags);
7750
7752
auto *VectorTy = getSVEVectorForElementType(MemEltTy);
7751
- auto *MemoryTy = llvm::VectorType ::get(MemEltTy, VectorTy->getElementCount() );
7753
+ auto *MemoryTy = llvm::ScalableVectorType ::get(MemEltTy, VectorTy);
7752
7754
7753
7755
Value *Predicate = EmitSVEPredicateCast(Ops[0], MemoryTy);
7754
7756
Value *BasePtr = Ops[1];
@@ -7778,8 +7780,8 @@ Value *CodeGenFunction::EmitSVEMaskedLoad(const CallExpr *E,
7778
7780
7779
7781
// The vector type that is returned may be different from the
7780
7782
// eventual type loaded from memory.
7781
- auto VectorTy = cast<llvm::VectorType >(ReturnTy);
7782
- auto MemoryTy = llvm::VectorType ::get(MemEltTy, VectorTy->getElementCount() );
7783
+ auto VectorTy = cast<llvm::ScalableVectorType >(ReturnTy);
7784
+ auto MemoryTy = llvm::ScalableVectorType ::get(MemEltTy, VectorTy);
7783
7785
7784
7786
Value *Predicate = EmitSVEPredicateCast(Ops[0], MemoryTy);
7785
7787
Value *BasePtr = Builder.CreateBitCast(Ops[1], MemoryTy->getPointerTo());
@@ -7803,8 +7805,8 @@ Value *CodeGenFunction::EmitSVEMaskedStore(const CallExpr *E,
7803
7805
7804
7806
// The vector type that is stored may be different from the
7805
7807
// eventual type stored to memory.
7806
- auto VectorTy = cast<llvm::VectorType >(Ops.back()->getType());
7807
- auto MemoryTy = llvm::VectorType ::get(MemEltTy, VectorTy->getElementCount() );
7808
+ auto VectorTy = cast<llvm::ScalableVectorType >(Ops.back()->getType());
7809
+ auto MemoryTy = llvm::ScalableVectorType ::get(MemEltTy, VectorTy);
7808
7810
7809
7811
Value *Predicate = EmitSVEPredicateCast(Ops[0], MemoryTy);
7810
7812
Value *BasePtr = Builder.CreateBitCast(Ops[1], MemoryTy->getPointerTo());
0 commit comments