Skip to content

Commit e434816

Browse files
authored
Bump LLVM (#1023)
Fixes after bump: - Use LLVM Triple struct - Use default memref.copy instead of linalg.copy during bufferization + deprecate related test - Lower memref.copy to XSMM unary - Minor syntax updates
1 parent 3a72599 commit e434816

File tree

7 files changed

+37
-39
lines changed

7 files changed

+37
-39
lines changed

build_tools/llvm_version.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2b71df5a74cb5bd67f3f34277749dc920fd35105
1+
0a5847f1c1445bfe55c9f9241c4d6d89609a7dc0

lib/TPP/Conversion/ConvertLinalgToXsmm/ConvertLinalgToXsmm.cpp

+23-1
Original file line numberDiff line numberDiff line change
@@ -1175,6 +1175,28 @@ struct ConvertCopyOp : public OpRewritePattern<linalg::CopyOp> {
11751175
}
11761176
};
11771177

1178+
struct ConvertMemRefCopyOp : public OpRewritePattern<memref::CopyOp> {
1179+
using OpRewritePattern<memref::CopyOp>::OpRewritePattern;
1180+
1181+
LogicalResult matchAndRewrite(memref::CopyOp copyOp,
1182+
PatternRewriter &rewriter) const override {
1183+
Value source = copyOp.getSource();
1184+
Value dest = copyOp.getTarget();
1185+
auto unaryInfo =
1186+
xsmm::utils::getUnaryInfo(source, dest, xsmm::UnaryFlags::NONE);
1187+
if (failed(unaryInfo))
1188+
return failure();
1189+
auto flags = rewriter.getArrayAttr(xsmm::UnaryFlagsAttr::get(
1190+
rewriter.getContext(), xsmm::UnaryFlags::NONE));
1191+
xsmm::UnaryKindAttr kind = xsmm::UnaryKindAttr::get(
1192+
rewriter.getContext(), xsmm::UnaryKind::IDENTITY);
1193+
SmallVector<Value> operands{source, dest};
1194+
xsmm::utils::replaceOpWithUnary(rewriter, copyOp, operands, *unaryInfo,
1195+
flags, kind);
1196+
return success();
1197+
}
1198+
};
1199+
11781200
} // namespace
11791201

