Author: Valentin Clement (バレンタイン クレメン) Date: 2025-04-21T19:37:09-07:00 New Revision: f84b83e552e411409870ed67d264f7bef6aebfb1
URL: https://github.com/llvm/llvm-project/commit/f84b83e552e411409870ed67d264f7bef6aebfb1 DIFF: https://github.com/llvm/llvm-project/commit/f84b83e552e411409870ed67d264f7bef6aebfb1.diff LOG: Revert "[flang][cuda] Update stream type for cuf kernel op (#136627)" This reverts commit 46e734746db7176f6e32b3c98beacf1e94fced37. Added: Modified: flang/include/flang/Optimizer/Dialect/CUF/CUFOps.td flang/lib/Lower/Bridge.cpp flang/lib/Optimizer/Dialect/CUF/CUFOps.cpp flang/test/Lower/CUDA/cuda-kernel-loop-directive.cuf Removed: ################################################################################ diff --git a/flang/include/flang/Optimizer/Dialect/CUF/CUFOps.td b/flang/include/flang/Optimizer/Dialect/CUF/CUFOps.td index 46cc59cda1612..926983d364ed1 100644 --- a/flang/include/flang/Optimizer/Dialect/CUF/CUFOps.td +++ b/flang/include/flang/Optimizer/Dialect/CUF/CUFOps.td @@ -254,19 +254,24 @@ def cuf_KernelOp : cuf_Op<"kernel", [AttrSizedOperandSegments, represented by a 0 constant value. }]; - let arguments = (ins Variadic<I32>:$grid, // empty means `*` - Variadic<I32>:$block, // empty means `*` - Optional<fir_ReferenceType>:$stream, Variadic<Index>:$lowerbound, - Variadic<Index>:$upperbound, Variadic<Index>:$step, - OptionalAttr<I64Attr>:$n, Variadic<AnyType>:$reduceOperands, - OptionalAttr<ArrayAttr>:$reduceAttrs); + let arguments = (ins + Variadic<I32>:$grid, // empty means `*` + Variadic<I32>:$block, // empty means `*` + Optional<I32>:$stream, + Variadic<Index>:$lowerbound, + Variadic<Index>:$upperbound, + Variadic<Index>:$step, + OptionalAttr<I64Attr>:$n, + Variadic<AnyType>:$reduceOperands, + OptionalAttr<ArrayAttr>:$reduceAttrs + ); let regions = (region AnyRegion:$region); let assemblyFormat = [{ `<` `<` `<` custom<CUFKernelValues>($grid, type($grid)) `,` custom<CUFKernelValues>($block, type($block)) - ( `,` `stream` `=` $stream^ `:` qualified(type($stream)))? `>` `>` `>` + ( `,` `stream` `=` $stream^ )? `>` `>` `>` ( `reduce` `(` $reduceOperands^ `:` type($reduceOperands) `:` $reduceAttrs `)` )? custom<CUFKernelLoopControl>($region, $lowerbound, type($lowerbound), $upperbound, type($upperbound), $step, type($step)) diff --git a/flang/lib/Lower/Bridge.cpp b/flang/lib/Lower/Bridge.cpp index 7b76845b5af05..1652a86ed7e63 100644 --- a/flang/lib/Lower/Bridge.cpp +++ b/flang/lib/Lower/Bridge.cpp @@ -3097,7 +3097,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { llvm::SmallVector<mlir::Value> gridValues; llvm::SmallVector<mlir::Value> blockValues; - mlir::Value streamAddr; + mlir::Value streamValue; if (launchConfig) { const std::list<Fortran::parser::CUFKernelDoConstruct::StarOrExpr> &grid = @@ -3130,8 +3130,10 @@ class FirConverter : public Fortran::lower::AbstractConverter { } if (stream) - streamAddr = fir::getBase( - genExprAddr(*Fortran::semantics::GetExpr(*stream), stmtCtx)); + streamValue = builder->createConvert( + loc, builder->getI32Type(), + fir::getBase( + genExprValue(*Fortran::semantics::GetExpr(*stream), stmtCtx))); } const auto &outerDoConstruct = @@ -3265,7 +3267,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { } auto op = builder->create<cuf::KernelOp>( - loc, gridValues, blockValues, streamAddr, lbs, ubs, steps, n, + loc, gridValues, blockValues, streamValue, lbs, ubs, steps, n, mlir::ValueRange(reduceOperands), builder->getArrayAttr(reduceAttrs)); builder->createBlock(&op.getRegion(), op.getRegion().end(), ivTypes, ivLocs); diff --git a/flang/lib/Optimizer/Dialect/CUF/CUFOps.cpp b/flang/lib/Optimizer/Dialect/CUF/CUFOps.cpp index 24033bc15b8eb..a86f12c2c4a55 100644 --- a/flang/lib/Optimizer/Dialect/CUF/CUFOps.cpp +++ b/flang/lib/Optimizer/Dialect/CUF/CUFOps.cpp @@ -271,7 +271,7 @@ llvm::LogicalResult cuf::KernelOp::verify() { return emitOpError("expect reduce attributes to be ReduceAttr"); } } - return checkStreamType(*this); + return mlir::success(); } //===----------------------------------------------------------------------===// diff --git a/flang/test/Lower/CUDA/cuda-kernel-loop-directive.cuf b/flang/test/Lower/CUDA/cuda-kernel-loop-directive.cuf index 10f0b9e3d1215..0fceb292f10d2 100644 --- a/flang/test/Lower/CUDA/cuda-kernel-loop-directive.cuf +++ b/flang/test/Lower/CUDA/cuda-kernel-loop-directive.cuf @@ -75,7 +75,9 @@ subroutine sub1() end do end -! CHECK: cuf.kernel<<<*, *, stream = %[[STREAM]]#0 : !fir.ref<i64>>>> +! CHECK: %[[STREAM_LOAD:.*]] = fir.load %[[STREAM]]#0 : !fir.ref<i64> +! CHECK: %[[STREAM_I32:.*]] = fir.convert %[[STREAM_LOAD]] : (i64) -> i32 +! CHECK: cuf.kernel<<<*, *, stream = %[[STREAM_I32]]>>> ! Test lowering with unstructured construct inside. _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits