diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMDialect.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMDialect.td --- a/mlir/include/mlir/Dialect/LLVMIR/LLVMDialect.td +++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMDialect.td @@ -19,6 +19,7 @@ let hasRegionArgAttrVerify = 1; let hasRegionResultAttrVerify = 1; let hasOperationAttrVerify = 1; + let usePropertiesForAttributes = 1; let extraClassDeclaration = [{ /// Name of the data layout attributes. diff --git a/mlir/test/Conversion/SPIRVToLLVM/constant-op-to-llvm.mlir b/mlir/test/Conversion/SPIRVToLLVM/constant-op-to-llvm.mlir --- a/mlir/test/Conversion/SPIRVToLLVM/constant-op-to-llvm.mlir +++ b/mlir/test/Conversion/SPIRVToLLVM/constant-op-to-llvm.mlir @@ -12,50 +12,3 @@ %1 = spirv.Constant false spirv.Return } - -// CHECK-LABEL: @bool_constant_vector -spirv.func @bool_constant_vector() "None" { - // CHECK: llvm.mlir.constant(dense<[true, false]> : vector<2xi1>) : vector<2xi1> - %0 = spirv.Constant dense<[true, false]> : vector<2xi1> - // CHECK: llvm.mlir.constant(dense : vector<3xi1>) : vector<3xi1> - %1 = spirv.Constant dense : vector<3xi1> - spirv.Return -} - -// CHECK-LABEL: @integer_constant_scalar -spirv.func @integer_constant_scalar() "None" { - // CHECK: llvm.mlir.constant(0 : i8) : i8 - %0 = spirv.Constant 0 : i8 - // CHECK: llvm.mlir.constant(-5 : i64) : i64 - %1 = spirv.Constant -5 : si64 - // CHECK: llvm.mlir.constant(10 : i16) : i16 - %2 = spirv.Constant 10 : ui16 - spirv.Return -} - -// CHECK-LABEL: @integer_constant_vector -spirv.func @integer_constant_vector() "None" { - // CHECK: llvm.mlir.constant(dense<[2, 3]> : vector<2xi32>) : vector<2xi32> - %0 = spirv.Constant dense<[2, 3]> : vector<2xi32> - // CHECK: llvm.mlir.constant(dense<-4> : vector<2xi32>) : vector<2xi32> - %1 = spirv.Constant dense<-4> : vector<2xsi32> - // CHECK: llvm.mlir.constant(dense<[2, 3, 4]> : vector<3xi32>) : vector<3xi32> - %2 = spirv.Constant dense<[2, 3, 4]> : vector<3xui32> - spirv.Return -} - -// CHECK-LABEL: @float_constant_scalar -spirv.func @float_constant_scalar() "None" { - // CHECK: llvm.mlir.constant(5.000000e+00 : f16) : f16 - %0 = spirv.Constant 5.000000e+00 : f16 - // CHECK: llvm.mlir.constant(5.000000e+00 : f64) : f64 - %1 = spirv.Constant 5.000000e+00 : f64 - spirv.Return -} - -// CHECK-LABEL: @float_constant_vector -spirv.func @float_constant_vector() "None" { - // CHECK: llvm.mlir.constant(dense<[2.000000e+00, 3.000000e+00]> : vector<2xf32>) : vector<2xf32> - %0 = spirv.Constant dense<[2.000000e+00, 3.000000e+00]> : vector<2xf32> - spirv.Return -} diff --git a/mlir/test/Conversion/VectorToLLVM/vector-reduction-to-llvm.mlir b/mlir/test/Conversion/VectorToLLVM/vector-reduction-to-llvm.mlir --- a/mlir/test/Conversion/VectorToLLVM/vector-reduction-to-llvm.mlir +++ b/mlir/test/Conversion/VectorToLLVM/vector-reduction-to-llvm.mlir @@ -5,14 +5,14 @@ // CHECK-SAME: %[[A:.*]]: vector<16xf32>) // CHECK: %[[C:.*]] = llvm.mlir.constant(0.000000e+00 : f32) : f32 // CHECK: %[[V:.*]] = "llvm.intr.vector.reduce.fadd"(%[[C]], %[[A]]) -// CHECK-SAME: {reassoc = false} : (f32, vector<16xf32>) -> f32 +// CHECK-SAME: <{reassoc = false}> : (f32, vector<16xf32>) -> f32 // CHECK: return %[[V]] : f32 // // REASSOC-LABEL: @reduce_add_f32( // REASSOC-SAME: %[[A:.*]]: vector<16xf32>) // REASSOC: %[[C:.*]] = llvm.mlir.constant(0.000000e+00 : f32) : f32 // REASSOC: %[[V:.*]] = "llvm.intr.vector.reduce.fadd"(%[[C]], %[[A]]) -// REASSOC-SAME: {reassoc = true} : (f32, vector<16xf32>) -> f32 +// REASSOC-SAME: <{reassoc = true}> : (f32, vector<16xf32>) -> f32 // REASSOC: return %[[V]] : f32 // func.func @reduce_add_f32(%arg0: vector<16xf32>) -> f32 { @@ -26,14 +26,14 @@ // CHECK-SAME: %[[A:.*]]: vector<16xf32>) // CHECK: %[[C:.*]] = llvm.mlir.constant(1.000000e+00 : f32) : f32 // CHECK: %[[V:.*]] = "llvm.intr.vector.reduce.fmul"(%[[C]], %[[A]]) -// CHECK-SAME: {reassoc = false} : (f32, vector<16xf32>) -> f32 +// CHECK-SAME: <{reassoc = false}> : (f32, vector<16xf32>) -> f32 // CHECK: return %[[V]] : f32 // // REASSOC-LABEL: @reduce_mul_f32( // REASSOC-SAME: %[[A:.*]]: vector<16xf32>) // REASSOC: %[[C:.*]] = llvm.mlir.constant(1.000000e+00 : f32) : f32 // REASSOC: %[[V:.*]] = "llvm.intr.vector.reduce.fmul"(%[[C]], %[[A]]) -// REASSOC-SAME: {reassoc = true} : (f32, vector<16xf32>) -> f32 +// REASSOC-SAME: <{reassoc = true}> : (f32, vector<16xf32>) -> f32 // REASSOC: return %[[V]] : f32 // func.func @reduce_mul_f32(%arg0: vector<16xf32>) -> f32 { diff --git a/mlir/test/Conversion/VectorToLLVM/vector-to-llvm.mlir b/mlir/test/Conversion/VectorToLLVM/vector-to-llvm.mlir --- a/mlir/test/Conversion/VectorToLLVM/vector-to-llvm.mlir +++ b/mlir/test/Conversion/VectorToLLVM/vector-to-llvm.mlir @@ -1267,7 +1267,7 @@ // CHECK: %[[CA:.*]] = builtin.unrealized_conversion_cast %[[A]] : vector to vector<1xf32> // CHECK: %[[C:.*]] = llvm.mlir.constant(0.000000e+00 : f32) : f32 // CHECK: %[[V:.*]] = "llvm.intr.vector.reduce.fadd"(%[[C]], %[[CA]]) -// CHECK-SAME: {reassoc = false} : (f32, vector<1xf32>) -> f32 +// CHECK-SAME: <{reassoc = false}> : (f32, vector<1xf32>) -> f32 // CHECK: return %[[V]] : f32 // ----- @@ -1280,7 +1280,7 @@ // CHECK-SAME: %[[A:.*]]: vector<16xf16>) // CHECK: %[[C:.*]] = llvm.mlir.constant(0.000000e+00 : f16) : f16 // CHECK: %[[V:.*]] = "llvm.intr.vector.reduce.fadd"(%[[C]], %[[A]]) -// CHECK-SAME: {reassoc = false} : (f16, vector<16xf16>) -> f16 +// CHECK-SAME: <{reassoc = false}> : (f16, vector<16xf16>) -> f16 // CHECK: return %[[V]] : f16 // ----- @@ -1293,7 +1293,7 @@ // CHECK-SAME: %[[A:.*]]: vector<16xf32>) // CHECK: %[[C:.*]] = llvm.mlir.constant(0.000000e+00 : f32) : f32 // CHECK: %[[V:.*]] = "llvm.intr.vector.reduce.fadd"(%[[C]], %[[A]]) -// CHECK-SAME: {reassoc = false} : (f32, vector<16xf32>) -> f32 +// CHECK-SAME: <{reassoc = false}> : (f32, vector<16xf32>) -> f32 // CHECK: return %[[V]] : f32 // ----- @@ -1306,7 +1306,7 @@ // CHECK-SAME: %[[A:.*]]: vector<16xf64>) // CHECK: %[[C:.*]] = llvm.mlir.constant(0.000000e+00 : f64) : f64 // CHECK: %[[V:.*]] = "llvm.intr.vector.reduce.fadd"(%[[C]], %[[A]]) -// CHECK-SAME: {reassoc = false} : (f64, vector<16xf64>) -> f64 +// CHECK-SAME: <{reassoc = false}> : (f64, vector<16xf64>) -> f64 // CHECK: return %[[V]] : f64 // ----- diff --git a/mlir/test/Dialect/LLVMIR/func.mlir b/mlir/test/Dialect/LLVMIR/func.mlir --- a/mlir/test/Dialect/LLVMIR/func.mlir +++ b/mlir/test/Dialect/LLVMIR/func.mlir @@ -5,33 +5,33 @@ module { // GENERIC: "llvm.func" - // GENERIC: function_type = !llvm.func + // GENERIC-SAME: function_type = !llvm.func // GENERIC-SAME: sym_name = "foo" - // GENERIC-SAME: () -> () + // GENERIC: () -> () // CHECK: llvm.func @foo() "llvm.func" () ({ }) {sym_name = "foo", function_type = !llvm.func} : () -> () // GENERIC: "llvm.func" - // GENERIC: function_type = !llvm.func + // GENERIC-SAME: function_type = !llvm.func // GENERIC-SAME: sym_name = "bar" - // GENERIC-SAME: () -> () + // GENERIC: () -> () // CHECK: llvm.func @bar(i64, i64) -> i64 "llvm.func"() ({ }) {sym_name = "bar", function_type = !llvm.func} : () -> () // GENERIC: "llvm.func" + // GENERIC-SAME: function_type = !llvm.func + // GENERIC-SAME: sym_name = "baz" // CHECK: llvm.func @baz(%{{.*}}: i64) -> i64 - "llvm.func"() ({ + "llvm.func"() <{sym_name = "baz", function_type = !llvm.func}> ({ // GENERIC: ^bb0 ^bb0(%arg0: i64): // GENERIC: llvm.return llvm.return %arg0 : i64 - // GENERIC: function_type = !llvm.func - // GENERIC-SAME: sym_name = "baz" - // GENERIC-SAME: () -> () - }) {sym_name = "baz", function_type = !llvm.func} : () -> () + // GENERIC: () -> () + }) : () -> () // CHECK: llvm.func @qux(!llvm.ptr {llvm.noalias}, i64) // CHECK: attributes {xxx = {yyy = 42 : i64}} diff --git a/mlir/test/Dialect/LLVMIR/global.mlir b/mlir/test/Dialect/LLVMIR/global.mlir --- a/mlir/test/Dialect/LLVMIR/global.mlir +++ b/mlir/test/Dialect/LLVMIR/global.mlir @@ -100,7 +100,7 @@ // ----- // expected-error @+1 {{op requires attribute 'sym_name'}} -"llvm.mlir.global"() ({}) {linkage = "private", type = i64, constant, global_type = i64, value = 42 : i64} : () -> () +"llvm.mlir.global"() ({}) {linkage = #llvm.linkage, type = i64, constant, global_type = i64, value = 42 : i64} : () -> () // ----- @@ -119,11 +119,6 @@ // ----- -// expected-error @+1 {{'addr_space' failed to satisfy constraint: 32-bit signless integer attribute whose value is non-negative}} -"llvm.mlir.global"() ({}) {sym_name = "foo", global_type = i64, value = 42 : i64, addr_space = 1.0 : f32, linkage = #llvm.linkage} : () -> () - -// ----- - func.func @foo() { // expected-error @+1 {{must appear at the module level}} llvm.mlir.global internal @bar(42) : i32 diff --git a/mlir/test/Dialect/LLVMIR/invalid.mlir b/mlir/test/Dialect/LLVMIR/invalid.mlir --- a/mlir/test/Dialect/LLVMIR/invalid.mlir +++ b/mlir/test/Dialect/LLVMIR/invalid.mlir @@ -965,26 +965,6 @@ // ----- -module { - llvm.func @aliasScope(%arg0 : !llvm.ptr, %arg1 : i32, %arg2 : i32) { - // expected-error@below {{attribute 'alias_scopes' failed to satisfy constraint: symbol ref array attribute}} - %0 = llvm.cmpxchg %arg0, %arg1, %arg2 acq_rel monotonic { "alias_scopes" = "test" } : !llvm.ptr, i32 - llvm.return - } -} - -// ----- - -module { - llvm.func @noAliasScopes(%arg0 : !llvm.ptr) { - // expected-error@below {{attribute 'noalias_scopes' failed to satisfy constraint: symbol ref array attribute}} - %0 = llvm.load %arg0 { "noalias_scopes" = "test" } : !llvm.ptr -> i32 - llvm.return - } -} - -// ----- - module { llvm.func @aliasScope(%arg0 : i32, %arg1 : !llvm.ptr) { // expected-error@below {{expected '@metadata::@group' to resolve to a llvm.alias_scope}} diff --git a/mlir/test/Target/LLVMIR/Import/intrinsic.ll b/mlir/test/Target/LLVMIR/Import/intrinsic.ll --- a/mlir/test/Target/LLVMIR/Import/intrinsic.ll +++ b/mlir/test/Target/LLVMIR/Import/intrinsic.ll @@ -273,13 +273,13 @@ %12 = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> %2) ; CHECK: "llvm.intr.vector.reduce.umin"(%{{.*}}) : (vector<8xi32>) -> i32 %13 = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> %2) - ; CHECK: "llvm.intr.vector.reduce.fadd"(%{{.*}}, %{{.*}}) {reassoc = false} : (f32, vector<8xf32>) -> f32 + ; CHECK: "llvm.intr.vector.reduce.fadd"(%{{.*}}, %{{.*}}) <{reassoc = false}> : (f32, vector<8xf32>) -> f32 %14 = call float @llvm.vector.reduce.fadd.v8f32(float %0, <8 x float> %1) - ; CHECK: "llvm.intr.vector.reduce.fmul"(%{{.*}}, %{{.*}}) {reassoc = false} : (f32, vector<8xf32>) -> f32 + ; CHECK: "llvm.intr.vector.reduce.fmul"(%{{.*}}, %{{.*}}) <{reassoc = false}> : (f32, vector<8xf32>) -> f32 %15 = call float @llvm.vector.reduce.fmul.v8f32(float %0, <8 x float> %1) - ; CHECK: "llvm.intr.vector.reduce.fadd"(%{{.*}}, %{{.*}}) {reassoc = true} : (f32, vector<8xf32>) -> f32 + ; CHECK: "llvm.intr.vector.reduce.fadd"(%{{.*}}, %{{.*}}) <{reassoc = true}> : (f32, vector<8xf32>) -> f32 %16 = call reassoc float @llvm.vector.reduce.fadd.v8f32(float %0, <8 x float> %1) - ; CHECK: "llvm.intr.vector.reduce.fmul"(%{{.*}}, %{{.*}}) {reassoc = true} : (f32, vector<8xf32>) -> f32 + ; CHECK: "llvm.intr.vector.reduce.fmul"(%{{.*}}, %{{.*}}) <{reassoc = true}> : (f32, vector<8xf32>) -> f32 %17 = call reassoc float @llvm.vector.reduce.fmul.v8f32(float %0, <8 x float> %1) ; CHECK: "llvm.intr.vector.reduce.xor"(%{{.*}}) : (vector<8xi32>) -> i32 %18 = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> %2) diff --git a/mlir/test/Target/LLVMIR/loop-metadata.mlir b/mlir/test/Target/LLVMIR/loop-metadata.mlir --- a/mlir/test/Target/LLVMIR/loop-metadata.mlir +++ b/mlir/test/Target/LLVMIR/loop-metadata.mlir @@ -1,238 +1,5 @@ // RUN: mlir-translate -mlir-to-llvmir -split-input-file %s | FileCheck %s -// CHECK-LABEL: @disableNonForced -llvm.func @disableNonForced() { - // CHECK: br {{.*}} !llvm.loop ![[LOOP_NODE:[0-9]+]] - llvm.br ^bb1 {loop_annotation = #llvm.loop_annotation} -^bb1: - llvm.return -} - -// CHECK: ![[LOOP_NODE]] = distinct !{![[LOOP_NODE]], !{{[0-9]+}}} -// CHECK-DAG: ![[VEC_NODE0:[0-9]+]] = !{!"llvm.loop.disable_nonforced"} - -// ----- - -// CHECK-LABEL: @mustprogress -llvm.func @mustprogress() { - // CHECK: br {{.*}} !llvm.loop ![[LOOP_NODE:[0-9]+]] - llvm.br ^bb1 {loop_annotation = #llvm.loop_annotation} -^bb1: - llvm.return -} - -// CHECK: ![[LOOP_NODE]] = distinct !{![[LOOP_NODE]], !{{[0-9]+}}} -// CHECK-DAG: ![[VEC_NODE0:[0-9]+]] = !{!"llvm.loop.mustprogress"} - -// ----- - -// CHECK-LABEL: @isvectorized -llvm.func @isvectorized() { - // CHECK: br {{.*}} !llvm.loop ![[LOOP_NODE:[0-9]+]] - llvm.br ^bb1 {loop_annotation = #llvm.loop_annotation} -^bb1: - llvm.return -} - -// CHECK: ![[LOOP_NODE]] = distinct !{![[LOOP_NODE]], !{{[0-9]+}}} -// CHECK-DAG: ![[VEC_NODE0:[0-9]+]] = !{!"llvm.loop.isvectorized", i32 1} - -// ----- - -#followup = #llvm.loop_annotation - -// CHECK-LABEL: @vectorizeOptions -llvm.func @vectorizeOptions() { - // CHECK: br {{.*}} !llvm.loop ![[LOOP_NODE:[0-9]+]] - llvm.br ^bb1 {loop_annotation = #llvm.loop_annotation - >} -^bb1: - llvm.return -} - -// CHECK-DAG: ![[NON_FORCED:[0-9]+]] = !{!"llvm.loop.disable_nonforced"} -// CHECK-DAG: ![[FOLLOWUP:[0-9]+]] = distinct !{![[FOLLOWUP]], ![[NON_FORCED]]} -// CHECK-DAG: ![[LOOP_NODE]] = distinct !{![[LOOP_NODE]], !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.vectorize.enable", i1 true} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.vectorize.predicate.enable", i1 true} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.vectorize.scalable.enable", i1 false} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.vectorize.width", i32 16} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.vectorize.followup_vectorized", ![[FOLLOWUP]]} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.vectorize.followup_epilogue", ![[FOLLOWUP]]} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.vectorize.followup_all", ![[FOLLOWUP]]} - -// ----- - -// CHECK-LABEL: @interleaveOptions -llvm.func @interleaveOptions() { - // CHECK: br {{.*}} !llvm.loop ![[LOOP_NODE:[0-9]+]] - llvm.br ^bb1 {loop_annotation = #llvm.loop_annotation>} -^bb1: - llvm.return -} - -// CHECK: ![[LOOP_NODE]] = distinct !{![[LOOP_NODE]], ![[INTERLEAVE_NODE:[0-9]+]]} -// CHECK: ![[INTERLEAVE_NODE]] = !{!"llvm.loop.interleave.count", i32 32} - -// ----- - -#followup = #llvm.loop_annotation - -// CHECK-LABEL: @unrollOptions -llvm.func @unrollOptions() { - // CHECK: br {{.*}} !llvm.loop ![[LOOP_NODE:[0-9]+]] - llvm.br ^bb1 {loop_annotation = #llvm.loop_annotation - >} -^bb1: - llvm.return -} - -// CHECK-DAG: ![[NON_FORCED:[0-9]+]] = !{!"llvm.loop.disable_nonforced"} -// CHECK-DAG: ![[FOLLOWUP:[0-9]+]] = distinct !{![[FOLLOWUP]], ![[NON_FORCED]]} -// CHECK-DAG: ![[LOOP_NODE]] = distinct !{![[LOOP_NODE]], !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.unroll.disable"} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.unroll.count", i32 64} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.unroll.runtime.disable", i1 false} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.unroll.followup_unrolled", ![[FOLLOWUP]]} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.unroll.followup_remainder", ![[FOLLOWUP]]} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.unroll.followup_all", ![[FOLLOWUP]]} - -// ----- - -// CHECK-LABEL: @unrollOptions2 -llvm.func @unrollOptions2() { - // CHECK: br {{.*}} !llvm.loop ![[LOOP_NODE:[0-9]+]] - llvm.br ^bb1 {loop_annotation = #llvm.loop_annotation>} -^bb1: - llvm.return -} - -// CHECK: ![[LOOP_NODE]] = distinct !{![[LOOP_NODE]], !{{[0-9]+}}, !{{[0-9]+}}} -// CHECK-DAG: ![[VEC_NODE0:[0-9]+]] = !{!"llvm.loop.unroll.enable"} -// CHECK-DAG: ![[VEC_NODE2:[0-9]+]] = !{!"llvm.loop.unroll.full"} - -// ----- - -#followup = #llvm.loop_annotation - -// CHECK-LABEL: @unrollAndJamOptions -llvm.func @unrollAndJamOptions() { - // CHECK: br {{.*}} !llvm.loop ![[LOOP_NODE:[0-9]+]] - llvm.br ^bb1 {loop_annotation = #llvm.loop_annotation - >} -^bb1: - llvm.return -} - -// CHECK-DAG: ![[NON_FORCED:[0-9]+]] = !{!"llvm.loop.disable_nonforced"} -// CHECK-DAG: ![[FOLLOWUP:[0-9]+]] = distinct !{![[FOLLOWUP]], ![[NON_FORCED]]} -// CHECK-DAG: ![[LOOP_NODE]] = distinct !{![[LOOP_NODE]], !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.unroll_and_jam.enable"} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.unroll_and_jam.count", i32 8} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.unroll_and_jam.followup_outer", ![[FOLLOWUP]]} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.unroll_and_jam.followup_inner", ![[FOLLOWUP]]} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.unroll_and_jam.followup_remainder_outer", ![[FOLLOWUP]]} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.unroll_and_jam.followup_remainder_inner", ![[FOLLOWUP]]} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.unroll_and_jam.followup_all", ![[FOLLOWUP]]} - -// ----- - -// CHECK-LABEL: @licmOptions -llvm.func @licmOptions() { - // CHECK: br {{.*}} !llvm.loop ![[LOOP_NODE:[0-9]+]] - llvm.br ^bb1 {loop_annotation = #llvm.loop_annotation>} -^bb1: - llvm.return -} - -// CHECK: ![[LOOP_NODE]] = distinct !{![[LOOP_NODE]], !{{[0-9]+}}} -// CHECK-DAG: ![[VEC_NODE0:[0-9]+]] = !{!"llvm.loop.licm_versioning.disable"} - -// ----- - -// CHECK-LABEL: @licmOptions2 -llvm.func @licmOptions2() { - // CHECK: br {{.*}} !llvm.loop ![[LOOP_NODE:[0-9]+]] - llvm.br ^bb1 {loop_annotation = #llvm.loop_annotation>} -^bb1: - llvm.return -} - -// CHECK: ![[LOOP_NODE]] = distinct !{![[LOOP_NODE]], !{{[0-9]+}}} -// CHECK-DAG: ![[VEC_NODE0:[0-9]+]] = !{!"llvm.licm.disable"} - -// ----- - -#followup = #llvm.loop_annotation - -// CHECK-LABEL: @distributeOptions -llvm.func @distributeOptions() { - // CHECK: br {{.*}} !llvm.loop ![[LOOP_NODE:[0-9]+]] - llvm.br ^bb1 {loop_annotation = #llvm.loop_annotation - >} -^bb1: - llvm.return -} - -// CHECK-DAG: ![[NON_FORCED:[0-9]+]] = !{!"llvm.loop.disable_nonforced"} -// CHECK-DAG: ![[FOLLOWUP:[0-9]+]] = distinct !{![[FOLLOWUP]], ![[NON_FORCED]]} -// CHECK-DAG: ![[LOOP_NODE]] = distinct !{![[LOOP_NODE]], !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.distribute.enable", i1 false} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.distribute.followup_coincident", ![[FOLLOWUP]]} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.distribute.followup_sequential", ![[FOLLOWUP]]} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.distribute.followup_fallback", ![[FOLLOWUP]]} -// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.distribute.followup_all", ![[FOLLOWUP]]} - -// ----- - -// CHECK-LABEL: @pipelineOptions -llvm.func @pipelineOptions() { - // CHECK: br {{.*}} !llvm.loop ![[LOOP_NODE:[0-9]+]] - llvm.br ^bb1 {loop_annotation = #llvm.loop_annotation>} -^bb1: - llvm.return -} - -// CHECK: ![[LOOP_NODE]] = distinct !{![[LOOP_NODE]], !{{[0-9]+}}, !{{[0-9]+}}} -// CHECK-DAG: ![[VEC_NODE0:[0-9]+]] = !{!"llvm.loop.pipeline.disable", i1 false} -// CHECK-DAG: ![[VEC_NODE0:[0-9]+]] = !{!"llvm.loop.pipeline.initiationinterval", i32 1} - -// ----- - -// CHECK-LABEL: @peeledOptions -llvm.func @peeledOptions() { - // CHECK: br {{.*}} !llvm.loop ![[LOOP_NODE:[0-9]+]] - llvm.br ^bb1 {loop_annotation = #llvm.loop_annotation>} -^bb1: - llvm.return -} - -// CHECK: ![[LOOP_NODE]] = distinct !{![[LOOP_NODE]], !{{[0-9]+}}} -// CHECK-DAG: ![[VEC_NODE0:[0-9]+]] = !{!"llvm.loop.peeled.count", i32 3} - -// ----- - -// CHECK-LABEL: @unswitchOptions -llvm.func @unswitchOptions() { - // CHECK: br {{.*}} !llvm.loop ![[LOOP_NODE:[0-9]+]] - llvm.br ^bb1 {loop_annotation = #llvm.loop_annotation>} -^bb1: - llvm.return -} - -// CHECK: ![[LOOP_NODE]] = distinct !{![[LOOP_NODE]], !{{[0-9]+}}} -// CHECK-DAG: ![[VEC_NODE0:[0-9]+]] = !{!"llvm.loop.unswitch.partial.disable"} - -// ----- - // CHECK-LABEL: @loopOptions llvm.func @loopOptions(%arg1 : i32, %arg2 : i32) { %0 = llvm.mlir.constant(0 : i32) : i32