11801202
void mlir::tpp::populateLinalgToXsmmPatterns(
@@ -1212,7 +1234,7 @@ void mlir::tpp::populateLinalgToXsmmPatterns(
12121234
patterns.add<ConvertTransposeOpToUnaryTranspose>(ctx);
12131235
LLVM_DEBUG(llvm::dbgs() << "[LinalgToXsmm] adding transpose\n");
12141236
} else if (pattern == "copy") {
1215-
patterns.add<ConvertCopyOp>(ctx);
1237+
patterns.add<ConvertCopyOp, ConvertMemRefCopyOp>(ctx);
12161238
LLVM_DEBUG(llvm::dbgs() << "[LinalgToXsmm] adding copy\n");
12171239
} else if (pattern == "unary") {
12181240
patterns.add<ConvertGenericToUnary>(ctx);

lib/TPP/GPU/LinalgToXeGPU.cpp

+7-5
Original file line numberDiff line numberDiff line change
@@ -1102,11 +1102,13 @@ static LogicalResult createDPASKernel(linalg::LinalgOp linalgOp,
11021102
for (int n = 0; n < numTilesN; n++) {
11031103
int cIdx = m * numTilesN + n;
11041104

1105-
Value result = rewriter
1106-
.create<xegpu::DpasOp>(
1107-
loc, dpasResType, dpasVecA.getTile(m, k),
1108-
dpasVecB.getTile(k, n), dpasResults[cIdx])
1109-
.getResult();
1105+
Value result =
1106+
rewriter
1107+
.create<xegpu::DpasOp>(loc, TypeRange{dpasResType},
1108+
ValueRange{dpasVecA.getTile(m, k),
1109+
dpasVecB.getTile(k, n),
1110+
dpasResults[cIdx]})
1111+
.getResult();
11101112

11111113
// Update sub-tile partial result.
11121114
dpasResults[cIdx] = result;

lib/TPP/Transforms/Bufferize.cpp

+3-11
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,6 @@ void DuplicateFill::runOnOperation() {
110110
});
111111
}
112112

113-
static LogicalResult defaultMemCpyFn(OpBuilder &builder, Location loc,
114-
Value from, Value to) {
115-
builder.create<linalg::CopyOp>(loc, from, to);
116-
return success();
117-
}
118-
119113
void Bufferize::runOnOperation() {
120114
ModuleOp moduleOp = getOperation();
121115

@@ -128,17 +122,15 @@ void Bufferize::runOnOperation() {
128122
passManager.addPass(bufferization::createEmptyTensorToAllocTensorPass());
129123

130124
// One-shot.
131-
bufferization::OneShotBufferizationOptions buffOpts;
125+
bufferization::OneShotBufferizePassOptions buffOpts;
132126
buffOpts.bufferizeFunctionBoundaries = true;
133-
buffOpts.setFunctionBoundaryTypeConversion(
134-
bufferization::LayoutMapOption::IdentityLayoutMap);
135-
buffOpts.memCpyFn = defaultMemCpyFn;
127+
buffOpts.functionBoundaryTypeConversion = "identity-layout-map";
136128
bool runOnlyAnalysis = this->testAnalysisOnly || this->printConflicts;
137129
if (runOnlyAnalysis) {
138130
buffOpts.printConflicts = this->printConflicts;
139131
buffOpts.testAnalysisOnly = this->testAnalysisOnly;
140132
}
141-
passManager.addPass(bufferization::createOneShotBufferizePass(buffOpts));
133+
passManager.addPass(createOneShotBufferizePass(buffOpts));
142134

143135
if (!runOnlyAnalysis) {
144136
passManager.addPass(bufferization::createDropEquivalentBufferResultsPass());

test/Passes/bufferization.mlir

-18
This file was deleted.

test/Passes/pass-duplicate-fill.mlir

+2-2
Original file line numberDiff line numberDiff line change
@@ -186,9 +186,9 @@ func.func @matmuls(%arg0: tensor<32x32xf32>, %arg1: tensor<32x32xf32>) -> tensor
186186
// CHECK-LABEL: matmuls_1
187187
func.func @matmuls_1(%arg0: tensor<32x32xf32>, %arg1: tensor<32x32xf32>) -> tensor<32x32xf32> {
188188
// BUFF-COUNT-3: memref.alloc
189-
// BUFF-COUNT-1: linalg.copy
189+
// BUFF-COUNT-1: memref.copy
190190
// BUFFNOTDUP-COUNT-3: memref.alloc
191-
// BUFFNOTDUP-COUNT-1: linalg.copy
191+
// BUFFNOTDUP-COUNT-1: memref.copy
192192
// CHECK-COUNT-2: linalg.fill
193193
%0 = tensor.empty() : tensor<32x32xf32>
194194
%cst = arith.constant 0.0 : f32

tools/tpp-run/tpp-run.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ std::unique_ptr<llvm::Module> lowerToLLVMIR(Operation *module,
218218
targetOptions.UnsafeFPMath = true;
219219
targetOptions.AllowFPOpFusion = llvm::FPOpFusion::FPOpFusionMode::Fast;
220220
targetMachine.reset(target->createTargetMachine(
221-
triple, cpuName, "+" + fpuName, targetOptions,
221+
llvm::Triple(triple), cpuName, "+" + fpuName, targetOptions,
222222
/* reloc model */ std::nullopt,
223223
/* code model */ std::nullopt, codeGenOpt));
224224
if (!targetMachine) {

0 commit comments

Comments
 (0)