diff options
Diffstat (limited to 'mlir/test')
14 files changed, 99 insertions, 32 deletions
| diff --git a/mlir/test/Conversion/SCFToGPU/parallel_loop.mlir b/mlir/test/Conversion/SCFToGPU/parallel_loop.mlir index 1dbce05..26f5a3e 100644 --- a/mlir/test/Conversion/SCFToGPU/parallel_loop.mlir +++ b/mlir/test/Conversion/SCFToGPU/parallel_loop.mlir @@ -641,3 +641,35 @@ func.func @parallel_reduction_1d_outside() {  // CHECK: scf.parallel  // CHECK-NEXT: scf.parallel  // CHECK: scf.reduce + +// ----- + +// CHECK-LABEL: @nested_parallel_with_side_effect +func.func @nested_parallel_with_side_effect() { +  %c65536 = arith.constant 65536 : index +  %c2 = arith.constant 2 : index +  %c256 = arith.constant 256 : index +  %c0 = arith.constant 0 : index +  %c4 = arith.constant 4 : index +  %c1 = arith.constant 1 : index +  %alloc_0 = memref.alloc() : memref<2x256x256xf32> +  %alloc_1 = memref.alloc() : memref<2x4x256x256xf32> +  %alloc_2 = memref.alloc() : memref<4x4xf32> +  %alloc_3 = memref.alloc() : memref<4x4xf32> +  scf.parallel (%arg2, %arg3, %arg4) = (%c0, %c0, %c0) to (%c2, %c4, %c65536) step (%c1, %c1, %c1) { +    %1 = arith.remsi %arg4, %c256 : index +    %2 = arith.divsi %arg4, %c256 : index +    %4 = memref.load %alloc_0[%arg2, %2, %1] : memref<2x256x256xf32> +    memref.store %4, %alloc_1[%arg2, %arg3, %2, %1] : memref<2x4x256x256xf32> +    scf.parallel (%arg5) = (%c0) to (%c4) step (%c1) { +      %5 = memref.load %alloc_2[%arg5, %c0] : memref<4x4xf32> +      memref.store %5, %alloc_3[%arg5, %c0] : memref<4x4xf32> +      scf.reduce +    } {mapping = [#gpu.loop_dim_map<processor = thread_x, map = (d0) -> (d0), bound = (d0) -> (d0)>]} +    scf.reduce +  } {mapping = [#gpu.loop_dim_map<processor = block_z, map = (d0) -> (d0), bound = (d0) -> (d0)>, #gpu.loop_dim_map<processor = block_y, map = (d0) -> (d0), bound = (d0) -> (d0)>, #gpu.loop_dim_map<processor = block_x, map = (d0) -> (d0), bound = (d0) -> (d0)>]} +  return +} + +// CHECK: gpu.launch +// CHECK-NOT: scf.parallel diff --git a/mlir/test/Dialect/Linalg/canonicalize.mlir b/mlir/test/Dialect/Linalg/canonicalize.mlir index 26d2d98..f4020ede 100644 --- a/mlir/test/Dialect/Linalg/canonicalize.mlir +++ b/mlir/test/Dialect/Linalg/canonicalize.mlir @@ -1423,7 +1423,7 @@ func.func @transpose_buffer(%input: memref<?xf32>,  func.func @recursive_effect(%arg : tensor<1xf32>) {    %init = arith.constant dense<0.0> : tensor<1xf32>    %mapped = linalg.map ins(%arg:tensor<1xf32>) outs(%init :tensor<1xf32>) -            (%in : f32) { +            (%in : f32, %out: f32) {                vector.print %in : f32                linalg.yield %in : f32              } diff --git a/mlir/test/Dialect/Linalg/generalize-named-ops.mlir b/mlir/test/Dialect/Linalg/generalize-named-ops.mlir index ae07b1b..dcdd6c8 100644 --- a/mlir/test/Dialect/Linalg/generalize-named-ops.mlir +++ b/mlir/test/Dialect/Linalg/generalize-named-ops.mlir @@ -386,18 +386,24 @@ func.func @generalize_batch_reduce_gemm_bf16(%lhs: memref<7x8x9xbf16>, %rhs: mem  // ----- -// CHECK-LABEL: generalize_linalg_map -func.func @generalize_linalg_map(%arg0: memref<1x8x8x8xf32>) { +func.func @generalize_linalg_map(%arg0: memref<1x8x8x8xf32>, %arg1: memref<1x8x8x8xf32>, %arg2: memref<1x8x8x8xf32>) {    %cst = arith.constant 0.000000e+00 : f32 -  // CHECK: linalg.map -  // CHECK-NOT: linalg.generic -  linalg.map outs(%arg0 : memref<1x8x8x8xf32>) -    () { -      linalg.yield %cst : f32 -    } +  linalg.map {arith.addf} ins(%arg0, %arg1: memref<1x8x8x8xf32>, memref<1x8x8x8xf32>) outs(%arg2 : memref<1x8x8x8xf32>)    return  } +// CHECK-DAG: #[[MAP0:.+]] = affine_map<(d0, d1, d2, d3) -> (d0, d1, d2, d3)> + +// CHECK: @generalize_linalg_map + +// CHECK: linalg.generic +// CHECK-SAME: indexing_maps = [#[[MAP0]], #[[MAP0]], #[[MAP0]]] +// CHECK-SAME: iterator_types = ["parallel", "parallel", "parallel", "parallel"]} +// CHECK-SAME: ins(%{{.+}}, %{{.+}} : memref<1x8x8x8xf32>, memref<1x8x8x8xf32>) outs(%{{.+}} : memref<1x8x8x8xf32> +// CHECK:         ^{{.+}}(%[[BBARG0:.+]]: f32, %[[BBARG1:.+]]: f32, %[[BBARG2:.+]]: f32) +// CHECK:         %[[ADD:.+]] = arith.addf %[[BBARG0]], %[[BBARG1]] : f32 +// CHECK:         linalg.yield %[[ADD]] : f32 +  // -----  func.func @generalize_add(%lhs: memref<7x14x21xf32>, %rhs: memref<7x14x21xf32>, diff --git a/mlir/test/Dialect/Linalg/invalid.mlir b/mlir/test/Dialect/Linalg/invalid.mlir index 40bf4d1..fabc8e6 100644 --- a/mlir/test/Dialect/Linalg/invalid.mlir +++ b/mlir/test/Dialect/Linalg/invalid.mlir @@ -681,7 +681,7 @@ func.func @map_binary_wrong_yield_operands(     %add = linalg.map            ins(%lhs, %rhs : tensor<64xf32>, tensor<64xf32>)            outs(%init:tensor<64xf32>) -          (%lhs_elem: f32, %rhs_elem: f32) { +          (%lhs_elem: f32, %rhs_elem: f32, %out: f32) {              %0 = arith.addf %lhs_elem, %rhs_elem: f32              // expected-error @+1{{'linalg.yield' op expected number of yield values (2) to match the number of inits / outs operands of the enclosing LinalgOp (1)}}              linalg.yield %0, %0: f32, f32 @@ -694,11 +694,11 @@ func.func @map_binary_wrong_yield_operands(  func.func @map_input_mapper_arity_mismatch(      %lhs: tensor<64xf32>, %rhs: tensor<64xf32>, %init: tensor<64xf32>)      -> tensor<64xf32> { -  // expected-error@+1{{'linalg.map' op expects number of operands to match the arity of mapper, but got: 2 and 3}} +  // expected-error@+1{{'linalg.map' op expects number of operands to match the arity of mapper, but got: 3 and 4}}    %add = linalg.map        ins(%lhs, %rhs : tensor<64xf32>, tensor<64xf32>)        outs(%init:tensor<64xf32>) -      (%lhs_elem: f32, %rhs_elem: f32, %extra_elem: f32) { +      (%lhs_elem: f32, %rhs_elem: f32, %out: f32, %extra_elem: f32) {          %0 = arith.addf %lhs_elem, %rhs_elem: f32          linalg.yield %0: f32        } @@ -714,7 +714,7 @@ func.func @map_input_mapper_type_mismatch(    %add = linalg.map        ins(%lhs, %rhs : tensor<64xf32>, tensor<64xf32>)        outs(%init:tensor<64xf32>) -      (%lhs_elem: f64, %rhs_elem: f64) { +      (%lhs_elem: f64, %rhs_elem: f64, %out: f32) {          %0 = arith.addf %lhs_elem, %rhs_elem: f64          linalg.yield %0: f64        } @@ -730,7 +730,7 @@ func.func @map_input_output_shape_mismatch(    %add = linalg.map        ins(%lhs, %rhs : tensor<64x64xf32>, tensor<64x64xf32>)        outs(%init:tensor<32xf32>) -      (%lhs_elem: f32, %rhs_elem: f32) { +      (%lhs_elem: f32, %rhs_elem: f32, %out: f32) {          %0 = arith.addf %lhs_elem, %rhs_elem: f32          linalg.yield %0: f32        } diff --git a/mlir/test/Dialect/Linalg/one-shot-bufferize.mlir b/mlir/test/Dialect/Linalg/one-shot-bufferize.mlir index 1df15e8..85cc1ff 100644 --- a/mlir/test/Dialect/Linalg/one-shot-bufferize.mlir +++ b/mlir/test/Dialect/Linalg/one-shot-bufferize.mlir @@ -339,7 +339,7 @@ func.func @map_binary(%lhs: tensor<64xf32>, %rhs: tensor<64xf32>,     %add = linalg.map            ins(%lhs, %rhs: tensor<64xf32>, tensor<64xf32>)            outs(%init:tensor<64xf32>) -          (%lhs_elem: f32, %rhs_elem: f32) { +          (%lhs_elem: f32, %rhs_elem: f32, %out: f32) {              %0 = arith.addf %lhs_elem, %rhs_elem: f32              linalg.yield %0: f32            } diff --git a/mlir/test/Dialect/Linalg/roundtrip.mlir b/mlir/test/Dialect/Linalg/roundtrip.mlir index 563013d..7492892 100644 --- a/mlir/test/Dialect/Linalg/roundtrip.mlir +++ b/mlir/test/Dialect/Linalg/roundtrip.mlir @@ -341,7 +341,7 @@ func.func @mixed_parallel_reduced_results(%arg0 : tensor<?x?x?xf32>,  func.func @map_no_inputs(%init: tensor<64xf32>) -> tensor<64xf32> {     %add = linalg.map        outs(%init:tensor<64xf32>) -      () { +      (%out: f32) {          %0 = arith.constant 0.0: f32          linalg.yield %0: f32        } @@ -349,7 +349,7 @@ func.func @map_no_inputs(%init: tensor<64xf32>) -> tensor<64xf32> {  }  // CHECK-LABEL: func @map_no_inputs  //       CHECK:   linalg.map outs -//  CHECK-NEXT:   () { +//  CHECK-NEXT:   (%[[OUT:.*]]: f32) {  //  CHECK-NEXT:     arith.constant  //  CHECK-NEXT:     linalg.yield  //  CHECK-NEXT:   } @@ -361,7 +361,7 @@ func.func @map_binary(%lhs: tensor<64xf32>, %rhs: tensor<64xf32>,     %add = linalg.map            ins(%lhs, %rhs: tensor<64xf32>, tensor<64xf32>)            outs(%init:tensor<64xf32>) -          (%lhs_elem: f32, %rhs_elem: f32) { +          (%lhs_elem: f32, %rhs_elem: f32, %out: f32) {              %0 = arith.addf %lhs_elem, %rhs_elem: f32              linalg.yield %0: f32            } @@ -378,7 +378,7 @@ func.func @map_binary_memref(%lhs: memref<64xf32>, %rhs: memref<64xf32>,     linalg.map        ins(%lhs, %rhs: memref<64xf32>, memref<64xf32>)        outs(%init:memref<64xf32>) -      (%lhs_elem: f32, %rhs_elem: f32) { +      (%lhs_elem: f32, %rhs_elem: f32, %out: f32) {          %0 = arith.addf %lhs_elem, %rhs_elem: f32          linalg.yield %0: f32        } @@ -393,7 +393,7 @@ func.func @map_unary(%input: tensor<64xf32>, %init: tensor<64xf32>) -> tensor<64     %abs = linalg.map            ins(%input:tensor<64xf32>)            outs(%init:tensor<64xf32>) -          (%input_elem: f32) { +          (%input_elem: f32, %out: f32) {              %0 = math.absf %input_elem: f32              linalg.yield %0: f32            } @@ -408,7 +408,7 @@ func.func @map_unary_memref(%input: memref<64xf32>, %init: memref<64xf32>) {     linalg.map        ins(%input:memref<64xf32>)        outs(%init:memref<64xf32>) -      (%input_elem: f32) { +      (%input_elem: f32, %out: f32) {          %0 = math.absf %input_elem: f32          linalg.yield %0: f32        } @@ -604,7 +604,7 @@ func.func @map_arith_with_attr(%lhs: tensor<64xf32>, %rhs: tensor<64xf32>,    %add = linalg.map            ins(%lhs, %rhs: tensor<64xf32>, tensor<64xf32>)            outs(%init:tensor<64xf32>) -          (%lhs_elem: f32, %rhs_elem: f32) { +          (%lhs_elem: f32, %rhs_elem: f32, %out: f32) {              %0 = arith.addf %lhs_elem, %rhs_elem fastmath<fast> : f32              linalg.yield %0: f32            } @@ -622,7 +622,7 @@ func.func @map_arith_with_attr(%lhs: tensor<64xf32>, %rhs: tensor<64xf32>,  func.func @map_not_short_form_compatible(%lhs: tensor<1x32xf32>, %rhs: tensor<1x32xf32>, %init: tensor<1x32xf32>) -> tensor<1x32xf32> {    %mapped = linalg.map ins(%lhs, %rhs : tensor<1x32xf32>, tensor<1x32xf32>) outs(%init : tensor<1x32xf32>) -    (%in_1: f32, %in_2: f32) { +    (%in_1: f32, %in_2: f32, %out: f32) {        %1 = arith.maximumf %in_1, %in_2 : f32        linalg.yield %in_1 : f32      } @@ -634,7 +634,7 @@ func.func @map_not_short_form_compatible(%lhs: tensor<1x32xf32>, %rhs: tensor<1x  // CHECK-NOT:     linalg.map { arith.maximumf } ins(%[[LHS]] : tensor<1x32xf32>  // CHECK:         linalg.map ins(%[[LHS]], %[[RHS]] : tensor<1x32xf32>, tensor<1x32xf32>)   // CHECK-SAME:               outs(%[[INIT]] : tensor<1x32xf32>) -// CHECK-NEXT:      (%[[IN1:.*]]: f32, %[[IN2:.*]]: f32) { +// CHECK-NEXT:      (%[[IN1:.*]]: f32, %[[IN2:.*]]: f32, %[[OUT:.*]]: f32) {  // CHECK-NEXT:        %[[MAX_RESULT:.*]] = arith.maximumf %[[IN1]], %[[IN2]] : f32  // CHECK-NEXT:        linalg.yield %[[IN1]] : f32  // CHECK-NEXT:    } diff --git a/mlir/test/Dialect/Linalg/vectorization/linalg-ops-with-patterns.mlir b/mlir/test/Dialect/Linalg/vectorization/linalg-ops-with-patterns.mlir index 93a0336..aa2c1da 100644 --- a/mlir/test/Dialect/Linalg/vectorization/linalg-ops-with-patterns.mlir +++ b/mlir/test/Dialect/Linalg/vectorization/linalg-ops-with-patterns.mlir @@ -356,7 +356,7 @@ func.func @vectorize_map(%arg0: memref<64xf32>,      %arg1: memref<64xf32>, %arg2: memref<64xf32>) {    linalg.map ins(%arg0, %arg1 : memref<64xf32>, memref<64xf32>)               outs(%arg2 : memref<64xf32>) -    (%in: f32, %in_0: f32) { +    (%in: f32, %in_0: f32, %out: f32) {        %0 = arith.addf %in, %in_0 : f32        linalg.yield %0 : f32      } diff --git a/mlir/test/Dialect/Tensor/bufferize.mlir b/mlir/test/Dialect/Tensor/bufferize.mlir index 296ca02..5eb2360 100644 --- a/mlir/test/Dialect/Tensor/bufferize.mlir +++ b/mlir/test/Dialect/Tensor/bufferize.mlir @@ -728,7 +728,7 @@ func.func @tensor.concat_dynamic_nonconcat_dim(%f: tensor<?x?xf32>, %g: tensor<?  // CHECK-DAG:     %[[ALLOC:.*]] = memref.alloc(%[[M]], %[[N]]) {{.*}} : memref<?x3x?xf32>  // CHECK:         %[[ALLOC_T:.*]] = bufferization.to_tensor %[[ALLOC]]  // CHECK:         %[[MAPPED:.*]] = linalg.map outs(%[[ALLOC_T]] : tensor<?x3x?xf32>) -// CHECK:         () { +// CHECK:         (%[[INIT:.*]]: f32) {  // CHECK:           linalg.yield %[[F]] : f32  // CHECK:         }  // CHECK:         return %[[MAPPED]] : tensor<?x3x?xf32> diff --git a/mlir/test/Interfaces/TilingInterface/lower-to-loops-using-interface.mlir b/mlir/test/Interfaces/TilingInterface/lower-to-loops-using-interface.mlir index 8cbee3c..aa8882d 100644 --- a/mlir/test/Interfaces/TilingInterface/lower-to-loops-using-interface.mlir +++ b/mlir/test/Interfaces/TilingInterface/lower-to-loops-using-interface.mlir @@ -257,10 +257,10 @@ module attributes {transform.with_named_sequence} {  // -----  func.func @map(%lhs: memref<64xf32>, -    %rhs: memref<64xf32>, %out: memref<64xf32>) { +    %rhs: memref<64xf32>, %init: memref<64xf32>) {    linalg.map ins(%lhs, %rhs : memref<64xf32>, memref<64xf32>) -             outs(%out : memref<64xf32>) -    (%in: f32, %in_0: f32) { +             outs(%init : memref<64xf32>) +    (%in: f32, %in_0: f32, %out: f32) {        %0 = arith.addf %in, %in_0 : f32        linalg.yield %0 : f32      } diff --git a/mlir/test/Target/LLVMIR/omptarget-record-type-with-ptr-member-host.mlir b/mlir/test/Target/LLVMIR/omptarget-record-type-with-ptr-member-host.mlir index a1e415c..9640f03 100644 --- a/mlir/test/Target/LLVMIR/omptarget-record-type-with-ptr-member-host.mlir +++ b/mlir/test/Target/LLVMIR/omptarget-record-type-with-ptr-member-host.mlir @@ -81,9 +81,8 @@ module attributes {omp.is_target_device = false, omp.target_triples = ["amdgcn-a  // CHECK: %[[ARR_SECT_SIZE:.*]] = mul i64 %[[ARR_SECT_SIZE1]], 4  // CHECK: %[[LFULL_ARR:.*]] = load ptr, ptr @full_arr, align 8  // CHECK: %[[FULL_ARR_PTR:.*]] = getelementptr inbounds float, ptr %[[LFULL_ARR]], i64 0 -// CHECK: %[[ARR_SECT_OFFSET1:.*]] = mul i64 %[[ARR_SECT_OFFSET2]], 1  // CHECK: %[[LARR_SECT:.*]] = load ptr, ptr @sect_arr, align 8 -// CHECK: %[[ARR_SECT_PTR:.*]] = getelementptr inbounds i32, ptr %[[LARR_SECT]], i64 %[[ARR_SECT_OFFSET1]] +// CHECK: %[[ARR_SECT_PTR:.*]] = getelementptr inbounds i32, ptr %[[LARR_SECT]], i64 %[[ARR_SECT_OFFSET2]]  // CHECK: %[[SCALAR_PTR_LOAD:.*]] = load ptr, ptr %[[SCALAR_BASE]], align 8  // CHECK: %[[FULL_ARR_DESC_SIZE:.*]] = sdiv exact i64 48, ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)  // CHECK: %[[FULL_ARR_SIZE_CMP:.*]] = icmp eq ptr %[[FULL_ARR_PTR]], null diff --git a/mlir/test/Transforms/test-legalize-type-conversion.mlir b/mlir/test/Transforms/test-legalize-type-conversion.mlir index c003f8b..91f83a0 100644 --- a/mlir/test/Transforms/test-legalize-type-conversion.mlir +++ b/mlir/test/Transforms/test-legalize-type-conversion.mlir @@ -143,3 +143,25 @@ func.func @test_signature_conversion_no_converter() {    return  } +// ----- + +// CHECK-LABEL: func @test_unstructured_cf_conversion( +//  CHECK-SAME:     %[[arg0:.*]]: f64, %[[c:.*]]: i1) +//       CHECK:   %[[cast1:.*]] = "test.cast"(%[[arg0]]) : (f64) -> f32 +//       CHECK:   "test.foo"(%[[cast1]]) +//       CHECK:   cf.br ^[[bb1:.*]](%[[arg0]] : f64) +//       CHECK: ^[[bb1]](%[[arg1:.*]]: f64): +//       CHECK:   cf.cond_br %[[c]], ^[[bb1]](%[[arg1]] : f64), ^[[bb2:.*]](%[[arg1]] : f64) +//       CHECK: ^[[bb2]](%[[arg2:.*]]: f64): +//       CHECK:   %[[cast2:.*]] = "test.cast"(%[[arg2]]) : (f64) -> f32 +//       CHECK:   "test.bar"(%[[cast2]]) +//       CHECK: return +func.func @test_unstructured_cf_conversion(%arg0: f32, %c: i1) { +  "test.foo"(%arg0) : (f32) -> () +  cf.br ^bb1(%arg0: f32) +^bb1(%arg1: f32): +  cf.cond_br %c, ^bb1(%arg1 : f32), ^bb2(%arg1 : f32) +^bb2(%arg2: f32): +  "test.bar"(%arg2) : (f32) -> () +  return +} diff --git a/mlir/test/lib/Dialect/Test/CMakeLists.txt b/mlir/test/lib/Dialect/Test/CMakeLists.txt index f099d01..9354a85 100644 --- a/mlir/test/lib/Dialect/Test/CMakeLists.txt +++ b/mlir/test/lib/Dialect/Test/CMakeLists.txt @@ -71,6 +71,7 @@ add_mlir_library(MLIRTestDialect    )  mlir_target_link_libraries(MLIRTestDialect PUBLIC    MLIRControlFlowInterfaces +  MLIRControlFlowTransforms    MLIRDataLayoutInterfaces    MLIRDerivedAttributeOpInterface    MLIRDestinationStyleOpInterface diff --git a/mlir/test/lib/Dialect/Test/TestPatterns.cpp b/mlir/test/lib/Dialect/Test/TestPatterns.cpp index efbdbfb..fd2b943 100644 --- a/mlir/test/lib/Dialect/Test/TestPatterns.cpp +++ b/mlir/test/lib/Dialect/Test/TestPatterns.cpp @@ -11,6 +11,7 @@  #include "TestTypes.h"  #include "mlir/Dialect/Arith/IR/Arith.h"  #include "mlir/Dialect/CommonFolders.h" +#include "mlir/Dialect/ControlFlow/Transforms/StructuralTypeConversions.h"  #include "mlir/Dialect/Func/IR/FuncOps.h"  #include "mlir/Dialect/Func/Transforms/FuncConversions.h"  #include "mlir/Dialect/SCF/Transforms/Patterns.h" @@ -2042,6 +2043,10 @@ struct TestTypeConversionDriver      });      converter.addConversion([](IndexType type) { return type; });      converter.addConversion([](IntegerType type, SmallVectorImpl<Type> &types) { +      if (type.isInteger(1)) { +        // i1 is legal. +        types.push_back(type); +      }        if (type.isInteger(38)) {          // i38 is legal.          types.push_back(type); @@ -2175,6 +2180,8 @@ struct TestTypeConversionDriver                                                                converter);      mlir::scf::populateSCFStructuralTypeConversionsAndLegality(          converter, patterns, target); +    mlir::cf::populateCFStructuralTypeConversionsAndLegality(converter, +                                                             patterns, target);      ConversionConfig config;      config.allowPatternRollback = allowPatternRollback; diff --git a/mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp b/mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp index 496f18b..61db9d2 100644 --- a/mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp +++ b/mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp @@ -797,7 +797,7 @@ DiagnosedSilenceableFailure mlir::test::TestProduceInvalidIR::applyToOne(    // Provide some IR that does not verify.    rewriter.setInsertionPointToStart(&target->getRegion(0).front());    TestDummyPayloadOp::create(rewriter, target->getLoc(), TypeRange(), -                             ValueRange(), /*failToVerify=*/true); +                             ValueRange(), /*fail_to_verify=*/true);    return DiagnosedSilenceableFailure::success();  } | 
