[Mlir-commits] [mlir] c45a99f - [MatrixBuilder] Require explicit element type in CreateColumnMajorLoad()
Nikita Popov
llvmlistbot at llvm.org
Mon Feb 7 07:57:41 PST 2022
Author: Nikita Popov
Date: 2022-02-07T16:57:33+01:00
New Revision: c45a99f36b6e87440765572bd38cbd515c60173a
URL: https://github.com/llvm/llvm-project/commit/c45a99f36b6e87440765572bd38cbd515c60173a
DIFF: https://github.com/llvm/llvm-project/commit/c45a99f36b6e87440765572bd38cbd515c60173a.diff
LOG: [MatrixBuilder] Require explicit element type in CreateColumnMajorLoad()
This makes the method compatible with opaque pointers.
Added:
Modified:
clang/lib/CodeGen/CGBuiltin.cpp
llvm/include/llvm/IR/MatrixBuilder.h
mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
Removed:
################################################################################
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
index 9ed19af901b0..7ec9994aea41 100644
--- a/clang/lib/CodeGen/CGBuiltin.cpp
+++ b/clang/lib/CodeGen/CGBuiltin.cpp
@@ -3250,8 +3250,9 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
EmitNonNullArgCheck(RValue::get(Src.getPointer()), E->getArg(0)->getType(),
E->getArg(0)->getExprLoc(), FD, 0);
Value *Result = MB.CreateColumnMajorLoad(
- Src.getPointer(), Align(Src.getAlignment().getQuantity()), Stride,
- IsVolatile, ResultTy->getNumRows(), ResultTy->getNumColumns(),
+ Src.getElementType(), Src.getPointer(),
+ Align(Src.getAlignment().getQuantity()), Stride, IsVolatile,
+ ResultTy->getNumRows(), ResultTy->getNumColumns(),
"matrix");
return RValue::get(Result);
}
diff --git a/llvm/include/llvm/IR/MatrixBuilder.h b/llvm/include/llvm/IR/MatrixBuilder.h
index cbecc6eab4f5..c2f5c4eab8fa 100644
--- a/llvm/include/llvm/IR/MatrixBuilder.h
+++ b/llvm/include/llvm/IR/MatrixBuilder.h
@@ -58,18 +58,14 @@ class MatrixBuilder {
MatrixBuilder(IRBuilderBase &Builder) : B(Builder) {}
/// Create a column major, strided matrix load.
+ /// \p EltTy - Matrix element type
/// \p DataPtr - Start address of the matrix read
/// \p Rows - Number of rows in matrix (must be a constant)
/// \p Columns - Number of columns in matrix (must be a constant)
/// \p Stride - Space between columns
- CallInst *CreateColumnMajorLoad(Value *DataPtr, Align Alignment,
+ CallInst *CreateColumnMajorLoad(Type *EltTy, Value *DataPtr, Align Alignment,
Value *Stride, bool IsVolatile, unsigned Rows,
unsigned Columns, const Twine &Name = "") {
-
- // Deal with the pointer
- PointerType *PtrTy = cast<PointerType>(DataPtr->getType());
- Type *EltTy = PtrTy->getPointerElementType();
-
auto *RetType = FixedVectorType::get(EltTy, Rows * Columns);
Value *Ops[] = {DataPtr, Stride, B.getInt1(IsVolatile), B.getInt32(Rows),
diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
index 164493720fe4..78b3af47ae19 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
+++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
@@ -1614,10 +1614,10 @@ def LLVM_MatrixColumnMajorLoadOp : LLVM_Op<"intr.matrix.column.major.load"> {
llvm::MatrixBuilder mb(builder);
const llvm::DataLayout &dl =
builder.GetInsertBlock()->getModule()->getDataLayout();
- llvm::Align align = dl.getABITypeAlign(
- $data->getType()->getPointerElementType());
+ llvm::Type *ElemTy = $data->getType()->getPointerElementType();
+ llvm::Align align = dl.getABITypeAlign(ElemTy);
$res = mb.CreateColumnMajorLoad(
- $data, align, $stride, $isVolatile, $rows,
+ ElemTy, $data, align, $stride, $isVolatile, $rows,
$columns);
}];
let assemblyFormat = "$data `,` `<` `stride` `=` $stride `>` attr-dict"
More information about the Mlir-commits
mailing list