Skip to content

Commit 33ffabb

Browse files
committed
[OpenMP][MLIR] Fix initTargetRuntimeAttrs when host_eval vars is empty
1 parent 1a55c63 commit 33ffabb

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5393,8 +5393,11 @@ initTargetRuntimeAttrs(llvm::IRBuilderBase &builder,
53935393
Value numThreads, numTeamsLower, numTeamsUpper, teamsThreadLimit;
53945394
llvm::SmallVector<Value> lowerBounds(numLoops), upperBounds(numLoops),
53955395
steps(numLoops);
5396-
extractHostEvalClauses(targetOp, numThreads, numTeamsLower, numTeamsUpper,
5397-
teamsThreadLimit, &lowerBounds, &upperBounds, &steps);
5396+
if (!targetOp.getHostEvalVars().empty()) {
5397+
extractHostEvalClauses(targetOp, numThreads, numTeamsLower, numTeamsUpper,
5398+
teamsThreadLimit, &lowerBounds, &upperBounds,
5399+
&steps);
5400+
}
53985401

53995402
// TODO: Handle constant 'if' clauses.
54005403
if (Value targetThreadLimit = targetOp.getThreadLimit())
@@ -5424,6 +5427,8 @@ initTargetRuntimeAttrs(llvm::IRBuilderBase &builder,
54245427
// here, since we're only interested in the trip count.
54255428
for (auto [loopLower, loopUpper, loopStep] :
54265429
llvm::zip_equal(lowerBounds, upperBounds, steps)) {
5430+
if (!loopLower || !loopUpper || !loopStep)
5431+
break;
54275432
llvm::Value *lowerBound = moduleTranslation.lookupValue(loopLower);
54285433
llvm::Value *upperBound = moduleTranslation.lookupValue(loopUpper);
54295434
llvm::Value *step = moduleTranslation.lookupValue(loopStep);
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// RUN: mlir-translate -mlir-to-llvmir %s | FileCheck %s
2+
// Ensure that the -mlir-to-llmvir pass doesn't crash.
3+
4+
// CHECK: define void @_QQmain()
5+
6+
module attributes {llvm.target_triple = "x86_64-unknown-linux-gnu", omp.is_gpu = false, omp.is_target_device = false} {
7+
llvm.func @_QQmain() {
8+
omp.target {
9+
%0 = llvm.mlir.constant(1000 : i32) : i32
10+
%1 = llvm.mlir.constant(1 : i32) : i32
11+
omp.teams {
12+
omp.parallel {
13+
omp.distribute {
14+
omp.wsloop {
15+
omp.loop_nest (%arg0) : i32 = (%1) to (%0) inclusive step (%1) {
16+
omp.yield
17+
}
18+
} {omp.composite}
19+
} {omp.composite}
20+
omp.terminator
21+
} {omp.composite}
22+
omp.terminator
23+
}
24+
omp.terminator
25+
}
26+
llvm.return
27+
}
28+
}

0 commit comments

Comments
 (0)