[PATCH] D113092: [fir] Restrict array type on fir.insert_on_range
Valentin Clement via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 3 13:22:01 PDT 2021
clementval updated this revision to Diff 384568.
clementval added a comment.
ddress review comments
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D113092/new/
https://reviews.llvm.org/D113092
Files:
flang/include/flang/Optimizer/Dialect/FIROps.td
flang/lib/Optimizer/Dialect/FIROps.cpp
flang/test/Fir/invalid.fir
Index: flang/test/Fir/invalid.fir
===================================================================
--- flang/test/Fir/invalid.fir
+++ flang/test/Fir/invalid.fir
@@ -464,6 +464,26 @@
// -----
+fir.global internal @_QEmultiarray : !fir.array<?xi32> {
+ %c0_i32 = arith.constant 1 : i32
+ %0 = fir.undefined !fir.array<?xi32>
+ // expected-error at +1 {{'fir.insert_on_range' op must have constant shape and size}}
+ %2 = fir.insert_on_range %0, %c0_i32, [0 : index, 10 : index] : (!fir.array<?xi32>, i32) -> !fir.array<?xi32>
+ fir.has_value %2 : !fir.array<?xi32>
+}
+
+// -----
+
+fir.global internal @_QEmultiarray : !fir.array<*:i32> {
+ %c0_i32 = arith.constant 1 : i32
+ %0 = fir.undefined !fir.array<*:i32>
+ // expected-error at +1 {{'fir.insert_on_range' op must have constant shape and size}}
+ %2 = fir.insert_on_range %0, %c0_i32, [0 : index, 10 : index] : (!fir.array<*:i32>, i32) -> !fir.array<*:i32>
+ fir.has_value %2 : !fir.array<*:i32>
+}
+
+// -----
+
func @bad_save_result(%buffer : !fir.ref<!fir.array<?xf64>>, %n :index) {
%res = fir.call @array_func() : () -> !fir.array<?xf32>
%shape = fir.shape %n : (index) -> !fir.shape<1>
Index: flang/lib/Optimizer/Dialect/FIROps.cpp
===================================================================
--- flang/lib/Optimizer/Dialect/FIROps.cpp
+++ flang/lib/Optimizer/Dialect/FIROps.cpp
@@ -1387,6 +1387,8 @@
/// Range bounds must be nonnegative, and the range must not be empty.
static mlir::LogicalResult verify(fir::InsertOnRangeOp op) {
+ if (fir::hasDynamicSize(op.seq().getType()))
+ return op.emitOpError("must have constant shape and size");
if (op.coor().size() < 2 || op.coor().size() % 2 != 0)
return op.emitOpError("has uneven number of values in ranges");
bool rangeIsKnownToBeNonempty = false;
Index: flang/include/flang/Optimizer/Dialect/FIROps.td
===================================================================
--- flang/include/flang/Optimizer/Dialect/FIROps.td
+++ flang/include/flang/Optimizer/Dialect/FIROps.td
@@ -1978,7 +1978,8 @@
let summary = "insert sub-value into a range on an existing sequence";
let description = [{
- Insert copies of a value into an entity with an array type.
+ Insert copies of a value into an entity with an array type of constant shape
+ and size.
Returns a new ssa value with the same type as the original entity.
The values are inserted at a contiguous range of indices in Fortran
row-to-column element order as specified by lower and upper bound
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D113092.384568.patch
Type: text/x-patch
Size: 2534 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211103/f9f4cd18/attachment.bin>
More information about the llvm-commits
mailing list