[flang-commits] [flang] [mlir] [Flang][OpenMP] Fix compilation error with integer(kind=8) in LINEAR clause. (PR #182474)
Urvi Rav via flang-commits
flang-commits at lists.llvm.org
Fri Feb 20 03:17:29 PST 2026
https://github.com/ravurvi20 updated https://github.com/llvm/llvm-project/pull/182474
>From dacc441738c26f9bbe27feffd893de4c6538e5fd Mon Sep 17 00:00:00 2001
From: urvi-rav <urvi.rav at hpe.com>
Date: Fri, 20 Feb 2026 04:55:17 -0600
Subject: [PATCH] linear clause lowering for 8-byte integer step
---
flang/test/Lower/OpenMP/simd-linear.f90 | 18 ++++++++++++++++++
.../mlir/Dialect/OpenMP/OpenMPClauses.td | 4 ++--
mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp | 6 ++++--
3 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/flang/test/Lower/OpenMP/simd-linear.f90 b/flang/test/Lower/OpenMP/simd-linear.f90
index 2caf1b0ad05fa..820bd4f98af71 100644
--- a/flang/test/Lower/OpenMP/simd-linear.f90
+++ b/flang/test/Lower/OpenMP/simd-linear.f90
@@ -80,3 +80,21 @@ subroutine linear_expr
!CHECK: } {linear_var_types = [i32]}
!IMPLICIT: } {linear_var_types = [i32, i32]}
end subroutine
+
+subroutine simple_linear_i8
+ implicit none
+ integer(kind=8) :: x, y, i
+
+ ! CHECK-LABEL: func.func @_QPsimple_linear_i8
+
+ ! CHECK-DAG: %[[X_ALLOC:.*]] = fir.alloca i64 {bindc_name = "x"
+ ! CHECK: %[[C1_I32:.*]] = arith.constant 1 : i32
+
+ ! CHECK: omp.simd linear(%[[X_DECL:.*]]#0 = %[[C1_I32]] : !fir.ref<i64>) {{.*}}
+
+ !$omp simd linear(x)
+ do i = 1_8, 10_8
+ end do
+
+ ! CHECK: } {linear_var_types = [i64]}
+end subroutine
diff --git a/mlir/include/mlir/Dialect/OpenMP/OpenMPClauses.td b/mlir/include/mlir/Dialect/OpenMP/OpenMPClauses.td
index ba52e52ebf58d..91826738e16d3 100644
--- a/mlir/include/mlir/Dialect/OpenMP/OpenMPClauses.td
+++ b/mlir/include/mlir/Dialect/OpenMP/OpenMPClauses.td
@@ -770,13 +770,13 @@ class OpenMP_LinearClauseSkip<
> : OpenMP_Clause<traits, arguments, assemblyFormat, description,
extraClassDeclaration> {
let arguments = (ins Variadic<AnyType>:$linear_vars,
- Variadic<I32>:$linear_step_vars,
+ Variadic<AnySignlessInteger>:$linear_step_vars,
OptionalAttr<ArrayAttr>:$linear_var_types);
let optAssemblyFormat = [{
`linear` `(`
custom<LinearClause>($linear_vars, type($linear_vars),
- $linear_step_vars) `)`
+ $linear_step_vars, type($linear_step_vars)) `)`
}];
let description = [{
diff --git a/mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp b/mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp
index 601c970bc8a69..85d10208ebc1d 100644
--- a/mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp
+++ b/mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp
@@ -423,7 +423,8 @@ static ParseResult parseLinearClause(
OpAsmParser &parser,
SmallVectorImpl<OpAsmParser::UnresolvedOperand> &linearVars,
SmallVectorImpl<Type> &linearTypes,
- SmallVectorImpl<OpAsmParser::UnresolvedOperand> &linearStepVars) {
+ SmallVectorImpl<OpAsmParser::UnresolvedOperand> &linearStepVars,
+ SmallVectorImpl<Type> &linearStepTypes) {
return parser.parseCommaSeparatedList([&]() {
OpAsmParser::UnresolvedOperand var;
Type type;
@@ -442,7 +443,8 @@ static ParseResult parseLinearClause(
/// Print Linear Clause
static void printLinearClause(OpAsmPrinter &p, Operation *op,
ValueRange linearVars, TypeRange linearTypes,
- ValueRange linearStepVars) {
+ ValueRange linearStepVars,
+ TypeRange linearStepTypes) {
size_t linearVarsSize = linearVars.size();
for (unsigned i = 0; i < linearVarsSize; ++i) {
std::string separator = i == linearVarsSize - 1 ? "" : ", ";
More information about the flang-commits
mailing list