================
@@ -2471,17 +2471,27 @@ RValue CodeGenFunction::EmitLoadOfLValue(LValue LV,
SourceLocation Loc) {
unsigned NumRows = MT->getNumRows();
unsigned NumCols = MT->getNumColumns();
-
+ unsigned NumLanes = NumCols;
llvm::Value *MatrixVec = EmitLoadOfScalar(LV, Loc);
llvm::Value *Row = LV.getMatrixRowIdx();
llvm::Type *ElemTy = ConvertType(MT->getElementType());
llvm::Type *RowTy = llvm::FixedVectorType::get(ElemTy,
MT->getNumColumns());
llvm::Value *Result = llvm::PoisonValue::get(RowTy); // <NumCols x T>
-
+ llvm::Constant *ColConstsIndices = nullptr;
llvm::MatrixBuilder MB(Builder);
- for (unsigned Col = 0; Col < NumCols; ++Col) {
- llvm::Value *ColIdx = llvm::ConstantInt::get(Row->getType(), Col);
+ if (LV.isMatrixRowSwizzle()) {
+ ColConstsIndices = LV.getMatrixRowElts();
+ NumLanes = llvm::cast<llvm::FixedVectorType>(ColConstsIndices->getType())
+ ->getNumElements();
+ }
----------------
hekota wrote:
```suggestion
auto *VTy =
llvm::cast<llvm::FixedVectorType>(ColConstsIndices->getType());
NumLanes = VTy->getNumElements();
Result = llvm::PoisonValue::get(VTy);
} else {
Result = llvm::PoisonValue::get(RowTy)
}
```
Result type size depends on the swizzle element count.
https://github.com/llvm/llvm-project/pull/173201
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits