1bab5bcf8SMehdi Amini// RUN: mlir-opt -allow-unregistered-dialect %s | FileCheck %s 2b89b3cdbSRahul Kayaith// RUN: mlir-opt -allow-unregistered-dialect %s | mlir-opt -allow-unregistered-dialect | FileCheck %s 3b89b3cdbSRahul Kayaith// RUN: mlir-opt -allow-unregistered-dialect -mlir-print-op-generic %s | FileCheck %s -check-prefix GENERIC 4b89b3cdbSRahul Kayaith// RUN: mlir-opt -allow-unregistered-dialect %s | mlir-opt -allow-unregistered-dialect -mlir-print-op-generic | FileCheck %s -check-prefix GENERIC 59b9f7ff5SChris Lattner 6c8496d29SRiver Riddle// CHECK-DAG: #map{{[0-9]*}} = affine_map<(d0, d1, d2, d3, d4)[s0] -> (d0, d1, d2, d4, d3)> 7c8496d29SRiver Riddle#map = affine_map<(d0, d1, d2, d3, d4)[s0] -> (d0, d1, d2, d4, d3)> 8fa75d621SMLIR Team 9c8496d29SRiver Riddle// CHECK-DAG: #map{{[0-9]*}} = affine_map<(d0) -> (d0)> 104268e4f4SRiver Riddle#map1 = affine_map<(d0) -> (d0)> 11fa75d621SMLIR Team 12c8496d29SRiver Riddle// CHECK-DAG: #map{{[0-9]*}} = affine_map<(d0, d1, d2) -> (d0, d1, d2)> 134268e4f4SRiver Riddle#map2 = affine_map<(d0, d1, d2) -> (d0, d1, d2)> 14fa75d621SMLIR Team 15c8496d29SRiver Riddle// CHECK-DAG: #map{{[0-9]*}} = affine_map<(d0, d1, d2) -> (d1, d0, d2)> 164268e4f4SRiver Riddle#map3 = affine_map<(d0, d1, d2) -> (d1, d0, d2)> 17fa75d621SMLIR Team 18c8496d29SRiver Riddle// CHECK-DAG: #map{{[0-9]*}} = affine_map<()[s0] -> (0, s0 - 1)> 194268e4f4SRiver Riddle#inline_map_minmax_loop1 = affine_map<()[s0] -> (0, s0 - 1)> 20d32a28c5STatiana Shpeisman 21c8496d29SRiver Riddle// CHECK-DAG: #map{{[0-9]*}} = affine_map<()[s0] -> (100, s0 + 1)> 224268e4f4SRiver Riddle#inline_map_minmax_loop2 = affine_map<()[s0] -> (100, s0 + 1)> 23d32a28c5STatiana Shpeisman 24c8496d29SRiver Riddle// CHECK-DAG: #map{{[0-9]*}} = affine_map<(d0, d1)[s0] -> (d0 + d1 + s0)> 254268e4f4SRiver Riddle#bound_map1 = affine_map<(i, j)[s] -> (i + j + s)> 26d32a28c5STatiana Shpeisman 27c8496d29SRiver Riddle// CHECK-DAG: #map{{[0-9]*}} = affine_map<(d0, d1) -> (d0 + d1)> 284268e4f4SRiver Riddle#inline_map_loop_bounds2 = affine_map<(d0, d1) -> (d0 + d1)> 29d32a28c5STatiana Shpeisman 30c8496d29SRiver Riddle// CHECK-DAG: #map{{[0-9]*}} = affine_map<(d0)[s0] -> (d0 + s0, d0 - s0)> 314268e4f4SRiver Riddle#bound_map2 = affine_map<(i)[s] -> (i + s, i - s)> 32d32a28c5STatiana Shpeisman 3319f14b72SAlex Zinenko// All maps appear in arbitrary order before all sets, in arbitrary order. 34074cb429SSmit Hinsu// CHECK-NOT: Placeholder 3519f14b72SAlex Zinenko 36c8496d29SRiver Riddle// CHECK-DAG: #set{{[0-9]*}} = affine_set<(d0)[s0, s1] : (d0 >= 0, -d0 + s0 >= 0, s0 - 5 == 0, -d0 + s1 + 1 >= 0)> 374268e4f4SRiver Riddle#set0 = affine_set<(i)[N, M] : (i >= 0, -i + N >= 0, N - 5 == 0, -i + M + 1 >= 0)> 388a663870SUday Bondhugula 39c8496d29SRiver Riddle// CHECK-DAG: #set{{[0-9]*}} = affine_set<(d0, d1)[s0] : (d0 >= 0, d1 >= 0)> 404268e4f4SRiver Riddle#set1 = affine_set<(d0, d1)[s0] : (d0 >= 0, d1 >= 0)> 41ea65c695SUday Bondhugula 42c8496d29SRiver Riddle// CHECK-DAG: #set{{[0-9]*}} = affine_set<(d0) : (d0 - 1 == 0)> 434268e4f4SRiver Riddle#set2 = affine_set<(d0) : (d0 - 1 == 0)> 44ea65c695SUday Bondhugula 4595371ce9SMehdi Amini// CHECK-DAG: [[$SET_TRUE:#set[0-9]+]] = affine_set<() : (0 == 0)> 4638f8dc67SRiver Riddle 47c8496d29SRiver Riddle// CHECK-DAG: #set{{[0-9]*}} = affine_set<(d0)[s0] : (d0 - 2 >= 0, -d0 + 4 >= 0)> 488a663870SUday Bondhugula 49b7382ed3SRahul Joshi// CHECK: func private @foo(i32, i64) -> f32 506a99d290SRiver Riddlefunc.func private @foo(i32, i64) -> f32 519b9f7ff5SChris Lattner 52b7382ed3SRahul Joshi// CHECK: func private @bar() 536a99d290SRiver Riddlefunc.func private @bar() -> () 549b9f7ff5SChris Lattner 55b7382ed3SRahul Joshi// CHECK: func private @baz() -> (i1, index, f32) 566a99d290SRiver Riddlefunc.func private @baz() -> (i1, index, f32) 579b9f7ff5SChris Lattner 58b7382ed3SRahul Joshi// CHECK: func private @missingReturn() 596a99d290SRiver Riddlefunc.func private @missingReturn() 6023b784a1SChris Lattner 61a44e6303SChris Lattner// CHECK: func private @int_types(i0, i1, i2, i4, i7, i87) -> (i1, index, i19) 626a99d290SRiver Riddlefunc.func private @int_types(i0, i1, i2, i4, i7, i87) -> (i1, index, i19) 636af866c5SChris Lattner 64b7382ed3SRahul Joshi// CHECK: func private @sint_types(si2, si4) -> (si7, si1023) 656a99d290SRiver Riddlefunc.func private @sint_types(si2, si4) -> (si7, si1023) 6635b68527SLei Zhang 67b7382ed3SRahul Joshi// CHECK: func private @uint_types(ui2, ui4) -> (ui7, ui1023) 686a99d290SRiver Riddlefunc.func private @uint_types(ui2, ui4) -> (ui7, ui1023) 6935b68527SLei Zhang 70cf0173deSValentin Clement// CHECK: func private @float_types(f80, f128) 716a99d290SRiver Riddlefunc.func private @float_types(f80, f128) 7223b784a1SChris Lattner 73ddf2d62cSMichal Terepeta// CHECK: func private @vectors(vector<f32>, vector<1xf32>, vector<2x4xf32>) 746a99d290SRiver Riddlefunc.func private @vectors(vector<f32>, vector<1 x f32>, vector<2x4xf32>) 7523b784a1SChris Lattner 76b7382ed3SRahul Joshi// CHECK: func private @tensors(tensor<*xf32>, tensor<*xvector<2x4xf32>>, tensor<1x?x4x?x?xi32>, tensor<i8>) 776a99d290SRiver Riddlefunc.func private @tensors(tensor<* x f32>, tensor<* x vector<2x4xf32>>, 78c77f39f5SChris Lattner tensor<1x?x4x?x?xi32>, tensor<i8>) 7923b784a1SChris Lattner 807714b405SAart Bik// CHECK: func private @tensor_encoding(tensor<16x32xf64, "sparse">) 816a99d290SRiver Riddlefunc.func private @tensor_encoding(tensor<16x32xf64, "sparse">) 827714b405SAart Bik 8371699961SRiver Riddle// CHECK: func private @large_shape_dimension(tensor<9223372036854775807xf32>) 846a99d290SRiver Riddlefunc.func private @large_shape_dimension(tensor<9223372036854775807xf32>) 8571699961SRiver Riddle 86c8496d29SRiver Riddle// CHECK: func private @functions((memref<1x?x4x?x?xi32, #map>, memref<8xi8>) -> (), () -> ()) 87c8496d29SRiver Riddlefunc.func private @functions((memref<1x?x4x?x?xi32, #map, 0>, memref<8xi8, #map1, 0>) -> (), ()->()) 8880b6bd24SChris Lattner 89b7382ed3SRahul Joshi// CHECK: func private @memrefs2(memref<2x4x8xi8, 1>) 906a99d290SRiver Riddlefunc.func private @memrefs2(memref<2x4x8xi8, #map2, 1>) 918e8114a9SMLIR Team 92b7382ed3SRahul Joshi// CHECK: func private @memrefs3(memref<2x4x8xi8>) 936a99d290SRiver Riddlefunc.func private @memrefs3(memref<2x4x8xi8, affine_map<(d0, d1, d2) -> (d0, d1, d2)>>) 948e8114a9SMLIR Team 95b7382ed3SRahul Joshi// CHECK: func private @memrefs_drop_triv_id_inline(memref<2xi8>) 966a99d290SRiver Riddlefunc.func private @memrefs_drop_triv_id_inline(memref<2xi8, affine_map<(d0) -> (d0)>>) 97aae372ecSAlex Zinenko 98b7382ed3SRahul Joshi// CHECK: func private @memrefs_drop_triv_id_inline0(memref<2xi8>) 996a99d290SRiver Riddlefunc.func private @memrefs_drop_triv_id_inline0(memref<2xi8, affine_map<(d0) -> (d0)>, 0>) 100aae372ecSAlex Zinenko 101b7382ed3SRahul Joshi// CHECK: func private @memrefs_drop_triv_id_inline1(memref<2xi8, 1>) 1026a99d290SRiver Riddlefunc.func private @memrefs_drop_triv_id_inline1(memref<2xi8, affine_map<(d0) -> (d0)>, 1>) 103aae372ecSAlex Zinenko 104f3bf5c05SVladislav Vinogradov// Test memref with custom memory space 105f3bf5c05SVladislav Vinogradov 106f3bf5c05SVladislav Vinogradov// CHECK: func private @memrefs_nomap_nospace(memref<5x6x7xf32>) 1076a99d290SRiver Riddlefunc.func private @memrefs_nomap_nospace(memref<5x6x7xf32>) 108f3bf5c05SVladislav Vinogradov 109c8496d29SRiver Riddle// CHECK: func private @memrefs_map_nospace(memref<5x6x7xf32, #map{{[0-9]*}}>) 1106a99d290SRiver Riddlefunc.func private @memrefs_map_nospace(memref<5x6x7xf32, #map3>) 111f3bf5c05SVladislav Vinogradov 112f3bf5c05SVladislav Vinogradov// CHECK: func private @memrefs_nomap_intspace(memref<5x6x7xf32, 3>) 1136a99d290SRiver Riddlefunc.func private @memrefs_nomap_intspace(memref<5x6x7xf32, 3>) 114f3bf5c05SVladislav Vinogradov 115c8496d29SRiver Riddle// CHECK: func private @memrefs_map_intspace(memref<5x6x7xf32, #map{{[0-9]*}}, 5>) 1166a99d290SRiver Riddlefunc.func private @memrefs_map_intspace(memref<5x6x7xf32, #map3, 5>) 117f3bf5c05SVladislav Vinogradov 118f3bf5c05SVladislav Vinogradov// CHECK: func private @memrefs_nomap_strspace(memref<5x6x7xf32, "local">) 1196a99d290SRiver Riddlefunc.func private @memrefs_nomap_strspace(memref<5x6x7xf32, "local">) 120f3bf5c05SVladislav Vinogradov 121c8496d29SRiver Riddle// CHECK: func private @memrefs_map_strspace(memref<5x6x7xf32, #map{{[0-9]*}}, "private">) 1226a99d290SRiver Riddlefunc.func private @memrefs_map_strspace(memref<5x6x7xf32, #map3, "private">) 123f3bf5c05SVladislav Vinogradov 124f3bf5c05SVladislav Vinogradov// CHECK: func private @memrefs_nomap_dictspace(memref<5x6x7xf32, {memSpace = "special", subIndex = 1 : i64}>) 1256a99d290SRiver Riddlefunc.func private @memrefs_nomap_dictspace(memref<5x6x7xf32, {memSpace = "special", subIndex = 1}>) 126f3bf5c05SVladislav Vinogradov 127c8496d29SRiver Riddle// CHECK: func private @memrefs_map_dictspace(memref<5x6x7xf32, #map{{[0-9]*}}, {memSpace = "special", subIndex = 3 : i64}>) 1286a99d290SRiver Riddlefunc.func private @memrefs_map_dictspace(memref<5x6x7xf32, #map3, {memSpace = "special", subIndex = 3}>) 1290fb905c0SChris Lattner 130b7382ed3SRahul Joshi// CHECK: func private @complex_types(complex<i1>) -> complex<f32> 1316a99d290SRiver Riddlefunc.func private @complex_types(complex<i1>) -> complex<f32> 1320fb905c0SChris Lattner 133b7382ed3SRahul Joshi// CHECK: func private @memref_with_index_elems(memref<1x?xindex>) 1346a99d290SRiver Riddlefunc.func private @memref_with_index_elems(memref<1x?xindex>) 135e12db3edSStephan Herhut 136b7382ed3SRahul Joshi// CHECK: func private @memref_with_complex_elems(memref<1x?xcomplex<f32>>) 1376a99d290SRiver Riddlefunc.func private @memref_with_complex_elems(memref<1x?xcomplex<f32>>) 1387e5d8a34SAlexander Belyaev 139b7382ed3SRahul Joshi// CHECK: func private @memref_with_vector_elems(memref<1x?xvector<10xf32>>) 1406a99d290SRiver Riddlefunc.func private @memref_with_vector_elems(memref<1x?xvector<10xf32>>) 1417e5d8a34SAlexander Belyaev 142ada9aa5aSAlex Zinenko// CHECK: func private @memref_with_custom_elem(memref<1x?x!test.memref_element>) 1436a99d290SRiver Riddlefunc.func private @memref_with_custom_elem(memref<1x?x!test.memref_element>) 144ada9aa5aSAlex Zinenko 145c59ce1f6SAlex Zinenko// CHECK: func private @memref_of_memref(memref<1xmemref<1xf64>>) 1466a99d290SRiver Riddlefunc.func private @memref_of_memref(memref<1xmemref<1xf64>>) 147c59ce1f6SAlex Zinenko 148c59ce1f6SAlex Zinenko// CHECK: func private @memref_of_unranked_memref(memref<1xmemref<*xf32>>) 1496a99d290SRiver Riddlefunc.func private @memref_of_unranked_memref(memref<1xmemref<*xf32>>) 150c59ce1f6SAlex Zinenko 151c59ce1f6SAlex Zinenko// CHECK: func private @unranked_memref_of_memref(memref<*xmemref<1xf32>>) 1526a99d290SRiver Riddlefunc.func private @unranked_memref_of_memref(memref<*xmemref<1xf32>>) 153c59ce1f6SAlex Zinenko 154c59ce1f6SAlex Zinenko// CHECK: func private @unranked_memref_of_unranked_memref(memref<*xmemref<*xi32>>) 1556a99d290SRiver Riddlefunc.func private @unranked_memref_of_unranked_memref(memref<*xmemref<*xi32>>) 156c59ce1f6SAlex Zinenko 157b7382ed3SRahul Joshi// CHECK: func private @unranked_memref_with_complex_elems(memref<*xcomplex<f32>>) 1586a99d290SRiver Riddlefunc.func private @unranked_memref_with_complex_elems(memref<*xcomplex<f32>>) 1597e5d8a34SAlexander Belyaev 160b7382ed3SRahul Joshi// CHECK: func private @unranked_memref_with_index_elems(memref<*xindex>) 1616a99d290SRiver Riddlefunc.func private @unranked_memref_with_index_elems(memref<*xindex>) 162b0d76f45SSean Silva 163b7382ed3SRahul Joshi// CHECK: func private @unranked_memref_with_vector_elems(memref<*xvector<10xf32>>) 1646a99d290SRiver Riddlefunc.func private @unranked_memref_with_vector_elems(memref<*xvector<10xf32>>) 165b0d76f45SSean Silva 16689bc449cSRiver Riddle// CHECK-LABEL: func @simpleCFG(%{{.*}}: i32, %{{.*}}: f32) -> i1 { 1676a99d290SRiver Riddlefunc.func @simpleCFG(%arg0: i32, %f: f32) -> i1 { 16889bc449cSRiver Riddle // CHECK: %{{.*}} = "foo"() : () -> i64 16972c24e3eSChris Lattner %1 = "foo"() : ()->i64 17089bc449cSRiver Riddle // CHECK: "bar"(%{{.*}}) : (i64) -> (i1, i1, i1) 17101140bd1SRiver Riddle %2:3 = "bar"(%1) : (i64) -> (i1,i1,i1) 17289bc449cSRiver Riddle // CHECK: return %{{.*}}#1 17321ede32fSChris Lattner return %2#1 : i1 174b3fa7d0eSChris Lattner// CHECK: } 175b3fa7d0eSChris Lattner} 17680b6bd24SChris Lattner 17789bc449cSRiver Riddle// CHECK-LABEL: func @simpleCFGUsingBBArgs(%{{.*}}: i32, %{{.*}}: i64) { 1786a99d290SRiver Riddlefunc.func @simpleCFGUsingBBArgs(i32, i64) { 17937579ae8SChris Lattner^bb42 (%arg0: i32, %f: i64): 18089bc449cSRiver Riddle // CHECK: "bar"(%{{.*}}) : (i64) -> (i1, i1, i1) 18101140bd1SRiver Riddle %2:3 = "bar"(%f) : (i64) -> (i1,i1,i1) 1826472f5fbSJames Molloy // CHECK: return{{$}} 1834144c302SJames Molloy return 1844144c302SJames Molloy// CHECK: } 1854144c302SJames Molloy} 1864144c302SJames Molloy 187aea31f62SUday Bondhugula// CHECK-LABEL: func @block_label_empty_list 1886a99d290SRiver Riddlefunc.func @block_label_empty_list() { 189aea31f62SUday Bondhugula^bb0(): 190aea31f62SUday Bondhugula return 191aea31f62SUday Bondhugula} 192aea31f62SUday Bondhugula 193bbf362b7SChris Lattner// CHECK-LABEL: func @multiblock() { 1946a99d290SRiver Riddlefunc.func @multiblock() { 195c4f35a66SChris Lattner return // CHECK: return 19637579ae8SChris Lattner^bb1: // CHECK: ^bb1: // no predecessors 197ace01605SRiver Riddle cf.br ^bb4 // CHECK: cf.br ^bb3 19837579ae8SChris Lattner^bb2: // CHECK: ^bb2: // pred: ^bb2 199ace01605SRiver Riddle cf.br ^bb2 // CHECK: cf.br ^bb2 20037579ae8SChris Lattner^bb4: // CHECK: ^bb3: // pred: ^bb1 201c4f35a66SChris Lattner return // CHECK: return 202c4f35a66SChris Lattner} // CHECK: } 2033609599aSTatiana Shpeisman 204bbf362b7SChris Lattner// CHECK-LABEL: func @emptyMLF() { 2056a99d290SRiver Riddlefunc.func @emptyMLF() { 206c4f35a66SChris Lattner return // CHECK: return 207c4f35a66SChris Lattner} // CHECK: } 2083609599aSTatiana Shpeisman 20989bc449cSRiver Riddle// CHECK-LABEL: func @func_with_one_arg(%{{.*}}: i1) -> i2 { 2106a99d290SRiver Riddlefunc.func @func_with_one_arg(%c : i1) -> i2 { 21189bc449cSRiver Riddle // CHECK: %{{.*}} = "foo"(%{{.*}}) : (i1) -> i2 212a0a6414cSTatiana Shpeisman %b = "foo"(%c) : (i1) -> (i2) 21389bc449cSRiver Riddle return %b : i2 // CHECK: return %{{.*}} : i2 2144e289a47STatiana Shpeisman} // CHECK: } 215a0a6414cSTatiana Shpeisman 21689bc449cSRiver Riddle// CHECK-LABEL: func @func_with_two_args(%{{.*}}: f16, %{{.*}}: i8) -> (i1, i32) { 2176a99d290SRiver Riddlefunc.func @func_with_two_args(%a : f16, %b : i8) -> (i1, i32) { 21889bc449cSRiver Riddle // CHECK: %{{.*}}:2 = "foo"(%{{.*}}, %{{.*}}) : (f16, i8) -> (i1, i32) 21901140bd1SRiver Riddle %c:2 = "foo"(%a, %b) : (f16, i8)->(i1, i32) 22089bc449cSRiver Riddle return %c#0, %c#1 : i1, i32 // CHECK: return %{{.*}}#0, %{{.*}}#1 : i1, i32 2214e289a47STatiana Shpeisman} // CHECK: } 2226ada91dbSTatiana Shpeisman 22340d5d09fSAlex Zinenko// CHECK-LABEL: func @second_order_func() -> (() -> ()) { 2246a99d290SRiver Riddlefunc.func @second_order_func() -> (() -> ()) { 22589bc449cSRiver Riddle// CHECK-NEXT: %{{.*}} = constant @emptyMLF : () -> () 22640d5d09fSAlex Zinenko %c = constant @emptyMLF : () -> () 22789bc449cSRiver Riddle// CHECK-NEXT: return %{{.*}} : () -> () 22840d5d09fSAlex Zinenko return %c : () -> () 22940d5d09fSAlex Zinenko} 23040d5d09fSAlex Zinenko 23140d5d09fSAlex Zinenko// CHECK-LABEL: func @third_order_func() -> (() -> (() -> ())) { 2326a99d290SRiver Riddlefunc.func @third_order_func() -> (() -> (() -> ())) { 23389bc449cSRiver Riddle// CHECK-NEXT: %{{.*}} = constant @second_order_func : () -> (() -> ()) 23440d5d09fSAlex Zinenko %c = constant @second_order_func : () -> (() -> ()) 23589bc449cSRiver Riddle// CHECK-NEXT: return %{{.*}} : () -> (() -> ()) 23640d5d09fSAlex Zinenko return %c : () -> (() -> ()) 23740d5d09fSAlex Zinenko} 23840d5d09fSAlex Zinenko 23989bc449cSRiver Riddle// CHECK-LABEL: func @identity_functor(%{{.*}}: () -> ()) -> (() -> ()) { 2406a99d290SRiver Riddlefunc.func @identity_functor(%a : () -> ()) -> (() -> ()) { 24189bc449cSRiver Riddle// CHECK-NEXT: return %{{.*}} : () -> () 24240d5d09fSAlex Zinenko return %a : () -> () 24340d5d09fSAlex Zinenko} 24440d5d09fSAlex Zinenko 245bbf362b7SChris Lattner// CHECK-LABEL: func @func_ops_in_loop() { 2466a99d290SRiver Riddlefunc.func @func_ops_in_loop() { 24789bc449cSRiver Riddle // CHECK: %{{.*}} = "foo"() : () -> i64 2489ebd3c7dSTatiana Shpeisman %a = "foo"() : ()->i64 24989bc449cSRiver Riddle // CHECK: affine.for %{{.*}} = 1 to 10 { 250832567b3SRiver Riddle affine.for %i = 1 to 10 { 25189bc449cSRiver Riddle // CHECK: %{{.*}} = "doo"() : () -> f32 2529ebd3c7dSTatiana Shpeisman %b = "doo"() : ()->f32 25389bc449cSRiver Riddle // CHECK: "bar"(%{{.*}}, %{{.*}}) : (i64, f32) -> () 2549ebd3c7dSTatiana Shpeisman "bar"(%a, %b) : (i64, f32) -> () 2559ebd3c7dSTatiana Shpeisman // CHECK: } 2569ebd3c7dSTatiana Shpeisman } 2579ebd3c7dSTatiana Shpeisman // CHECK: return 2589ebd3c7dSTatiana Shpeisman return 2599ebd3c7dSTatiana Shpeisman // CHECK: } 2609ebd3c7dSTatiana Shpeisman} 2619ebd3c7dSTatiana Shpeisman 2629ebd3c7dSTatiana Shpeisman 263bbf362b7SChris Lattner// CHECK-LABEL: func @loops() { 2646a99d290SRiver Riddlefunc.func @loops() { 26589bc449cSRiver Riddle // CHECK: affine.for %{{.*}} = 1 to 100 step 2 { 266832567b3SRiver Riddle affine.for %i = 1 to 100 step 2 { 26789bc449cSRiver Riddle // CHECK: affine.for %{{.*}} = 1 to 200 { 268832567b3SRiver Riddle affine.for %j = 1 to 200 { 269c4f35a66SChris Lattner } // CHECK: } 270c4f35a66SChris Lattner } // CHECK: } 271c4f35a66SChris Lattner return // CHECK: return 272c4f35a66SChris Lattner} // CHECK: } 273177ce721STatiana Shpeisman 274bbf362b7SChris Lattner// CHECK-LABEL: func @complex_loops() { 2756a99d290SRiver Riddlefunc.func @complex_loops() { 27689bc449cSRiver Riddle affine.for %i1 = 1 to 100 { // CHECK: affine.for %{{.*}} = 1 to 100 { 27789bc449cSRiver Riddle affine.for %j1 = 1 to 100 { // CHECK: affine.for %{{.*}} = 1 to 100 { 27889bc449cSRiver Riddle // CHECK: "foo"(%{{.*}}, %{{.*}}) : (index, index) -> () 279d2d89cbcSChris Lattner "foo"(%i1, %j1) : (index,index) -> () 280c8b0273fSTatiana Shpeisman } // CHECK: } 281c8b0273fSTatiana Shpeisman "boo"() : () -> () // CHECK: "boo"() : () -> () 28289bc449cSRiver Riddle affine.for %j2 = 1 to 10 { // CHECK: affine.for %{{.*}} = 1 to 10 { 28389bc449cSRiver Riddle affine.for %k2 = 1 to 10 { // CHECK: affine.for %{{.*}} = 1 to 10 { 284c8b0273fSTatiana Shpeisman "goo"() : () -> () // CHECK: "goo"() : () -> () 285c8b0273fSTatiana Shpeisman } // CHECK: } 286c8b0273fSTatiana Shpeisman } // CHECK: } 287c8b0273fSTatiana Shpeisman } // CHECK: } 288c8b0273fSTatiana Shpeisman return // CHECK: return 289c8b0273fSTatiana Shpeisman} // CHECK: } 290c8b0273fSTatiana Shpeisman 29189bc449cSRiver Riddle// CHECK: func @triang_loop(%{{.*}}: index, %{{.*}}: memref<?x?xi32>) { 2926a99d290SRiver Riddlefunc.func @triang_loop(%arg0: index, %arg1: memref<?x?xi32>) { 293a54f4eaeSMogball %c = arith.constant 0 : i32 // CHECK: %{{.*}} = arith.constant 0 : i32 29489bc449cSRiver Riddle affine.for %i0 = 1 to %arg0 { // CHECK: affine.for %{{.*}} = 1 to %{{.*}} { 295c8496d29SRiver Riddle affine.for %i1 = affine_map<(d0)[]->(d0)>(%i0)[] to %arg0 { // CHECK: affine.for %{{.*}} = #map{{[0-9]*}}(%{{.*}}) to %{{.*}} { 296e2310704SJulian Gross memref.store %c, %arg1[%i0, %i1] : memref<?x?xi32> // CHECK: memref.store %{{.*}}, %{{.*}}[%{{.*}}, %{{.*}}] 297d32a28c5STatiana Shpeisman } // CHECK: } 298d32a28c5STatiana Shpeisman } // CHECK: } 299d32a28c5STatiana Shpeisman return // CHECK: return 300d32a28c5STatiana Shpeisman} // CHECK: } 301d32a28c5STatiana Shpeisman 30289bc449cSRiver Riddle// CHECK: func @minmax_loop(%{{.*}}: index, %{{.*}}: index, %{{.*}}: memref<100xf32>) { 3036a99d290SRiver Riddlefunc.func @minmax_loop(%arg0: index, %arg1: index, %arg2: memref<100xf32>) { 30489bc449cSRiver Riddle // CHECK: affine.for %{{.*}} = max #map{{.*}}()[%{{.*}}] to min #map{{.*}}()[%{{.*}}] { 3054268e4f4SRiver Riddle affine.for %i0 = max affine_map<()[s]->(0,s-1)>()[%arg0] to min affine_map<()[s]->(100,s+1)>()[%arg1] { 30689bc449cSRiver Riddle // CHECK: "foo"(%{{.*}}, %{{.*}}) : (memref<100xf32>, index) -> () 307d2d89cbcSChris Lattner "foo"(%arg2, %i0) : (memref<100xf32>, index) -> () 308d32a28c5STatiana Shpeisman } // CHECK: } 309d32a28c5STatiana Shpeisman return // CHECK: return 310d32a28c5STatiana Shpeisman} // CHECK: } 311d32a28c5STatiana Shpeisman 31289bc449cSRiver Riddle// CHECK-LABEL: func @loop_bounds(%{{.*}}: index) { 3136a99d290SRiver Riddlefunc.func @loop_bounds(%N : index) { 31489bc449cSRiver Riddle // CHECK: %{{.*}} = "foo"(%{{.*}}) : (index) -> index 315d2d89cbcSChris Lattner %s = "foo"(%N) : (index) -> index 31689bc449cSRiver Riddle // CHECK: affine.for %{{.*}} = %{{.*}} to %{{.*}} 317832567b3SRiver Riddle affine.for %i = %s to %N { 318c8496d29SRiver Riddle // CHECK: affine.for %{{.*}} = #map{{[0-9]*}}(%{{.*}}) to 0 3194268e4f4SRiver Riddle affine.for %j = affine_map<(d0)[]->(d0)>(%i)[] to 0 step 1 { 32089bc449cSRiver Riddle // CHECK: %{{.*}} = affine.apply #map{{.*}}(%{{.*}}, %{{.*}})[%{{.*}}] 3214268e4f4SRiver Riddle %w1 = affine.apply affine_map<(d0, d1)[s0] -> (d0+d1)> (%i, %j) [%s] 32289bc449cSRiver Riddle // CHECK: %{{.*}} = affine.apply #map{{.*}}(%{{.*}}, %{{.*}})[%{{.*}}] 3234268e4f4SRiver Riddle %w2 = affine.apply affine_map<(d0, d1)[s0] -> (s0+1)> (%i, %j) [%s] 32489bc449cSRiver Riddle // CHECK: affine.for %{{.*}} = #map{{.*}}(%{{.*}}, %{{.*}})[%{{.*}}] to #map{{.*}}(%{{.*}}, %{{.*}})[%{{.*}}] { 3254268e4f4SRiver Riddle affine.for %k = #bound_map1 (%w1, %i)[%N] to affine_map<(i, j)[s] -> (i + j + s)> (%w2, %j)[%s] { 32689bc449cSRiver Riddle // CHECK: "foo"(%{{.*}}, %{{.*}}, %{{.*}}) : (index, index, index) -> () 327d2d89cbcSChris Lattner "foo"(%i, %j, %k) : (index, index, index)->() 328a54f4eaeSMogball // CHECK: %{{.*}} = arith.constant 30 : index 329a54f4eaeSMogball %c = arith.constant 30 : index 33089bc449cSRiver Riddle // CHECK: %{{.*}} = affine.apply #map{{.*}}(%{{.*}}, %{{.*}}) 3314268e4f4SRiver Riddle %u = affine.apply affine_map<(d0, d1)->(d0+d1)> (%N, %c) 33289bc449cSRiver Riddle // CHECK: affine.for %{{.*}} = max #map{{.*}}(%{{.*}})[%{{.*}}] to min #map{{.*}}(%{{.*}})[%{{.*}}] { 333832567b3SRiver Riddle affine.for %l = max #bound_map2(%i)[%u] to min #bound_map2(%k)[%c] { 33489bc449cSRiver Riddle // CHECK: "bar"(%{{.*}}) : (index) -> () 335d2d89cbcSChris Lattner "bar"(%l) : (index) -> () 336d32a28c5STatiana Shpeisman } // CHECK: } 337d32a28c5STatiana Shpeisman } // CHECK: } 338d32a28c5STatiana Shpeisman } // CHECK: } 339d32a28c5STatiana Shpeisman } // CHECK: } 340d32a28c5STatiana Shpeisman return // CHECK: return 341d32a28c5STatiana Shpeisman} // CHECK: } 342d32a28c5STatiana Shpeisman 34389bc449cSRiver Riddle// CHECK-LABEL: func @ifinst(%{{.*}}: index) { 3446a99d290SRiver Riddlefunc.func @ifinst(%N: index) { 345*a5985ca5Sklensy %c = arith.constant 200 : index // CHECK: %{{.*}} = arith.constant 200 346*a5985ca5Sklensy affine.for %i = 1 to 10 { // CHECK: affine.for %{{.*}} = 1 to 10 { 347*a5985ca5Sklensy affine.if #set0(%i)[%N, %c] { // CHECK: affine.if #set(%{{.*}})[%{{.*}}, %{{.*}}] { 348a54f4eaeSMogball %x = arith.constant 1 : i32 349a54f4eaeSMogball // CHECK: %{{.*}} = arith.constant 1 : i32 35089bc449cSRiver Riddle %y = "add"(%x, %i) : (i32, index) -> i32 // CHECK: %{{.*}} = "add"(%{{.*}}, %{{.*}}) : (i32, index) -> i32 35189bc449cSRiver Riddle %z = "mul"(%y, %y) : (i32, i32) -> i32 // CHECK: %{{.*}} = "mul"(%{{.*}}, %{{.*}}) : (i32, i32) -> i32 35275553832SRiver Riddle } else { // CHECK } else { 353*a5985ca5Sklensy affine.if affine_set<(i)[N] : (i - 2 >= 0, 4 - i >= 0)>(%i)[%N] { // CHECK: affine.if #set1(%{{.*}})[%{{.*}}] { 354a54f4eaeSMogball // CHECK: %{{.*}} = arith.constant 1 : index 355a54f4eaeSMogball %u = arith.constant 1 : index 35689bc449cSRiver Riddle // CHECK: %{{.*}} = affine.apply #map{{.*}}(%{{.*}}, %{{.*}})[%{{.*}}] 3574268e4f4SRiver Riddle %w = affine.apply affine_map<(d0,d1)[s0] -> (d0+d1+s0)> (%i, %i) [%u] 358c4f35a66SChris Lattner } else { // CHECK } else { 359a54f4eaeSMogball %v = arith.constant 3 : i32 // %c3_i32 = arith.constant 3 : i32 36075553832SRiver Riddle } 361*a5985ca5Sklensy } // CHECK: } 362*a5985ca5Sklensy } // CHECK: } 363*a5985ca5Sklensy return // CHECK: return 364*a5985ca5Sklensy} // CHECK:} 365b0dabbd6SChris Lattner 36689bc449cSRiver Riddle// CHECK-LABEL: func @simple_ifinst(%{{.*}}: index) { 3676a99d290SRiver Riddlefunc.func @simple_ifinst(%N: index) { 368*a5985ca5Sklensy %c = arith.constant 200 : index // CHECK: %{{.*}} = arith.constant 200 369*a5985ca5Sklensy affine.for %i = 1 to 10 { // CHECK: affine.for %{{.*}} = 1 to 10 { 370*a5985ca5Sklensy affine.if #set0(%i)[%N, %c] { // CHECK: affine.if #set(%{{.*}})[%{{.*}}, %{{.*}}] { 371a54f4eaeSMogball %x = arith.constant 1 : i32 372a54f4eaeSMogball // CHECK: %{{.*}} = arith.constant 1 : i32 37389bc449cSRiver Riddle %y = "add"(%x, %i) : (i32, index) -> i32 // CHECK: %{{.*}} = "add"(%{{.*}}, %{{.*}}) : (i32, index) -> i32 37489bc449cSRiver Riddle %z = "mul"(%y, %y) : (i32, i32) -> i32 // CHECK: %{{.*}} = "mul"(%{{.*}}, %{{.*}}) : (i32, i32) -> i32 375*a5985ca5Sklensy } // CHECK: } 376*a5985ca5Sklensy } // CHECK: } 377*a5985ca5Sklensy return // CHECK: return 378*a5985ca5Sklensy} // CHECK:} 3798a663870SUday Bondhugula 380bbf362b7SChris Lattner// CHECK-LABEL: func @attributes() { 3816a99d290SRiver Riddlefunc.func @attributes() { 382c4f35a66SChris Lattner // CHECK: "foo"() 383b3fa7d0eSChris Lattner "foo"(){} : ()->() 384b0dabbd6SChris Lattner 385679a3b41SRiver Riddle // CHECK: "foo"() {a = 1 : i64, b = -423 : i64, c = [true, false], d = 1.600000e+01 : f64} : () -> () 386679a3b41SRiver Riddle "foo"() {a = 1, b = -423, c = [true, false], d = 16.0 } : () -> () 387b0dabbd6SChris Lattner 388c8496d29SRiver Riddle // CHECK: "foo"() {map1 = #map{{[0-9]*}}} 389679a3b41SRiver Riddle "foo"() {map1 = #map1} : () -> () 390f1e03961SMLIR Team 391c8496d29SRiver Riddle // CHECK: "foo"() {map2 = #map{{[0-9]*}}} 3924268e4f4SRiver Riddle "foo"() {map2 = affine_map<(d0, d1, d2) -> (d0, d1, d2)>} : () -> () 393f1e03961SMLIR Team 394c8496d29SRiver Riddle // CHECK: "foo"() {map12 = [#map{{[0-9]*}}, #map{{[0-9]*}}]} 395679a3b41SRiver Riddle "foo"() {map12 = [#map1, #map2]} : () -> () 396f1e03961SMLIR Team 397c8496d29SRiver Riddle // CHECK: "foo"() {set1 = #set{{[0-9]*}}} 398679a3b41SRiver Riddle "foo"() {set1 = #set1} : () -> () 399ea65c695SUday Bondhugula 400c8496d29SRiver Riddle // CHECK: "foo"() {set2 = #set{{[0-9]*}}} 4014268e4f4SRiver Riddle "foo"() {set2 = affine_set<(d0, d1, d2) : (d0 >= 0, d1 >= 0, d2 - d1 == 0)>} : () -> () 402ea65c695SUday Bondhugula 403c8496d29SRiver Riddle // CHECK: "foo"() {set12 = [#set{{[0-9]*}}, #set{{[0-9]*}}]} 404679a3b41SRiver Riddle "foo"() {set12 = [#set1, #set2]} : () -> () 405ea65c695SUday Bondhugula 406679a3b41SRiver Riddle // CHECK: "foo"() {dictionary = {bool = true, fn = @ifinst}} 407679a3b41SRiver Riddle "foo"() {dictionary = {bool = true, fn = @ifinst}} : () -> () 40894541563SRiver Riddle 40994541563SRiver Riddle // Check that the dictionary attribute elements are sorted. 410679a3b41SRiver Riddle // CHECK: "foo"() {dictionary = {bar = false, bool = true, fn = @ifinst}} 411679a3b41SRiver Riddle "foo"() {dictionary = {fn = @ifinst, bar = false, bool = true}} : () -> () 41294541563SRiver Riddle 413679a3b41SRiver Riddle // CHECK: "foo"() {d = 1.000000e-09 : f64, func = [], i123 = 7 : i64, if = "foo"} : () -> () 414679a3b41SRiver Riddle "foo"() {if = "foo", func = [], i123 = 7, d = 1.e-9} : () -> () 415b0dabbd6SChris Lattner 416679a3b41SRiver Riddle // CHECK: "foo"() {fn = @attributes, if = @ifinst} : () -> () 417679a3b41SRiver Riddle "foo"() {fn = @attributes, if = @ifinst} : () -> () 4183fa22b88SAlex Zinenko 419679a3b41SRiver Riddle // CHECK: "foo"() {int = 0 : i42} : () -> () 420679a3b41SRiver Riddle "foo"() {int = 0 : i42} : () -> () 4211928e20aSChris Lattner return 4221928e20aSChris Lattner} 423b0dabbd6SChris Lattner 424bbf362b7SChris Lattner// CHECK-LABEL: func @ssa_values() -> (i16, i8) { 4256a99d290SRiver Riddlefunc.func @ssa_values() -> (i16, i8) { 42689bc449cSRiver Riddle // CHECK: %{{.*}}:2 = "foo"() : () -> (i1, i17) 42701140bd1SRiver Riddle %0:2 = "foo"() : () -> (i1, i17) 428ace01605SRiver Riddle cf.br ^bb2 4293d2a2463SChris Lattner 43037579ae8SChris Lattner^bb1: // CHECK: ^bb1: // pred: ^bb2 43189bc449cSRiver Riddle // CHECK: %{{.*}}:2 = "baz"(%{{.*}}#1, %{{.*}}#0, %{{.*}}#1) : (f32, i11, i17) -> (i16, i8) 43201140bd1SRiver Riddle %1:2 = "baz"(%2#1, %2#0, %0#1) : (f32, i11, i17) -> (i16, i8) 433e402dcc4SChris Lattner 43489bc449cSRiver Riddle // CHECK: return %{{.*}}#0, %{{.*}}#1 : i16, i8 4354331e5feSChris Lattner return %1#0, %1#1 : i16, i8 4363d2a2463SChris Lattner 43737579ae8SChris Lattner^bb2: // CHECK: ^bb2: // pred: ^bb0 43889bc449cSRiver Riddle // CHECK: %{{.*}}:2 = "bar"(%{{.*}}#0, %{{.*}}#1) : (i1, i17) -> (i11, f32) 43901140bd1SRiver Riddle %2:2 = "bar"(%0#0, %0#1) : (i1, i17) -> (i11, f32) 440ace01605SRiver Riddle cf.br ^bb1 4413d2a2463SChris Lattner} 44221ede32fSChris Lattner 443bbf362b7SChris Lattner// CHECK-LABEL: func @bbargs() -> (i16, i8) { 4446a99d290SRiver Riddlefunc.func @bbargs() -> (i16, i8) { 44589bc449cSRiver Riddle // CHECK: %{{.*}}:2 = "foo"() : () -> (i1, i17) 44601140bd1SRiver Riddle %0:2 = "foo"() : () -> (i1, i17) 447ace01605SRiver Riddle cf.br ^bb1(%0#1, %0#0 : i17, i1) 44821ede32fSChris Lattner 44989bc449cSRiver Riddle^bb1(%x: i17, %y: i1): // CHECK: ^bb1(%{{.*}}: i17, %{{.*}}: i1): 45089bc449cSRiver Riddle // CHECK: %{{.*}}:2 = "baz"(%{{.*}}, %{{.*}}, %{{.*}}#1) : (i17, i1, i17) -> (i16, i8) 45101140bd1SRiver Riddle %1:2 = "baz"(%x, %y, %0#1) : (i17, i1, i17) -> (i16, i8) 4524331e5feSChris Lattner return %1#0, %1#1 : i16, i8 45321ede32fSChris Lattner} 454f7f70ee6SJames Molloy 4556ce30becSAlex Zinenko// CHECK-LABEL: func @verbose_terminators() -> (i1, i17) 4566a99d290SRiver Riddlefunc.func @verbose_terminators() -> (i1, i17) { 45701140bd1SRiver Riddle %0:2 = "foo"() : () -> (i1, i17) 458ace01605SRiver Riddle// CHECK: cf.br ^bb1(%{{.*}}#0, %{{.*}}#1 : i1, i17) 459ace01605SRiver Riddle "cf.br"(%0#0, %0#1)[^bb1] : (i1, i17) -> () 4606ce30becSAlex Zinenko 4616ce30becSAlex Zinenko^bb1(%x : i1, %y : i17): 462ace01605SRiver Riddle// CHECK: cf.cond_br %{{.*}}, ^bb2(%{{.*}} : i17), ^bb3(%{{.*}}, %{{.*}} : i1, i17) 463363b6559SMehdi Amini "cf.cond_br"(%x, %y, %x, %y) [^bb2, ^bb3] {operandSegmentSizes = array<i32: 1, 1, 2>} : (i1, i17, i1, i17) -> () 4646ce30becSAlex Zinenko 4656ce30becSAlex Zinenko^bb2(%a : i17): 466a54f4eaeSMogball %true = arith.constant true 46789bc449cSRiver Riddle// CHECK: return %{{.*}}, %{{.*}} : i1, i17 46823aa5a74SRiver Riddle "func.return"(%true, %a) : (i1, i17) -> () 4696ce30becSAlex Zinenko 4706ce30becSAlex Zinenko^bb3(%b : i1, %c : i17): 47189bc449cSRiver Riddle// CHECK: return %{{.*}}, %{{.*}} : i1, i17 47223aa5a74SRiver Riddle "func.return"(%b, %c) : (i1, i17) -> () 4736ce30becSAlex Zinenko} 4746ce30becSAlex Zinenko 475bbf362b7SChris Lattner// CHECK-LABEL: func @condbr_simple 4766a99d290SRiver Riddlefunc.func @condbr_simple() -> (i32) { 477f7f70ee6SJames Molloy %cond = "foo"() : () -> i1 478f7f70ee6SJames Molloy %a = "bar"() : () -> i32 479f7f70ee6SJames Molloy %b = "bar"() : () -> i64 480ace01605SRiver Riddle // CHECK: cf.cond_br %{{.*}}, ^bb1(%{{.*}} : i32), ^bb2(%{{.*}} : i64) 481ace01605SRiver Riddle cf.cond_br %cond, ^bb1(%a : i32), ^bb2(%b : i64) 482f7f70ee6SJames Molloy 48337579ae8SChris Lattner// CHECK: ^bb1({{.*}}: i32): // pred: ^bb0 48437579ae8SChris Lattner^bb1(%x : i32): 485ace01605SRiver Riddle cf.br ^bb2(%b: i64) 486f7f70ee6SJames Molloy 48737579ae8SChris Lattner// CHECK: ^bb2({{.*}}: i64): // 2 preds: ^bb0, ^bb1 48837579ae8SChris Lattner^bb2(%y : i64): 489f7f70ee6SJames Molloy %z = "foo"() : () -> i32 490f7f70ee6SJames Molloy return %z : i32 491f7f70ee6SJames Molloy} 492f7f70ee6SJames Molloy 493bbf362b7SChris Lattner// CHECK-LABEL: func @condbr_moarargs 4946a99d290SRiver Riddlefunc.func @condbr_moarargs() -> (i32) { 495f7f70ee6SJames Molloy %cond = "foo"() : () -> i1 496f7f70ee6SJames Molloy %a = "bar"() : () -> i32 497f7f70ee6SJames Molloy %b = "bar"() : () -> i64 498ace01605SRiver Riddle // CHECK: cf.cond_br %{{.*}}, ^bb1(%{{.*}}, %{{.*}} : i32, i64), ^bb2(%{{.*}}, %{{.*}}, %{{.*}} : i64, i32, i32) 499ace01605SRiver Riddle cf.cond_br %cond, ^bb1(%a, %b : i32, i64), ^bb2(%b, %a, %a : i64, i32, i32) 500f7f70ee6SJames Molloy 50137579ae8SChris Lattner^bb1(%x : i32, %y : i64): 502f7f70ee6SJames Molloy return %x : i32 503f7f70ee6SJames Molloy 50437579ae8SChris Lattner^bb2(%x2 : i64, %y2 : i32, %z2 : i32): 505f7f70ee6SJames Molloy %z = "foo"() : () -> i32 506f7f70ee6SJames Molloy return %z : i32 507f7f70ee6SJames Molloy} 5088eaf3827SChris Lattner 5098eaf3827SChris Lattner 5108eaf3827SChris Lattner// Test pretty printing of constant names. 511bbf362b7SChris Lattner// CHECK-LABEL: func @constants 5126a99d290SRiver Riddlefunc.func @constants() -> (i32, i23, i23, i1, i1) { 513a54f4eaeSMogball // CHECK: %{{.*}} = arith.constant 42 : i32 514a54f4eaeSMogball %x = arith.constant 42 : i32 515a54f4eaeSMogball // CHECK: %{{.*}} = arith.constant 17 : i23 516a54f4eaeSMogball %y = arith.constant 17 : i23 5178eaf3827SChris Lattner 5188eaf3827SChris Lattner // This is a redundant definition of 17, the asmprinter gives it a unique name 519a54f4eaeSMogball // CHECK: %{{.*}} = arith.constant 17 : i23 520a54f4eaeSMogball %z = arith.constant 17 : i23 5218eaf3827SChris Lattner 522a54f4eaeSMogball // CHECK: %{{.*}} = arith.constant true 523a54f4eaeSMogball %t = arith.constant true 524a54f4eaeSMogball // CHECK: %{{.*}} = arith.constant false 525a54f4eaeSMogball %f = arith.constant false 526fc1f2234SChris Lattner 52799b19c1dSAlex Zinenko // The trick to parse type declarations should not interfere with hex 52899b19c1dSAlex Zinenko // literals. 529a54f4eaeSMogball // CHECK: %{{.*}} = arith.constant 3890 : i32 530a54f4eaeSMogball %h = arith.constant 0xf32 : i32 53199b19c1dSAlex Zinenko 53289bc449cSRiver Riddle // CHECK: return %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}} 533fc1f2234SChris Lattner return %x, %y, %z, %t, %f : i32, i23, i23, i1, i1 5348eaf3827SChris Lattner} 5358eaf3827SChris Lattner 536bbf362b7SChris Lattner// CHECK-LABEL: func @typeattr 5376a99d290SRiver Riddlefunc.func @typeattr() -> () { 53837579ae8SChris Lattner^bb0: 539679a3b41SRiver Riddle// CHECK: "foo"() {bar = tensor<*xf32>} : () -> () 540679a3b41SRiver Riddle "foo"(){bar = tensor<*xf32>} : () -> () 54172645b31SJames Molloy return 54272645b31SJames Molloy} 543ab60afb2SJames Molloy 544bbf362b7SChris Lattner// CHECK-LABEL: func @stringquote 5456a99d290SRiver Riddlefunc.func @stringquote() -> () { 54637579ae8SChris Lattner^bb0: 547679a3b41SRiver Riddle // CHECK: "foo"() {bar = "a\22quoted\22string"} : () -> () 548679a3b41SRiver Riddle "foo"(){bar = "a\"quoted\"string"} : () -> () 549bda669beSRiver Riddle 550bda669beSRiver Riddle // CHECK-NEXT: "typed_string" : !foo.string 551bda669beSRiver Riddle "foo"(){bar = "typed_string" : !foo.string} : () -> () 552ab60afb2SJames Molloy return 553ab60afb2SJames Molloy} 554d6c4c748SChris Lattner 55522ad45a7SRiver Riddle// CHECK-LABEL: func @unitAttrs 5566a99d290SRiver Riddlefunc.func @unitAttrs() -> () { 55703d7be2aSRiver Riddle // CHECK-NEXT: "foo"() {unitAttr} 558679a3b41SRiver Riddle "foo"() {unitAttr = unit} : () -> () 55922ad45a7SRiver Riddle 56003d7be2aSRiver Riddle // CHECK-NEXT: "foo"() {unitAttr} 56122ad45a7SRiver Riddle "foo"() {unitAttr} : () -> () 56203d7be2aSRiver Riddle 56303d7be2aSRiver Riddle // CHECK-NEXT: "foo"() {nested = {unitAttr}} 56403d7be2aSRiver Riddle "foo"() {nested = {unitAttr}} : () -> () 56522ad45a7SRiver Riddle return 56622ad45a7SRiver Riddle} 56722ad45a7SRiver Riddle 568bbf362b7SChris Lattner// CHECK-LABEL: func @floatAttrs 5696a99d290SRiver Riddlefunc.func @floatAttrs() -> () { 57037579ae8SChris Lattner^bb0: 571679a3b41SRiver Riddle // CHECK: "foo"() {a = 4.000000e+00 : f64, b = 2.000000e+00 : f64, c = 7.100000e+00 : f64, d = -0.000000e+00 : f64} : () -> () 572679a3b41SRiver Riddle "foo"(){a = 4.0, b = 2.0, c = 7.1, d = -0.0} : () -> () 573d6c4c748SChris Lattner return 574d6c4c748SChris Lattner} 5757e004efaSFeng Liu 576b7382ed3SRahul Joshi// CHECK-LABEL: func private @externalfuncattr 5776a99d290SRiver Riddlefunc.func private @externalfuncattr() -> () 578679a3b41SRiver Riddle // CHECK: attributes {dialect.a = "a\22quoted\22string", dialect.b = 4.000000e+00 : f64, dialect.c = tensor<*xf32>} 579679a3b41SRiver Riddle attributes {dialect.a = "a\"quoted\"string", dialect.b = 4.0, dialect.c = tensor<*xf32>} 5807e004efaSFeng Liu 581b7382ed3SRahul Joshi// CHECK-LABEL: func private @funcattrempty 5826a99d290SRiver Riddlefunc.func private @funcattrempty() -> () 5837e004efaSFeng Liu attributes {} 5847e004efaSFeng Liu 585b7382ed3SRahul Joshi// CHECK-LABEL: func private @funcattr 5866a99d290SRiver Riddlefunc.func private @funcattr() -> () 587679a3b41SRiver Riddle // CHECK: attributes {dialect.a = "a\22quoted\22string", dialect.b = 4.000000e+00 : f64, dialect.c = tensor<*xf32>} 588679a3b41SRiver Riddle attributes {dialect.a = "a\"quoted\"string", dialect.b = 4.0, dialect.c = tensor<*xf32>} { 58937579ae8SChris Lattner^bb0: 5907e004efaSFeng Liu return 5917e004efaSFeng Liu} 5927e004efaSFeng Liu 593bbf362b7SChris Lattner// CHECK-LABEL: func @funcattrwithblock 5946a99d290SRiver Riddlefunc.func @funcattrwithblock() -> () 5957e004efaSFeng Liu attributes {} { 59637579ae8SChris Lattner^bb0: 5977e004efaSFeng Liu return 5987e004efaSFeng Liu} 5997e004efaSFeng Liu 600f0b0c025Sklensy// CHECK-LABEL: func @funcsimplemap 6014268e4f4SRiver Riddle#map_simple0 = affine_map<()[] -> (10)> 6024268e4f4SRiver Riddle#map_simple1 = affine_map<()[s0] -> (s0)> 6034268e4f4SRiver Riddle#map_non_simple0 = affine_map<(d0)[] -> (d0)> 6044268e4f4SRiver Riddle#map_non_simple1 = affine_map<(d0)[s0] -> (d0 + s0)> 6054268e4f4SRiver Riddle#map_non_simple2 = affine_map<()[s0, s1] -> (s0 + s1)> 6064268e4f4SRiver Riddle#map_non_simple3 = affine_map<()[s0] -> (s0 + 3)> 6076a99d290SRiver Riddlefunc.func @funcsimplemap(%arg0: index, %arg1: index) -> () { 608832567b3SRiver Riddle affine.for %i0 = 0 to #map_simple0()[] { 60989bc449cSRiver Riddle // CHECK: affine.for %{{.*}} = 0 to 10 { 610832567b3SRiver Riddle affine.for %i1 = 0 to #map_simple1()[%arg1] { 61189bc449cSRiver Riddle // CHECK: affine.for %{{.*}} = 0 to %{{.*}} { 612832567b3SRiver Riddle affine.for %i2 = 0 to #map_non_simple0(%i0)[] { 61389bc449cSRiver Riddle // CHECK: affine.for %{{.*}} = 0 to #map{{[a-z_0-9]*}}(%{{.*}}) { 614832567b3SRiver Riddle affine.for %i3 = 0 to #map_non_simple1(%i0)[%arg1] { 61589bc449cSRiver Riddle // CHECK: affine.for %{{.*}} = 0 to #map{{[a-z_0-9]*}}(%{{.*}})[%{{.*}}] { 616832567b3SRiver Riddle affine.for %i4 = 0 to #map_non_simple2()[%arg1, %arg0] { 61789bc449cSRiver Riddle // CHECK: affine.for %{{.*}} = 0 to #map{{[a-z_0-9]*}}()[%{{.*}}, %{{.*}}] { 618832567b3SRiver Riddle affine.for %i5 = 0 to #map_non_simple3()[%arg0] { 61989bc449cSRiver Riddle // CHECK: affine.for %{{.*}} = 0 to #map{{[a-z_0-9]*}}()[%{{.*}}] { 620a54f4eaeSMogball %c42_i32 = arith.constant 42 : i32 621f9e50199SNicolas Vasilache } 622f9e50199SNicolas Vasilache } 62354e5b4b4SNicolas Vasilache } 62454e5b4b4SNicolas Vasilache } 62554e5b4b4SNicolas Vasilache } 62654e5b4b4SNicolas Vasilache } 627f9e50199SNicolas Vasilache return 628f9e50199SNicolas Vasilache} 6295e3cca90SFeng Liu 630bbf362b7SChris Lattner// CHECK-LABEL: func @splattensorattr 6316a99d290SRiver Riddlefunc.func @splattensorattr() -> () { 63237579ae8SChris Lattner^bb0: 6339f498f92SLei Zhang // CHECK: "splatBoolTensor"() {bar = dense<false> : tensor<i1>} : () -> () 634679a3b41SRiver Riddle "splatBoolTensor"(){bar = dense<false> : tensor<i1>} : () -> () 6356d6ff729SRiver Riddle 636de5a81b1SRiver Riddle // CHECK: "splatUIntTensor"() {bar = dense<222> : tensor<2x1x4xui8>} : () -> () 637de5a81b1SRiver Riddle "splatUIntTensor"(){bar = dense<222> : tensor<2x1x4xui8>} : () -> () 638de5a81b1SRiver Riddle 639679a3b41SRiver Riddle // CHECK: "splatIntTensor"() {bar = dense<5> : tensor<2x1x4xi32>} : () -> () 640679a3b41SRiver Riddle "splatIntTensor"(){bar = dense<5> : tensor<2x1x4xi32>} : () -> () 6416d6ff729SRiver Riddle 642679a3b41SRiver Riddle // CHECK: "splatFloatTensor"() {bar = dense<-5.000000e+00> : tensor<2x1x4xf32>} : () -> () 643679a3b41SRiver Riddle "splatFloatTensor"(){bar = dense<-5.0> : tensor<2x1x4xf32>} : () -> () 6446d6ff729SRiver Riddle 645679a3b41SRiver Riddle // CHECK: "splatIntVector"() {bar = dense<5> : vector<2x1x4xi64>} : () -> () 646679a3b41SRiver Riddle "splatIntVector"(){bar = dense<5> : vector<2x1x4xi64>} : () -> () 6476d6ff729SRiver Riddle 648679a3b41SRiver Riddle // CHECK: "splatFloatVector"() {bar = dense<-5.000000e+00> : vector<2x1x4xf16>} : () -> () 649679a3b41SRiver Riddle "splatFloatVector"(){bar = dense<-5.0> : vector<2x1x4xf16>} : () -> () 650191aaa82SFeng Liu 651679a3b41SRiver Riddle // CHECK: "splatIntScalar"() {bar = dense<5> : tensor<i9>} : () -> () 652679a3b41SRiver Riddle "splatIntScalar"() {bar = dense<5> : tensor<i9>} : () -> () 653679a3b41SRiver Riddle // CHECK: "splatFloatScalar"() {bar = dense<-5.000000e+00> : tensor<f16>} : () -> () 654679a3b41SRiver Riddle "splatFloatScalar"() {bar = dense<-5.0> : tensor<f16>} : () -> () 6555e3cca90SFeng Liu return 6565e3cca90SFeng Liu} 657b5b90e54SFeng Liu 658bbf362b7SChris Lattner// CHECK-LABEL: func @densetensorattr 6596a99d290SRiver Riddlefunc.func @densetensorattr() -> () { 66037579ae8SChris Lattner^bb0: 661b5b90e54SFeng Liu 662b5b90e54SFeng Liu// NOTE: The {{\[\[}} syntax is because "[[" confuses FileCheck. 663679a3b41SRiver Riddle// CHECK: "fooi3"() {bar = dense<{{\[\[\[}}1, -2, 1, 2]], {{\[\[}}0, 2, -1, 2]]]> : tensor<2x1x4xi3>} : () -> () 664679a3b41SRiver Riddle "fooi3"(){bar = dense<[[[1, -2, 1, 2]], [[0, 2, -1, 2]]]> : tensor<2x1x4xi3>} : () -> () 665679a3b41SRiver Riddle// CHECK: "fooi6"() {bar = dense<{{\[\[\[}}5, -6, 1, 2]], {{\[\[}}7, 8, 3, 4]]]> : tensor<2x1x4xi6>} : () -> () 666679a3b41SRiver Riddle "fooi6"(){bar = dense<[[[5, -6, 1, 2]], [[7, 8, 3, 4]]]> : tensor<2x1x4xi6>} : () -> () 667679a3b41SRiver Riddle// CHECK: "fooi8"() {bar = dense<5> : tensor<1x1x1xi8>} : () -> () 668679a3b41SRiver Riddle "fooi8"(){bar = dense<[[[5]]]> : tensor<1x1x1xi8>} : () -> () 669679a3b41SRiver Riddle// CHECK: "fooi13"() {bar = dense<{{\[\[\[}}1, -2, 1, 2]], {{\[\[}}0, 2, -1, 2]]]> : tensor<2x1x4xi13>} : () -> () 670679a3b41SRiver Riddle "fooi13"(){bar = dense<[[[1, -2, 1, 2]], [[0, 2, -1, 2]]]> : tensor<2x1x4xi13>} : () -> () 671679a3b41SRiver Riddle// CHECK: "fooi16"() {bar = dense<-5> : tensor<1x1x1xi16>} : () -> () 672679a3b41SRiver Riddle "fooi16"(){bar = dense<[[[-5]]]> : tensor<1x1x1xi16>} : () -> () 673679a3b41SRiver Riddle// CHECK: "fooi23"() {bar = dense<{{\[\[\[}}1, -2, 1, 2]], {{\[\[}}0, 2, -1, 2]]]> : tensor<2x1x4xi23>} : () -> () 674679a3b41SRiver Riddle "fooi23"(){bar = dense<[[[1, -2, 1, 2]], [[0, 2, -1, 2]]]> : tensor<2x1x4xi23>} : () -> () 675679a3b41SRiver Riddle// CHECK: "fooi32"() {bar = dense<5> : tensor<1x1x1xi32>} : () -> () 676679a3b41SRiver Riddle "fooi32"(){bar = dense<[[[5]]]> : tensor<1x1x1xi32>} : () -> () 677679a3b41SRiver Riddle// CHECK: "fooi33"() {bar = dense<{{\[\[\[}}1, -2, 1, 2]], {{\[\[}}0, 2, -1, 2]]]> : tensor<2x1x4xi33>} : () -> () 678679a3b41SRiver Riddle "fooi33"(){bar = dense<[[[1, -2, 1, 2]], [[0, 2, -1, 2]]]> : tensor<2x1x4xi33>} : () -> () 679679a3b41SRiver Riddle// CHECK: "fooi43"() {bar = dense<{{\[\[\[}}1, -2, 1, 2]], {{\[\[}}0, 2, -1, 2]]]> : tensor<2x1x4xi43>} : () -> () 680679a3b41SRiver Riddle "fooi43"(){bar = dense<[[[1, -2, 1, 2]], [[0, 2, -1, 2]]]> : tensor<2x1x4xi43>} : () -> () 681679a3b41SRiver Riddle// CHECK: "fooi53"() {bar = dense<{{\[\[\[}}1, -2, 1, 2]], {{\[\[}}0, 2, -1, 2]]]> : tensor<2x1x4xi53>} : () -> () 682679a3b41SRiver Riddle "fooi53"(){bar = dense<[[[1, -2, 1, 2]], [[0, 2, -1, 2]]]> : tensor<2x1x4xi53>} : () -> () 683679a3b41SRiver Riddle// CHECK: "fooi64"() {bar = dense<{{\[\[\[}}1, -2, 1, 2]], {{\[\[}}0, 3, -1, 2]]]> : tensor<2x1x4xi64>} : () -> () 684679a3b41SRiver Riddle "fooi64"(){bar = dense<[[[1, -2, 1, 2]], [[0, 3, -1, 2]]]> : tensor<2x1x4xi64>} : () -> () 685679a3b41SRiver Riddle// CHECK: "fooi64"() {bar = dense<-5> : tensor<1x1x1xi64>} : () -> () 686679a3b41SRiver Riddle "fooi64"(){bar = dense<[[[-5]]]> : tensor<1x1x1xi64>} : () -> () 687679a3b41SRiver Riddle// CHECK: "fooi67"() {bar = dense<{{\[\[\[}}-5, 4, 6, 2]]]> : vector<1x1x4xi67>} : () -> () 688679a3b41SRiver Riddle "fooi67"(){bar = dense<[[[-5, 4, 6, 2]]]> : vector<1x1x4xi67>} : () -> () 689b5b90e54SFeng Liu 69024aa4effSRiver Riddle// CHECK: "foo2"() {bar = dense<> : tensor<0xi32>} : () -> () 69124aa4effSRiver Riddle "foo2"(){bar = dense<> : tensor<0xi32>} : () -> () 69224aa4effSRiver Riddle// CHECK: "foo2"() {bar = dense<> : tensor<1x0xi32>} : () -> () 69324aa4effSRiver Riddle "foo2"(){bar = dense<> : tensor<1x0xi32>} : () -> () 69424aa4effSRiver Riddle// CHECK: dense<> : tensor<0x512x512xi32> 69524aa4effSRiver Riddle "foo2"(){bar = dense<> : tensor<0x512x512xi32>} : () -> () 696679a3b41SRiver Riddle// CHECK: "foo3"() {bar = dense<{{\[\[\[}}5, -6, 1, 2]], {{\[\[}}7, 8, 3, 4]]]> : tensor<2x1x4xi32>} : () -> () 697679a3b41SRiver Riddle "foo3"(){bar = dense<[[[5, -6, 1, 2]], [[7, 8, 3, 4]]]> : tensor<2x1x4xi32>} : () -> () 698b5b90e54SFeng Liu 699679a3b41SRiver Riddle// CHECK: "float1"() {bar = dense<5.000000e+00> : tensor<1x1x1xf32>} : () -> () 700679a3b41SRiver Riddle "float1"(){bar = dense<[[[5.0]]]> : tensor<1x1x1xf32>} : () -> () 70124aa4effSRiver Riddle// CHECK: "float2"() {bar = dense<> : tensor<0xf32>} : () -> () 70224aa4effSRiver Riddle "float2"(){bar = dense<> : tensor<0xf32>} : () -> () 70324aa4effSRiver Riddle// CHECK: "float2"() {bar = dense<> : tensor<1x0xf32>} : () -> () 70424aa4effSRiver Riddle "float2"(){bar = dense<> : tensor<1x0xf32>} : () -> () 705b5b90e54SFeng Liu 706679a3b41SRiver Riddle// CHECK: "bfloat16"() {bar = dense<{{\[\[\[}}-5.000000e+00, 6.000000e+00, 1.000000e+00, 2.000000e+00]], {{\[\[}}7.000000e+00, -8.000000e+00, 3.000000e+00, 4.000000e+00]]]> : tensor<2x1x4xbf16>} : () -> () 707679a3b41SRiver Riddle "bfloat16"(){bar = dense<[[[-5.0, 6.0, 1.0, 2.0]], [[7.0, -8.0, 3.0, 4.0]]]> : tensor<2x1x4xbf16>} : () -> () 708679a3b41SRiver Riddle// CHECK: "float16"() {bar = dense<{{\[\[\[}}-5.000000e+00, 6.000000e+00, 1.000000e+00, 2.000000e+00]], {{\[\[}}7.000000e+00, -8.000000e+00, 3.000000e+00, 4.000000e+00]]]> : tensor<2x1x4xf16>} : () -> () 709679a3b41SRiver Riddle "float16"(){bar = dense<[[[-5.0, 6.0, 1.0, 2.0]], [[7.0, -8.0, 3.0, 4.0]]]> : tensor<2x1x4xf16>} : () -> () 710679a3b41SRiver Riddle// CHECK: "float32"() {bar = dense<{{\[\[\[}}-5.000000e+00, 6.000000e+00, 1.000000e+00, 2.000000e+00]], {{\[\[}}7.000000e+00, -8.000000e+00, 3.000000e+00, 4.000000e+00]]]> : tensor<2x1x4xf32>} : () -> () 711679a3b41SRiver Riddle "float32"(){bar = dense<[[[-5.0, 6.0, 1.0, 2.0]], [[7.0, -8.0, 3.0, 4.0]]]> : tensor<2x1x4xf32>} : () -> () 712679a3b41SRiver Riddle// CHECK: "float64"() {bar = dense<{{\[\[\[}}-5.000000e+00, 6.000000e+00, 1.000000e+00, 2.000000e+00]], {{\[\[}}7.000000e+00, -8.000000e+00, 3.000000e+00, 4.000000e+00]]]> : tensor<2x1x4xf64>} : () -> () 713679a3b41SRiver Riddle "float64"(){bar = dense<[[[-5.0, 6.0, 1.0, 2.0]], [[7.0, -8.0, 3.0, 4.0]]]> : tensor<2x1x4xf64>} : () -> () 714191aaa82SFeng Liu 715679a3b41SRiver Riddle// CHECK: "intscalar"() {bar = dense<1> : tensor<i32>} : () -> () 716679a3b41SRiver Riddle "intscalar"(){bar = dense<1> : tensor<i32>} : () -> () 717679a3b41SRiver Riddle// CHECK: "floatscalar"() {bar = dense<5.000000e+00> : tensor<f32>} : () -> () 718679a3b41SRiver Riddle "floatscalar"(){bar = dense<5.0> : tensor<f32>} : () -> () 7191b2c7877SSean Silva 7201b2c7877SSean Silva// CHECK: "index"() {bar = dense<1> : tensor<index>} : () -> () 7211b2c7877SSean Silva "index"(){bar = dense<1> : tensor<index>} : () -> () 7221b2c7877SSean Silva// CHECK: "index"() {bar = dense<[1, 2]> : tensor<2xindex>} : () -> () 7231b2c7877SSean Silva "index"(){bar = dense<[1, 2]> : tensor<2xindex>} : () -> () 72424ad3858SRiver Riddle 72524ad3858SRiver Riddle // CHECK: dense<(1,1)> : tensor<complex<i64>> 72624ad3858SRiver Riddle "complex_attr"(){bar = dense<(1,1)> : tensor<complex<i64>>} : () -> () 72724ad3858SRiver Riddle // CHECK: dense<[(1,1), (2,2)]> : tensor<2xcomplex<i64>> 72824ad3858SRiver Riddle "complex_attr"(){bar = dense<[(1,1), (2,2)]> : tensor<2xcomplex<i64>>} : () -> () 72924ad3858SRiver Riddle // CHECK: dense<(1.000000e+00,0.000000e+00)> : tensor<complex<f32>> 73024ad3858SRiver Riddle "complex_attr"(){bar = dense<(1.000000e+00,0.000000e+00)> : tensor<complex<f32>>} : () -> () 73124ad3858SRiver Riddle // CHECK: dense<[(1.000000e+00,0.000000e+00), (2.000000e+00,2.000000e+00)]> : tensor<2xcomplex<f32>> 73224ad3858SRiver Riddle "complex_attr"(){bar = dense<[(1.000000e+00,0.000000e+00), (2.000000e+00,2.000000e+00)]> : tensor<2xcomplex<f32>>} : () -> () 733b5b90e54SFeng Liu return 734b5b90e54SFeng Liu} 735b5b90e54SFeng Liu 736bbf362b7SChris Lattner// CHECK-LABEL: func @densevectorattr 7376a99d290SRiver Riddlefunc.func @densevectorattr() -> () { 73837579ae8SChris Lattner^bb0: 739b5b90e54SFeng Liu// NOTE: The {{\[\[}} syntax is because "[[" confuses FileCheck. 740679a3b41SRiver Riddle// CHECK: "fooi8"() {bar = dense<5> : vector<1x1x1xi8>} : () -> () 741679a3b41SRiver Riddle "fooi8"(){bar = dense<[[[5]]]> : vector<1x1x1xi8>} : () -> () 742679a3b41SRiver Riddle// CHECK: "fooi16"() {bar = dense<-5> : vector<1x1x1xi16>} : () -> () 743679a3b41SRiver Riddle "fooi16"(){bar = dense<[[[-5]]]> : vector<1x1x1xi16>} : () -> () 744679a3b41SRiver Riddle// CHECK: "foo32"() {bar = dense<5> : vector<1x1x1xi32>} : () -> () 745679a3b41SRiver Riddle "foo32"(){bar = dense<[[[5]]]> : vector<1x1x1xi32>} : () -> () 746679a3b41SRiver Riddle// CHECK: "fooi64"() {bar = dense<-5> : vector<1x1x1xi64>} : () -> () 747679a3b41SRiver Riddle "fooi64"(){bar = dense<[[[-5]]]> : vector<1x1x1xi64>} : () -> () 748b5b90e54SFeng Liu 749679a3b41SRiver Riddle// CHECK: "foo3"() {bar = dense<{{\[\[\[}}5, -6, 1, 2]], {{\[\[}}7, 8, 3, 4]]]> : vector<2x1x4xi32>} : () -> () 750679a3b41SRiver Riddle "foo3"(){bar = dense<[[[5, -6, 1, 2]], [[7, 8, 3, 4]]]> : vector<2x1x4xi32>} : () -> () 751b5b90e54SFeng Liu 752679a3b41SRiver Riddle// CHECK: "float1"() {bar = dense<5.000000e+00> : vector<1x1x1xf32>} : () -> () 753679a3b41SRiver Riddle "float1"(){bar = dense<[[[5.0]]]> : vector<1x1x1xf32>} : () -> () 754b5b90e54SFeng Liu 755679a3b41SRiver Riddle// CHECK: "bfloat16"() {bar = dense<{{\[\[\[}}-5.000000e+00, 6.000000e+00, 1.000000e+00, 2.000000e+00]], {{\[\[}}7.000000e+00, -8.000000e+00, 3.000000e+00, 4.000000e+00]]]> : vector<2x1x4xbf16>} : () -> () 756679a3b41SRiver Riddle "bfloat16"(){bar = dense<[[[-5.0, 6.0, 1.0, 2.0]], [[7.0, -8.0, 3.0, 4.0]]]> : vector<2x1x4xbf16>} : () -> () 757679a3b41SRiver Riddle// CHECK: "float16"() {bar = dense<{{\[\[\[}}-5.000000e+00, 6.000000e+00, 1.000000e+00, 2.000000e+00]], {{\[\[}}7.000000e+00, -8.000000e+00, 3.000000e+00, 4.000000e+00]]]> : vector<2x1x4xf16>} : () -> () 758679a3b41SRiver Riddle "float16"(){bar = dense<[[[-5.0, 6.0, 1.0, 2.0]], [[7.0, -8.0, 3.0, 4.0]]]> : vector<2x1x4xf16>} : () -> () 759679a3b41SRiver Riddle// CHECK: "float32"() {bar = dense<{{\[\[\[}}-5.000000e+00, 6.000000e+00, 1.000000e+00, 2.000000e+00]], {{\[\[}}7.000000e+00, -8.000000e+00, 3.000000e+00, 4.000000e+00]]]> : vector<2x1x4xf32>} : () -> () 760679a3b41SRiver Riddle "float32"(){bar = dense<[[[-5.0, 6.0, 1.0, 2.0]], [[7.0, -8.0, 3.0, 4.0]]]> : vector<2x1x4xf32>} : () -> () 761679a3b41SRiver Riddle// CHECK: "float64"() {bar = dense<{{\[\[\[}}-5.000000e+00, 6.000000e+00, 1.000000e+00, 2.000000e+00]], {{\[\[}}7.000000e+00, -8.000000e+00, 3.000000e+00, 4.000000e+00]]]> : vector<2x1x4xf64>} : () -> () 762679a3b41SRiver Riddle "float64"(){bar = dense<[[[-5.0, 6.0, 1.0, 2.0]], [[7.0, -8.0, 3.0, 4.0]]]> : vector<2x1x4xf64>} : () -> () 763b5b90e54SFeng Liu return 764b5b90e54SFeng Liu} 76503b48999SFeng Liu 766bbf362b7SChris Lattner// CHECK-LABEL: func @sparsetensorattr 7676a99d290SRiver Riddlefunc.func @sparsetensorattr() -> () { 76837579ae8SChris Lattner^bb0: 76903b48999SFeng Liu// NOTE: The {{\[\[}} syntax is because "[[" confuses FileCheck. 770679a3b41SRiver Riddle// CHECK: "fooi8"() {bar = sparse<0, -2> : tensor<1x1x1xi8>} : () -> () 771679a3b41SRiver Riddle "fooi8"(){bar = sparse<0, -2> : tensor<1x1x1xi8>} : () -> () 772679a3b41SRiver Riddle// CHECK: "fooi16"() {bar = sparse<{{\[\[}}1, 1, 0], {{\[}}0, 1, 0], {{\[}}0, 0, 1]], {{\[}}2, -1, 5]> : tensor<2x2x2xi16>} : () -> () 773679a3b41SRiver Riddle "fooi16"(){bar = sparse<[[1, 1, 0], [0, 1, 0], [0, 0, 1]], [2, -1, 5]> : tensor<2x2x2xi16>} : () -> () 77424aa4effSRiver Riddle// CHECK: "fooi32"() {bar = sparse<> : tensor<1x1xi32>} : () -> () 77524aa4effSRiver Riddle "fooi32"(){bar = sparse<> : tensor<1x1xi32>} : () -> () 776679a3b41SRiver Riddle// CHECK: "fooi64"() {bar = sparse<0, -1> : tensor<1xi64>} : () -> () 7774f21152aSRiver Riddle "fooi64"(){bar = sparse<[0], [-1]> : tensor<1xi64>} : () -> () 77824aa4effSRiver Riddle// CHECK: "foo2"() {bar = sparse<> : tensor<0xi32>} : () -> () 77924aa4effSRiver Riddle "foo2"(){bar = sparse<> : tensor<0xi32>} : () -> () 78024aa4effSRiver Riddle// CHECK: "foo3"() {bar = sparse<> : tensor<i32>} : () -> () 78124aa4effSRiver Riddle "foo3"(){bar = sparse<> : tensor<i32>} : () -> () 78203b48999SFeng Liu 783679a3b41SRiver Riddle// CHECK: "foof16"() {bar = sparse<0, -2.000000e+00> : tensor<1x1x1xf16>} : () -> () 784679a3b41SRiver Riddle "foof16"(){bar = sparse<0, -2.0> : tensor<1x1x1xf16>} : () -> () 785679a3b41SRiver Riddle// CHECK: "foobf16"() {bar = sparse<{{\[\[}}1, 1, 0], {{\[}}0, 1, 0], {{\[}}0, 0, 1]], {{\[}}2.000000e+00, -1.000000e+00, 5.000000e+00]> : tensor<2x2x2xbf16>} : () -> () 786679a3b41SRiver Riddle "foobf16"(){bar = sparse<[[1, 1, 0], [0, 1, 0], [0, 0, 1]], [2.0, -1.0, 5.0]> : tensor<2x2x2xbf16>} : () -> () 78724aa4effSRiver Riddle// CHECK: "foof32"() {bar = sparse<> : tensor<1x0x1xf32>} : () -> () 78824aa4effSRiver Riddle "foof32"(){bar = sparse<> : tensor<1x0x1xf32>} : () -> () 789679a3b41SRiver Riddle// CHECK: "foof64"() {bar = sparse<0, -1.000000e+00> : tensor<1xf64>} : () -> () 790679a3b41SRiver Riddle "foof64"(){bar = sparse<[[0]], [-1.0]> : tensor<1xf64>} : () -> () 79124aa4effSRiver Riddle// CHECK: "foof320"() {bar = sparse<> : tensor<0xf32>} : () -> () 79224aa4effSRiver Riddle "foof320"(){bar = sparse<> : tensor<0xf32>} : () -> () 79324aa4effSRiver Riddle// CHECK: "foof321"() {bar = sparse<> : tensor<f32>} : () -> () 79424aa4effSRiver Riddle "foof321"(){bar = sparse<> : tensor<f32>} : () -> () 795fb674e33SRob Suderman 796ab9cdf09SRiver Riddle// CHECK: "foostr"() {bar = sparse<0, "foo"> : tensor<1x1x1x!unknown<>>} : () -> () 797ab9cdf09SRiver Riddle "foostr"(){bar = sparse<0, "foo"> : tensor<1x1x1x!unknown<>>} : () -> () 798ab9cdf09SRiver Riddle// CHECK: "foostr"() {bar = sparse<{{\[\[}}1, 1, 0], {{\[}}0, 1, 0], {{\[}}0, 0, 1]], {{\[}}"a", "b", "c"]> : tensor<2x2x2x!unknown<>>} : () -> () 799ab9cdf09SRiver Riddle "foostr"(){bar = sparse<[[1, 1, 0], [0, 1, 0], [0, 0, 1]], ["a", "b", "c"]> : tensor<2x2x2x!unknown<>>} : () -> () 80003b48999SFeng Liu return 80103b48999SFeng Liu} 80203b48999SFeng Liu 803bbf362b7SChris Lattner// CHECK-LABEL: func @sparsevectorattr 8046a99d290SRiver Riddlefunc.func @sparsevectorattr() -> () { 80537579ae8SChris Lattner^bb0: 80603b48999SFeng Liu// NOTE: The {{\[\[}} syntax is because "[[" confuses FileCheck. 807679a3b41SRiver Riddle// CHECK: "fooi8"() {bar = sparse<0, -2> : vector<1x1x1xi8>} : () -> () 808679a3b41SRiver Riddle "fooi8"(){bar = sparse<0, -2> : vector<1x1x1xi8>} : () -> () 809679a3b41SRiver Riddle// CHECK: "fooi16"() {bar = sparse<{{\[\[}}1, 1, 0], {{\[}}0, 1, 0], {{\[}}0, 0, 1]], {{\[}}2, -1, 5]> : vector<2x2x2xi16>} : () -> () 810679a3b41SRiver Riddle "fooi16"(){bar = sparse<[[1, 1, 0], [0, 1, 0], [0, 0, 1]], [2, -1, 5]> : vector<2x2x2xi16>} : () -> () 81124aa4effSRiver Riddle// CHECK: "fooi32"() {bar = sparse<> : vector<1x1xi32>} : () -> () 81224aa4effSRiver Riddle "fooi32"(){bar = sparse<> : vector<1x1xi32>} : () -> () 813679a3b41SRiver Riddle// CHECK: "fooi64"() {bar = sparse<0, -1> : vector<1xi64>} : () -> () 814679a3b41SRiver Riddle "fooi64"(){bar = sparse<[[0]], [-1]> : vector<1xi64>} : () -> () 81503b48999SFeng Liu 816679a3b41SRiver Riddle// CHECK: "foof16"() {bar = sparse<0, -2.000000e+00> : vector<1x1x1xf16>} : () -> () 817679a3b41SRiver Riddle "foof16"(){bar = sparse<0, -2.0> : vector<1x1x1xf16>} : () -> () 818679a3b41SRiver Riddle// CHECK: "foobf16"() {bar = sparse<{{\[\[}}1, 1, 0], {{\[}}0, 1, 0], {{\[}}0, 0, 1]], {{\[}}2.000000e+00, -1.000000e+00, 5.000000e+00]> : vector<2x2x2xbf16>} : () -> () 819679a3b41SRiver Riddle "foobf16"(){bar = sparse<[[1, 1, 0], [0, 1, 0], [0, 0, 1]], [2.0, -1.0, 5.0]> : vector<2x2x2xbf16>} : () -> () 820679a3b41SRiver Riddle// CHECK: "foof64"() {bar = sparse<0, -1.000000e+00> : vector<1xf64>} : () -> () 821679a3b41SRiver Riddle "foof64"(){bar = sparse<0, [-1.0]> : vector<1xf64>} : () -> () 82203b48999SFeng Liu return 82303b48999SFeng Liu} 824aaa1d77eSChris Lattner 825ab9cdf09SRiver Riddle// CHECK-LABEL: func @unknown_dialect_type() -> !bar<> { 826ab9cdf09SRiver Riddlefunc.func @unknown_dialect_type() -> !bar<> { 8273b2c5600SRiver Riddle // Unregistered dialect 'bar'. 828ab9cdf09SRiver Riddle // CHECK: "foo"() : () -> !bar<> 829ab9cdf09SRiver Riddle %0 = "foo"() : () -> !bar<> 8303b2c5600SRiver Riddle 83172441fcbSChris Lattner // CHECK: "foo"() : () -> !bar.baz 832ab9cdf09SRiver Riddle %1 = "foo"() : () -> !bar<baz> 8333b2c5600SRiver Riddle 834ab9cdf09SRiver Riddle return %0 : !bar<> 8353b2c5600SRiver Riddle} 836aaa1d77eSChris Lattner 8378eccc429SRiver Riddle// CHECK-LABEL: func @type_alias() -> i32 { 838a6cef03fSRiver Riddle!i32_type_alias = i32 8396a99d290SRiver Riddlefunc.func @type_alias() -> !i32_type_alias { 8408eccc429SRiver Riddle 8418eccc429SRiver Riddle // Return a non-aliased i32 type. 8428eccc429SRiver Riddle %0 = "foo"() : () -> i32 8438eccc429SRiver Riddle return %0 : i32 8448eccc429SRiver Riddle} 845c3424c3cSRiver Riddle 84638f8dc67SRiver Riddle// CHECK-LABEL: func @no_integer_set_constraints( 8476a99d290SRiver Riddlefunc.func @no_integer_set_constraints() { 84895371ce9SMehdi Amini // CHECK: affine.if [[$SET_TRUE]]() { 8494268e4f4SRiver Riddle affine.if affine_set<() : ()> () { 85038f8dc67SRiver Riddle } 85138f8dc67SRiver Riddle return 85238f8dc67SRiver Riddle} 85338f8dc67SRiver Riddle 854c3424c3cSRiver Riddle// CHECK-LABEL: func @verbose_if( 8556a99d290SRiver Riddlefunc.func @verbose_if(%N: index) { 856a54f4eaeSMogball %c = arith.constant 200 : index 857c3424c3cSRiver Riddle 85889bc449cSRiver Riddle // CHECK: affine.if #set{{.*}}(%{{.*}})[%{{.*}}, %{{.*}}] { 859d3380a50SAlex Zinenko "affine.if"(%c, %N, %c) ({ 860c3424c3cSRiver Riddle // CHECK-NEXT: "add" 861c3424c3cSRiver Riddle %y = "add"(%c, %N) : (index, index) -> index 8622ede8918SJeremy Bruestle "affine.yield"() : () -> () 86375553832SRiver Riddle // CHECK-NEXT: } else { 864d3380a50SAlex Zinenko }, { // The else region. 865c3424c3cSRiver Riddle // CHECK-NEXT: "add" 866c3424c3cSRiver Riddle %z = "add"(%c, %c) : (index, index) -> index 8672ede8918SJeremy Bruestle "affine.yield"() : () -> () 868d3380a50SAlex Zinenko }) 869679a3b41SRiver Riddle { condition = #set0 } : (index, index, index) -> () 870d3380a50SAlex Zinenko return 871c3424c3cSRiver Riddle} 872d3380a50SAlex Zinenko 873d3380a50SAlex Zinenko// CHECK-LABEL: func @terminator_with_regions 8746a99d290SRiver Riddlefunc.func @terminator_with_regions() { 875d3380a50SAlex Zinenko // Combine successors and regions in the same operation. 876d3380a50SAlex Zinenko // CHECK: "region"()[^bb1] ({ 877d3380a50SAlex Zinenko // CHECK: }) : () -> () 878d3380a50SAlex Zinenko "region"()[^bb2] ({}) : () -> () 879d3380a50SAlex Zinenko^bb2: 880c3424c3cSRiver Riddle return 881c3424c3cSRiver Riddle} 882366ebcf6SRiver Riddle 883366ebcf6SRiver Riddle// CHECK-LABEL: func @unregistered_term 8846a99d290SRiver Riddlefunc.func @unregistered_term(%arg0 : i1) -> i1 { 885cb177712SRiver Riddle // CHECK-NEXT: "unregistered_br"(%{{.*}})[^bb1] : (i1) -> () 886cb177712SRiver Riddle "unregistered_br"(%arg0)[^bb1] : (i1) -> () 887366ebcf6SRiver Riddle 888366ebcf6SRiver Riddle^bb1(%arg1 : i1): 889366ebcf6SRiver Riddle return %arg1 : i1 890366ebcf6SRiver Riddle} 8912d4b0e2cSRiver Riddle 892a495f960SRiver Riddle// CHECK-LABEL: func @dialect_attrs 8936a99d290SRiver Riddlefunc.func @dialect_attrs() 894b5af3784SAlex Zinenko // CHECK: attributes {dialect.attr = 10 895679a3b41SRiver Riddle attributes {dialect.attr = 10} { 8962d4b0e2cSRiver Riddle return 8972d4b0e2cSRiver Riddle} 89803913698SRiver Riddle 899b7382ed3SRahul Joshi// CHECK-LABEL: func private @_valid.function$name 9006a99d290SRiver Riddlefunc.func private @_valid.function$name() 901db1757f8SRiver Riddle 902b7382ed3SRahul Joshi// CHECK-LABEL: func private @external_func_arg_attrs(i32, i1 {dialect.attr = 10 : i64}, i32) 9036a99d290SRiver Riddlefunc.func private @external_func_arg_attrs(i32, i1 {dialect.attr = 10 : i64}, i32) 904db1757f8SRiver Riddle 90589bc449cSRiver Riddle// CHECK-LABEL: func @func_arg_attrs(%{{.*}}: i1 {dialect.attr = 10 : i64}) 9066a99d290SRiver Riddlefunc.func @func_arg_attrs(%arg0: i1 {dialect.attr = 10 : i64}) { 907db1757f8SRiver Riddle return 908db1757f8SRiver Riddle} 90930e68230SRiver Riddle 9109c9a7e92SSean Silva// CHECK-LABEL: func @func_result_attrs({{.*}}) -> (f32 {dialect.attr = 1 : i64}) 9116a99d290SRiver Riddlefunc.func @func_result_attrs(%arg0: f32) -> (f32 {dialect.attr = 1}) { 9129c9a7e92SSean Silva return %arg0 : f32 9139c9a7e92SSean Silva} 9149c9a7e92SSean Silva 915b7382ed3SRahul Joshi// CHECK-LABEL: func private @empty_tuple(tuple<>) 9166a99d290SRiver Riddlefunc.func private @empty_tuple(tuple<>) 91730e68230SRiver Riddle 918b7382ed3SRahul Joshi// CHECK-LABEL: func private @tuple_single_element(tuple<i32>) 9196a99d290SRiver Riddlefunc.func private @tuple_single_element(tuple<i32>) 92030e68230SRiver Riddle 921b7382ed3SRahul Joshi// CHECK-LABEL: func private @tuple_multi_element(tuple<i32, i16, f32>) 9226a99d290SRiver Riddlefunc.func private @tuple_multi_element(tuple<i32, i16, f32>) 92330e68230SRiver Riddle 924b7382ed3SRahul Joshi// CHECK-LABEL: func private @tuple_nested(tuple<tuple<tuple<i32>>>) 9256a99d290SRiver Riddlefunc.func private @tuple_nested(tuple<tuple<tuple<i32>>>) 92601140bd1SRiver Riddle 92701140bd1SRiver Riddle// CHECK-LABEL: func @pretty_form_multi_result 9286a99d290SRiver Riddlefunc.func @pretty_form_multi_result() -> (i16, i16) { 92989bc449cSRiver Riddle // CHECK: %{{.*}}:2 = "foo_div"() : () -> (i16, i16) 93001140bd1SRiver Riddle %quot, %rem = "foo_div"() : () -> (i16, i16) 93101140bd1SRiver Riddle return %quot, %rem : i16, i16 93201140bd1SRiver Riddle} 9333f93d933SChris Lattner 934b69e8ee0SRiver Riddle// CHECK-LABEL: func @pretty_form_multi_result_groups 9356a99d290SRiver Riddlefunc.func @pretty_form_multi_result_groups() -> (i16, i16, i16, i16, i16) { 936b69e8ee0SRiver Riddle // CHECK: %[[RES:.*]]:5 = 937b69e8ee0SRiver Riddle // CHECK: return %[[RES]]#0, %[[RES]]#1, %[[RES]]#2, %[[RES]]#3, %[[RES]]#4 938b69e8ee0SRiver Riddle %group_1:2, %group_2, %group_3:2 = "foo_test"() : () -> (i16, i16, i16, i16, i16) 939b69e8ee0SRiver Riddle return %group_1#0, %group_1#1, %group_2, %group_3#0, %group_3#1 : i16, i16, i16, i16, i16 940b69e8ee0SRiver Riddle} 941b69e8ee0SRiver Riddle 9428d5bd823SRiver Riddle// CHECK-LABEL: func @pretty_dialect_attribute() 9436a99d290SRiver Riddlefunc.func @pretty_dialect_attribute() { 944057dc41bSLei Zhang // CHECK: "foo.unknown_op"() {foo = #foo.simple_attr} : () -> () 945057dc41bSLei Zhang "foo.unknown_op"() {foo = #foo.simple_attr} : () -> () 9468d5bd823SRiver Riddle 947679a3b41SRiver Riddle // CHECK: "foo.unknown_op"() {foo = #foo.complexattr<abcd>} : () -> () 948679a3b41SRiver Riddle "foo.unknown_op"() {foo = #foo.complexattr<abcd>} : () -> () 9498d5bd823SRiver Riddle 950679a3b41SRiver Riddle // CHECK: "foo.unknown_op"() {foo = #foo.complexattr<abcd<f32>>} : () -> () 951679a3b41SRiver Riddle "foo.unknown_op"() {foo = #foo.complexattr<abcd<f32>>} : () -> () 9528d5bd823SRiver Riddle 953679a3b41SRiver Riddle // CHECK: "foo.unknown_op"() {foo = #foo.complexattr<abcd<[f]$$[32]>>} : () -> () 954679a3b41SRiver Riddle "foo.unknown_op"() {foo = #foo.complexattr<abcd<[f]$$[32]>>} : () -> () 9558d5bd823SRiver Riddle 956679a3b41SRiver Riddle // CHECK: "foo.unknown_op"() {foo = #foo.dialect<!x@#!@#>} : () -> () 957679a3b41SRiver Riddle "foo.unknown_op"() {foo = #foo.dialect<!x@#!@#>} : () -> () 9588d5bd823SRiver Riddle 9598d5bd823SRiver Riddle return 9608d5bd823SRiver Riddle} 9618d5bd823SRiver Riddle 9623f93d933SChris Lattner// CHECK-LABEL: func @pretty_dialect_type() 9636a99d290SRiver Riddlefunc.func @pretty_dialect_type() { 9643f93d933SChris Lattner 96589bc449cSRiver Riddle // CHECK: %{{.*}} = "foo.unknown_op"() : () -> !foo.simpletype 9663f93d933SChris Lattner %0 = "foo.unknown_op"() : () -> !foo.simpletype 9673f93d933SChris Lattner 96889bc449cSRiver Riddle // CHECK: %{{.*}} = "foo.unknown_op"() : () -> !foo.complextype<abcd> 9693f93d933SChris Lattner %1 = "foo.unknown_op"() : () -> !foo.complextype<abcd> 9703f93d933SChris Lattner 97189bc449cSRiver Riddle // CHECK: %{{.*}} = "foo.unknown_op"() : () -> !foo.complextype<abcd<f32>> 9723f93d933SChris Lattner %2 = "foo.unknown_op"() : () -> !foo.complextype<abcd<f32>> 97309c053bfSChris Lattner 97489bc449cSRiver Riddle // CHECK: %{{.*}} = "foo.unknown_op"() : () -> !foo.complextype<abcd<[f]$$[32]>> 97509c053bfSChris Lattner %3 = "foo.unknown_op"() : () -> !foo.complextype<abcd<[f]$$[32]>> 97609c053bfSChris Lattner 97789bc449cSRiver Riddle // CHECK: %{{.*}} = "foo.unknown_op"() : () -> !foo.dialect<!x@#!@#> 97809c053bfSChris Lattner %4 = "foo.unknown_op"() : () -> !foo.dialect<!x@#!@#> 97909c053bfSChris Lattner 9803f93d933SChris Lattner return 9813f93d933SChris Lattner} 9821316db3bSRiver Riddle 9831316db3bSRiver Riddle// CHECK-LABEL: func @none_type 9846a99d290SRiver Riddlefunc.func @none_type() { 9851316db3bSRiver Riddle // CHECK: "foo.unknown_op"() : () -> none 9861316db3bSRiver Riddle %none_val = "foo.unknown_op"() : () -> none 9871316db3bSRiver Riddle return 9881316db3bSRiver Riddle} 989c263ae91SRiver Riddle 990c263ae91SRiver Riddle// CHECK-LABEL: func @scoped_names 9916a99d290SRiver Riddlefunc.func @scoped_names() { 992c263ae91SRiver Riddle // CHECK-NEXT: "foo.region_op" 993c263ae91SRiver Riddle "foo.region_op"() ({ 994c263ae91SRiver Riddle // CHECK-NEXT: "foo.unknown_op" 995c263ae91SRiver Riddle %scoped_name = "foo.unknown_op"() : () -> none 996c263ae91SRiver Riddle "foo.terminator"() : () -> () 997c263ae91SRiver Riddle }, { 998c263ae91SRiver Riddle // CHECK: "foo.unknown_op" 999c263ae91SRiver Riddle %scoped_name = "foo.unknown_op"() : () -> none 1000c263ae91SRiver Riddle "foo.terminator"() : () -> () 1001c263ae91SRiver Riddle }) : () -> () 1002c263ae91SRiver Riddle return 1003c263ae91SRiver Riddle} 100436b7c2daSRiver Riddle 1005d097cc61SRiver Riddle// CHECK-LABEL: func @dialect_attribute_with_type 10066a99d290SRiver Riddlefunc.func @dialect_attribute_with_type() { 1007d097cc61SRiver Riddle // CHECK-NEXT: foo = #foo.attr : i32 1008d097cc61SRiver Riddle "foo.unknown_op"() {foo = #foo.attr : i32} : () -> () 1009d097cc61SRiver Riddle} 10103b207d36SAlex Zinenko 10113b207d36SAlex Zinenko// CHECK-LABEL: @f16_special_values 10126a99d290SRiver Riddlefunc.func @f16_special_values() { 10133b207d36SAlex Zinenko // F16 NaNs. 1014a54f4eaeSMogball // CHECK: arith.constant 0x7C01 : f16 1015a54f4eaeSMogball %0 = arith.constant 0x7C01 : f16 1016a54f4eaeSMogball // CHECK: arith.constant 0x7FFF : f16 1017a54f4eaeSMogball %1 = arith.constant 0x7FFF : f16 1018a54f4eaeSMogball // CHECK: arith.constant 0xFFFF : f16 1019a54f4eaeSMogball %2 = arith.constant 0xFFFF : f16 10203b207d36SAlex Zinenko 10213b207d36SAlex Zinenko // F16 positive infinity. 1022a54f4eaeSMogball // CHECK: arith.constant 0x7C00 : f16 1023a54f4eaeSMogball %3 = arith.constant 0x7C00 : f16 1024f28c5acaSKazuaki Ishizaki // F16 negative infinity. 1025a54f4eaeSMogball // CHECK: arith.constant 0xFC00 : f16 1026a54f4eaeSMogball %4 = arith.constant 0xFC00 : f16 10273b207d36SAlex Zinenko 10283b207d36SAlex Zinenko return 10293b207d36SAlex Zinenko} 10303b207d36SAlex Zinenko 10313b207d36SAlex Zinenko// CHECK-LABEL: @f32_special_values 10326a99d290SRiver Riddlefunc.func @f32_special_values() { 10333b207d36SAlex Zinenko // F32 signaling NaNs. 1034a54f4eaeSMogball // CHECK: arith.constant 0x7F800001 : f32 1035a54f4eaeSMogball %0 = arith.constant 0x7F800001 : f32 1036a54f4eaeSMogball // CHECK: arith.constant 0x7FBFFFFF : f32 1037a54f4eaeSMogball %1 = arith.constant 0x7FBFFFFF : f32 10383b207d36SAlex Zinenko 10393b207d36SAlex Zinenko // F32 quiet NaNs. 1040a54f4eaeSMogball // CHECK: arith.constant 0x7FC00000 : f32 1041a54f4eaeSMogball %2 = arith.constant 0x7FC00000 : f32 1042a54f4eaeSMogball // CHECK: arith.constant 0xFFFFFFFF : f32 1043a54f4eaeSMogball %3 = arith.constant 0xFFFFFFFF : f32 10443b207d36SAlex Zinenko 10453b207d36SAlex Zinenko // F32 positive infinity. 1046a54f4eaeSMogball // CHECK: arith.constant 0x7F800000 : f32 1047a54f4eaeSMogball %4 = arith.constant 0x7F800000 : f32 10483b207d36SAlex Zinenko // F32 negative infinity. 1049a54f4eaeSMogball // CHECK: arith.constant 0xFF800000 : f32 1050a54f4eaeSMogball %5 = arith.constant 0xFF800000 : f32 10513b207d36SAlex Zinenko 10523b207d36SAlex Zinenko return 10533b207d36SAlex Zinenko} 10543b207d36SAlex Zinenko 10553b207d36SAlex Zinenko// CHECK-LABEL: @f64_special_values 10566a99d290SRiver Riddlefunc.func @f64_special_values() { 10573b207d36SAlex Zinenko // F64 signaling NaNs. 1058a54f4eaeSMogball // CHECK: arith.constant 0x7FF0000000000001 : f64 1059a54f4eaeSMogball %0 = arith.constant 0x7FF0000000000001 : f64 1060a54f4eaeSMogball // CHECK: arith.constant 0x7FF8000000000000 : f64 1061a54f4eaeSMogball %1 = arith.constant 0x7FF8000000000000 : f64 10623b207d36SAlex Zinenko 10633b207d36SAlex Zinenko // F64 quiet NaNs. 1064a54f4eaeSMogball // CHECK: arith.constant 0x7FF0000001000000 : f64 1065a54f4eaeSMogball %2 = arith.constant 0x7FF0000001000000 : f64 1066a54f4eaeSMogball // CHECK: arith.constant 0xFFF0000001000000 : f64 1067a54f4eaeSMogball %3 = arith.constant 0xFFF0000001000000 : f64 10683b207d36SAlex Zinenko 1069f28c5acaSKazuaki Ishizaki // F64 positive infinity. 1070a54f4eaeSMogball // CHECK: arith.constant 0x7FF0000000000000 : f64 1071a54f4eaeSMogball %4 = arith.constant 0x7FF0000000000000 : f64 10723b207d36SAlex Zinenko // F64 negative infinity. 1073a54f4eaeSMogball // CHECK: arith.constant 0xFFF0000000000000 : f64 1074a54f4eaeSMogball %5 = arith.constant 0xFFF0000000000000 : f64 10753b207d36SAlex Zinenko 107658c18ca1SRiver Riddle // Check that values that can't be represented with the default format, use 107758c18ca1SRiver Riddle // hex instead. 1078a54f4eaeSMogball // CHECK: arith.constant 0xC1CDC00000000000 : f64 1079a54f4eaeSMogball %6 = arith.constant 0xC1CDC00000000000 : f64 108058c18ca1SRiver Riddle 10813b207d36SAlex Zinenko return 10823b207d36SAlex Zinenko} 10833b207d36SAlex Zinenko 10841bd14ce3SRiver Riddle// CHECK-LABEL: @bfloat16_special_values 10856a99d290SRiver Riddlefunc.func @bfloat16_special_values() { 10861bd14ce3SRiver Riddle // bfloat16 signaling NaNs. 1087a54f4eaeSMogball // CHECK: arith.constant 0x7F81 : bf16 1088a54f4eaeSMogball %0 = arith.constant 0x7F81 : bf16 1089a54f4eaeSMogball // CHECK: arith.constant 0xFF81 : bf16 1090a54f4eaeSMogball %1 = arith.constant 0xFF81 : bf16 10911bd14ce3SRiver Riddle 10921bd14ce3SRiver Riddle // bfloat16 quiet NaNs. 1093a54f4eaeSMogball // CHECK: arith.constant 0x7FC0 : bf16 1094a54f4eaeSMogball %2 = arith.constant 0x7FC0 : bf16 1095a54f4eaeSMogball // CHECK: arith.constant 0xFFC0 : bf16 1096a54f4eaeSMogball %3 = arith.constant 0xFFC0 : bf16 10971bd14ce3SRiver Riddle 10981bd14ce3SRiver Riddle // bfloat16 positive infinity. 1099a54f4eaeSMogball // CHECK: arith.constant 0x7F80 : bf16 1100a54f4eaeSMogball %4 = arith.constant 0x7F80 : bf16 11011bd14ce3SRiver Riddle // bfloat16 negative infinity. 1102a54f4eaeSMogball // CHECK: arith.constant 0xFF80 : bf16 1103a54f4eaeSMogball %5 = arith.constant 0xFF80 : bf16 11041bd14ce3SRiver Riddle 11051bd14ce3SRiver Riddle return 11061bd14ce3SRiver Riddle} 11071bd14ce3SRiver Riddle 11081e3c630fSorbiri// CHECK-LABEL: @f80_special_values 11091e3c630fSorbirifunc.func @f80_special_values() { 11101e3c630fSorbiri // F80 signaling NaNs. 11111e3c630fSorbiri // CHECK: arith.constant 0x7FFFE000000000000001 : f80 11121e3c630fSorbiri %0 = arith.constant 0x7FFFE000000000000001 : f80 11131e3c630fSorbiri // CHECK: arith.constant 0x7FFFB000000000000011 : f80 11141e3c630fSorbiri %1 = arith.constant 0x7FFFB000000000000011 : f80 11151e3c630fSorbiri 11161e3c630fSorbiri // F80 quiet NaNs. 11171e3c630fSorbiri // CHECK: arith.constant 0x7FFFC000000000100000 : f80 11181e3c630fSorbiri %2 = arith.constant 0x7FFFC000000000100000 : f80 11191e3c630fSorbiri // CHECK: arith.constant 0x7FFFE000000001000000 : f80 11201e3c630fSorbiri %3 = arith.constant 0x7FFFE000000001000000 : f80 11211e3c630fSorbiri 11221e3c630fSorbiri // F80 positive infinity. 11231e3c630fSorbiri // CHECK: arith.constant 0x7FFF8000000000000000 : f80 11241e3c630fSorbiri %4 = arith.constant 0x7FFF8000000000000000 : f80 11251e3c630fSorbiri // F80 negative infinity. 11261e3c630fSorbiri // CHECK: arith.constant 0xFFFF8000000000000000 : f80 11271e3c630fSorbiri %5 = arith.constant 0xFFFF8000000000000000 : f80 11281e3c630fSorbiri 11291e3c630fSorbiri return 11301e3c630fSorbiri} 11311e3c630fSorbiri 11323b207d36SAlex Zinenko// We want to print floats in exponential notation with 6 significant digits, 11333b207d36SAlex Zinenko// but it may lead to precision loss when parsing back, in which case we print 11343b207d36SAlex Zinenko// the decimal form instead. 11353b207d36SAlex Zinenko// CHECK-LABEL: @f32_potential_precision_loss() 11366a99d290SRiver Riddlefunc.func @f32_potential_precision_loss() { 1137a54f4eaeSMogball // CHECK: arith.constant -1.23697901 : f32 1138a54f4eaeSMogball %0 = arith.constant -1.23697901 : f32 11393b207d36SAlex Zinenko return 11403b207d36SAlex Zinenko} 1141206be96eSAlex Zinenko 1142206be96eSAlex Zinenko// CHECK-LABEL: @special_float_values_in_tensors 11436a99d290SRiver Riddlefunc.func @special_float_values_in_tensors() { 1144206be96eSAlex Zinenko // CHECK: dense<0xFFFFFFFF> : tensor<4x4xf32> 1145206be96eSAlex Zinenko "foo"(){bar = dense<0xFFFFFFFF> : tensor<4x4xf32>} : () -> () 1146206be96eSAlex Zinenko // CHECK: dense<[{{\[}}0xFFFFFFFF, 0x7F800000], [0x7FBFFFFF, 0x7F800001]]> : tensor<2x2xf32> 1147206be96eSAlex Zinenko "foo"(){bar = dense<[[0xFFFFFFFF, 0x7F800000], [0x7FBFFFFF, 0x7F800001]]> : tensor<2x2xf32>} : () -> () 1148206be96eSAlex Zinenko // CHECK: dense<[0xFFFFFFFF, 0.000000e+00]> : tensor<2xf32> 1149206be96eSAlex Zinenko "foo"(){bar = dense<[0xFFFFFFFF, 0.0]> : tensor<2xf32>} : () -> () 1150206be96eSAlex Zinenko 1151206be96eSAlex Zinenko // CHECK: sparse<[{{\[}}1, 1, 0], [0, 1, 1]], [0xFFFFFFFF, 0x7F800001]> 1152206be96eSAlex Zinenko "foo"(){bar = sparse<[[1,1,0],[0,1,1]], [0xFFFFFFFF, 0x7F800001]> : tensor<2x2x2xf32>} : () -> () 1153206be96eSAlex Zinenko} 1154305516fcSRiver Riddle 1155305516fcSRiver Riddle// Test parsing of an op with multiple region arguments, and without a 1156305516fcSRiver Riddle// delimiter. 1157305516fcSRiver Riddle 1158b89b3cdbSRahul Kayaith// GENERIC-LABEL: op_with_region_args 11596a99d290SRiver Riddlefunc.func @op_with_region_args() { 1160b89b3cdbSRahul Kayaith // GENERIC: "test.polyfor"() ({ 1161b89b3cdbSRahul Kayaith // GENERIC-NEXT: ^bb{{.*}}(%{{.*}}: index, %{{.*}}: index, %{{.*}}: index): 1162305516fcSRiver Riddle test.polyfor %i, %j, %k { 1163305516fcSRiver Riddle "foo"() : () -> () 1164305516fcSRiver Riddle } 1165305516fcSRiver Riddle return 1166305516fcSRiver Riddle} 1167305516fcSRiver Riddle 1168305516fcSRiver Riddle// Test allowing different name scopes for regions isolated from above. 1169305516fcSRiver Riddle 1170305516fcSRiver Riddle// CHECK-LABEL: func @op_with_passthrough_region_args 11716a99d290SRiver Riddlefunc.func @op_with_passthrough_region_args() { 1172a54f4eaeSMogball // CHECK: [[VAL:%.*]] = arith.constant 1173a54f4eaeSMogball %0 = arith.constant 10 : index 117431a003dcSChris Lattner 117531a003dcSChris Lattner // CHECK: test.isolated_region [[VAL]] { 117631a003dcSChris Lattner // CHECK-NEXT: "foo.consumer"([[VAL]]) : (index) 117731a003dcSChris Lattner // CHECK-NEXT: } 1178305516fcSRiver Riddle test.isolated_region %0 { 1179305516fcSRiver Riddle "foo.consumer"(%0) : (index) -> () 1180305516fcSRiver Riddle } 118131a003dcSChris Lattner 118231a003dcSChris Lattner // CHECK: [[VAL:%.*]]:2 = "foo.op" 118331a003dcSChris Lattner %result:2 = "foo.op"() : () -> (index, index) 118431a003dcSChris Lattner 118531a003dcSChris Lattner // CHECK: test.isolated_region [[VAL]]#1 { 118631a003dcSChris Lattner // CHECK-NEXT: "foo.consumer"([[VAL]]#1) : (index) 118731a003dcSChris Lattner // CHECK-NEXT: } 118831a003dcSChris Lattner test.isolated_region %result#1 { 118931a003dcSChris Lattner "foo.consumer"(%result#1) : (index) -> () 119031a003dcSChris Lattner } 119131a003dcSChris Lattner 1192305516fcSRiver Riddle return 1193305516fcSRiver Riddle} 119431a003dcSChris Lattner 1195b7382ed3SRahul Joshi// CHECK-LABEL: func private @ptr_to_function() -> !unreg.ptr<() -> ()> 11966a99d290SRiver Riddlefunc.func private @ptr_to_function() -> !unreg.ptr<() -> ()> 119761ee7d64SRiver Riddle 1198b7382ed3SRahul Joshi// CHECK-LABEL: func private @escaped_string_char(i1 {foo.value = "\0A"}) 11996a99d290SRiver Riddlefunc.func private @escaped_string_char(i1 {foo.value = "\n"}) 1200b58d9aeeSRiver Riddle 12016bc9439fSRiver Riddle// CHECK-LABEL: func @parse_integer_literal_test 12026a99d290SRiver Riddlefunc.func @parse_integer_literal_test() { 12036bc9439fSRiver Riddle // CHECK: test.parse_integer_literal : 5 12046bc9439fSRiver Riddle test.parse_integer_literal : 5 12056bc9439fSRiver Riddle return 12066bc9439fSRiver Riddle} 12076bc9439fSRiver Riddle 12086bc9439fSRiver Riddle// CHECK-LABEL: func @parse_wrapped_keyword_test 12096a99d290SRiver Riddlefunc.func @parse_wrapped_keyword_test() { 12106bc9439fSRiver Riddle // CHECK: test.parse_wrapped_keyword foo.keyword 12116bc9439fSRiver Riddle test.parse_wrapped_keyword foo.keyword 1212b58d9aeeSRiver Riddle return 1213b58d9aeeSRiver Riddle} 121471c79622SRiver Riddle 1215b89b3cdbSRahul Kayaith// GENERIC-LABEL: parse_base64_test 1216bf87d5adSbzcheesemanfunc.func @parse_base64_test() { 1217b89b3cdbSRahul Kayaith // GENERIC: "test.parse_b64"() <{b64 = "hello world"}> 1218bf87d5adSbzcheeseman test.parse_b64 "aGVsbG8gd29ybGQ=" 1219bf87d5adSbzcheeseman return 1220bf87d5adSbzcheeseman} 1221bf87d5adSbzcheeseman 122271c79622SRiver Riddle// CHECK-LABEL: func @"\22_string_symbol_reference\22" 12236a99d290SRiver Riddlefunc.func @"\"_string_symbol_reference\""() { 122471c79622SRiver Riddle // CHECK: ref = @"\22_string_symbol_reference\22" 122571c79622SRiver Riddle "foo.symbol_reference"() {ref = @"\"_string_symbol_reference\""} : () -> () 122671c79622SRiver Riddle return 122771c79622SRiver Riddle} 12289b9c647cSRiver Riddle 1229a96911c4SMarkus Böck// CHECK-LABEL: func private @parse_opaque_attr_escape 12306a99d290SRiver Riddlefunc.func private @parse_opaque_attr_escape() { 1231ab9cdf09SRiver Riddle // CHECK: value = #foo<"\"escaped\\\n\""> 1232a96911c4SMarkus Böck "foo.constant"() {value = #foo<"\"escaped\\\n\"">} : () -> () 1233a96911c4SMarkus Böck} 1234a96911c4SMarkus Böck 1235b7382ed3SRahul Joshi// CHECK-LABEL: func private @string_attr_name 1236d2f3e5f2SRiver Riddle// CHECK-SAME: {"0 . 0", nested = {"0 . 0"}} 12376a99d290SRiver Riddlefunc.func private @string_attr_name() attributes {"0 . 0", nested = {"0 . 0"}} 1238d2f3e5f2SRiver Riddle 1239b7382ed3SRahul Joshi// CHECK-LABEL: func private @nested_reference 1240b5af3784SAlex Zinenko// CHECK: ref = @some_symbol::@some_nested_symbol 12416a99d290SRiver Riddlefunc.func private @nested_reference() attributes {test.ref = @some_symbol::@some_nested_symbol } 1242eb418559SRiver Riddle 1243eb418559SRiver Riddle// CHECK-LABEL: func @custom_asm_names 12446a99d290SRiver Riddlefunc.func @custom_asm_names() -> (i32, i32, i32, i32, i32, i32) { 1245eb418559SRiver Riddle // CHECK: %[[FIRST:first.*]], %[[MIDDLE:middle_results.*]]:2, %[[LAST:[0-9]+]] 1246eb418559SRiver Riddle %0, %1:2, %2 = "test.asm_interface_op"() : () -> (i32, i32, i32, i32) 1247eb418559SRiver Riddle 1248eb418559SRiver Riddle // CHECK: %[[FIRST_2:first.*]], %[[LAST_2:[0-9]+]] 1249eb418559SRiver Riddle %3, %4 = "test.asm_interface_op"() : () -> (i32, i32) 1250eb418559SRiver Riddle 1251eb418559SRiver Riddle // CHECK: return %[[FIRST]], %[[MIDDLE]]#0, %[[MIDDLE]]#1, %[[LAST]], %[[FIRST_2]], %[[LAST_2]] 12529006bf42SMehdi Amini return %0, %1#0, %1#1, %2, %3, %4 : i32, i32, i32, i32, i32, i32 1253eb418559SRiver Riddle} 1254596da62dSChris Lattner 1255596da62dSChris Lattner 1256596da62dSChris Lattner// CHECK-LABEL: func @pretty_names 1257596da62dSChris Lattner 1258596da62dSChris Lattner// This tests the behavior 12596a99d290SRiver Riddlefunc.func @pretty_names() { 1260596da62dSChris Lattner // Simple case, should parse and print as %x being an implied 'name' 1261596da62dSChris Lattner // attribute. 1262596da62dSChris Lattner %x = test.string_attr_pretty_name 1263596da62dSChris Lattner // CHECK: %x = test.string_attr_pretty_name 1264596da62dSChris Lattner // CHECK-NOT: attributes 1265596da62dSChris Lattner 1266596da62dSChris Lattner // This specifies an explicit name, which should override the result. 1267596da62dSChris Lattner %YY = test.string_attr_pretty_name attributes { names = ["y"] } 1268596da62dSChris Lattner // CHECK: %y = test.string_attr_pretty_name 1269596da62dSChris Lattner // CHECK-NOT: attributes 1270596da62dSChris Lattner 1271596da62dSChris Lattner // Conflicts with the 'y' name, so need an explicit attribute. 1272596da62dSChris Lattner %0 = "test.string_attr_pretty_name"() { names = ["y"]} : () -> i32 1273596da62dSChris Lattner // CHECK: %y_0 = test.string_attr_pretty_name attributes {names = ["y"]} 1274596da62dSChris Lattner 1275596da62dSChris Lattner // Name contains a space. 1276596da62dSChris Lattner %1 = "test.string_attr_pretty_name"() { names = ["space name"]} : () -> i32 1277596da62dSChris Lattner // CHECK: %space_name = test.string_attr_pretty_name attributes {names = ["space name"]} 1278596da62dSChris Lattner 1279596da62dSChris Lattner "unknown.use"(%x, %YY, %0, %1) : (i32, i32, i32, i32) -> () 1280596da62dSChris Lattner 1281596da62dSChris Lattner // Multi-result support. 1282596da62dSChris Lattner 1283596da62dSChris Lattner %a, %b, %c = test.string_attr_pretty_name 1284596da62dSChris Lattner // CHECK: %a, %b, %c = test.string_attr_pretty_name 1285596da62dSChris Lattner // CHECK-NOT: attributes 1286596da62dSChris Lattner 1287596da62dSChris Lattner %q:3, %r = test.string_attr_pretty_name 1288596da62dSChris Lattner // CHECK: %q, %q_1, %q_2, %r = test.string_attr_pretty_name attributes {names = ["q", "q", "q", "r"]} 1289596da62dSChris Lattner 1290596da62dSChris Lattner // CHECK: return 1291596da62dSChris Lattner return 1292596da62dSChris Lattner} 12939de4ee38SStephen Neuendorffer 1294387f9554SMehdi Amini 1295387f9554SMehdi Amini// This tests the behavior of "default dialect": 1296387f9554SMehdi Amini// operations like `test.default_dialect` can define a default dialect 1297387f9554SMehdi Amini// used in nested region. 1298387f9554SMehdi Amini// CHECK-LABEL: func @default_dialect 12996a99d290SRiver Riddlefunc.func @default_dialect(%bool : i1) { 1300387f9554SMehdi Amini test.default_dialect { 1301387f9554SMehdi Amini // The test dialect is the default in this region, the following two 1302387f9554SMehdi Amini // operations are parsed identically. 1303387f9554SMehdi Amini // CHECK-NOT: test.parse_integer_literal 1304387f9554SMehdi Amini parse_integer_literal : 5 1305387f9554SMehdi Amini // CHECK: parse_integer_literal : 6 1306387f9554SMehdi Amini test.parse_integer_literal : 6 1307387f9554SMehdi Amini // Verify that only an op prefix is stripped, not an attribute value for 1308387f9554SMehdi Amini // example. 1309387f9554SMehdi Amini // CHECK: "test.op_with_attr"() {test.attr = "test.value"} : () -> () 1310387f9554SMehdi Amini "test.op_with_attr"() {test.attr = "test.value"} : () -> () 1311122e6858SAlex Zinenko // Verify that the prefix is not stripped when it can lead to ambiguity. 1312122e6858SAlex Zinenko // CHECK: test.op.with_dot_in_name 1313122e6858SAlex Zinenko test.op.with_dot_in_name 1314122e6858SAlex Zinenko // This is an unregistered operation, the printing/parsing is handled by the 1315122e6858SAlex Zinenko // dialect, and the dialect prefix should not be stripped while printing 1316122e6858SAlex Zinenko // because of potential ambiguity. 1317122e6858SAlex Zinenko // CHECK: test.dialect_custom_printer.with.dot 1318122e6858SAlex Zinenko test.dialect_custom_printer.with.dot 1319387f9554SMehdi Amini "test.terminator"() : ()->() 1320387f9554SMehdi Amini } 132123aa5a74SRiver Riddle // The same operation outside of the region does not have an func. prefix. 1322ace01605SRiver Riddle // CHECK: return 132323aa5a74SRiver Riddle func.return 1324387f9554SMehdi Amini} 1325387f9554SMehdi Amini 132662828865SStephen Neuendorffer// CHECK-LABEL: func @unreachable_dominance_violation_ok 13276a99d290SRiver Riddlefunc.func @unreachable_dominance_violation_ok() -> i1 { 1328a54f4eaeSMogball// CHECK: [[VAL:%.*]] = arith.constant false 132962828865SStephen Neuendorffer// CHECK: return [[VAL]] : i1 133062828865SStephen Neuendorffer// CHECK: ^bb1: // no predecessors 133162828865SStephen Neuendorffer// CHECK: [[VAL2:%.*]]:3 = "bar"([[VAL3:%.*]]) : (i64) -> (i1, i1, i1) 1332ace01605SRiver Riddle// CHECK: cf.br ^bb3 133362828865SStephen Neuendorffer// CHECK: ^bb2: // pred: ^bb2 1334ace01605SRiver Riddle// CHECK: cf.br ^bb2 133562828865SStephen Neuendorffer// CHECK: ^bb3: // pred: ^bb1 133662828865SStephen Neuendorffer// CHECK: [[VAL3]] = "foo"() : () -> i64 133762828865SStephen Neuendorffer// CHECK: return [[VAL2]]#1 : i1 133862828865SStephen Neuendorffer// CHECK: } 1339a54f4eaeSMogball %c = arith.constant false 134062828865SStephen Neuendorffer return %c : i1 134162828865SStephen Neuendorffer^bb1: 13429de4ee38SStephen Neuendorffer // %1 is not dominated by it's definition, but block is not reachable. 134362828865SStephen Neuendorffer %2:3 = "bar"(%1) : (i64) -> (i1,i1,i1) 1344ace01605SRiver Riddle cf.br ^bb3 134562828865SStephen Neuendorffer^bb2: 1346ace01605SRiver Riddle cf.br ^bb2 134762828865SStephen Neuendorffer^bb3: 134862828865SStephen Neuendorffer %1 = "foo"() : ()->i64 134962828865SStephen Neuendorffer return %2#1 : i1 135062828865SStephen Neuendorffer} 135162828865SStephen Neuendorffer 135262828865SStephen Neuendorffer// CHECK-LABEL: func @graph_region_in_hierarchy_ok 13536a99d290SRiver Riddlefunc.func @graph_region_in_hierarchy_ok() -> i64 { 1354ace01605SRiver Riddle// CHECK: cf.br ^bb2 135562828865SStephen Neuendorffer// CHECK: ^bb1: 135662828865SStephen Neuendorffer// CHECK: test.graph_region { 135762828865SStephen Neuendorffer// CHECK: [[VAL2:%.*]]:3 = "bar"([[VAL3:%.*]]) : (i64) -> (i1, i1, i1) 135862828865SStephen Neuendorffer// CHECK: } 1359ace01605SRiver Riddle// CHECK: cf.br ^bb3 136062828865SStephen Neuendorffer// CHECK: ^bb2: // pred: ^bb0 136162828865SStephen Neuendorffer// CHECK: [[VAL3]] = "foo"() : () -> i64 1362ace01605SRiver Riddle// CHECK: cf.br ^bb1 136362828865SStephen Neuendorffer// CHECK: ^bb3: // pred: ^bb1 136462828865SStephen Neuendorffer// CHECK: return [[VAL3]] : i64 136562828865SStephen Neuendorffer// CHECK: } 1366ace01605SRiver Riddle cf.br ^bb2 136762828865SStephen Neuendorffer^bb1: 136862828865SStephen Neuendorffer test.graph_region { 136962828865SStephen Neuendorffer // %1 is well-defined here, since bb2 dominates bb1. 137062828865SStephen Neuendorffer %2:3 = "bar"(%1) : (i64) -> (i1,i1,i1) 137162828865SStephen Neuendorffer } 1372ace01605SRiver Riddle cf.br ^bb4 137362828865SStephen Neuendorffer^bb2: 137462828865SStephen Neuendorffer %1 = "foo"() : ()->i64 1375ace01605SRiver Riddle cf.br ^bb1 137662828865SStephen Neuendorffer^bb4: 137762828865SStephen Neuendorffer return %1 : i64 137862828865SStephen Neuendorffer} 137962828865SStephen Neuendorffer 138062828865SStephen Neuendorffer// CHECK-LABEL: func @graph_region_kind 13816a99d290SRiver Riddlefunc.func @graph_region_kind() -> () { 138262828865SStephen Neuendorffer// CHECK: [[VAL2:%.*]]:3 = "bar"([[VAL3:%.*]]) : (i64) -> (i1, i1, i1) 138362828865SStephen Neuendorffer// CHECK: [[VAL3]] = "baz"([[VAL2]]#0) : (i1) -> i64 138462828865SStephen Neuendorffer test.graph_region { 13857557530fSFangrui Song // %1 OK here in graph region. 138662828865SStephen Neuendorffer %2:3 = "bar"(%1) : (i64) -> (i1,i1,i1) 138762828865SStephen Neuendorffer %1 = "baz"(%2#0) : (i1) -> (i64) 138862828865SStephen Neuendorffer } 138962828865SStephen Neuendorffer return 139062828865SStephen Neuendorffer} 139162828865SStephen Neuendorffer 139262828865SStephen Neuendorffer// CHECK-LABEL: func @graph_region_inside_ssacfg_region 13936a99d290SRiver Riddlefunc.func @graph_region_inside_ssacfg_region() -> () { 139462828865SStephen Neuendorffer// CHECK: "test.ssacfg_region" 139562828865SStephen Neuendorffer// CHECK: [[VAL3:%.*]] = "baz"() : () -> i64 139662828865SStephen Neuendorffer// CHECK: test.graph_region { 139762828865SStephen Neuendorffer// CHECK: [[VAL2:%.*]]:3 = "bar"([[VAL3]]) : (i64) -> (i1, i1, i1) 139862828865SStephen Neuendorffer// CHECK: } 139962828865SStephen Neuendorffer// CHECK: [[VAL4:.*]] = "baz"() : () -> i64 140062828865SStephen Neuendorffer "test.ssacfg_region"() ({ 140162828865SStephen Neuendorffer %1 = "baz"() : () -> (i64) 140262828865SStephen Neuendorffer test.graph_region { 140362828865SStephen Neuendorffer %2:3 = "bar"(%1) : (i64) -> (i1,i1,i1) 140462828865SStephen Neuendorffer } 140562828865SStephen Neuendorffer %3 = "baz"() : () -> (i64) 140662828865SStephen Neuendorffer }) : () -> () 140762828865SStephen Neuendorffer return 140862828865SStephen Neuendorffer} 140962828865SStephen Neuendorffer 141062828865SStephen Neuendorffer// CHECK-LABEL: func @graph_region_in_graph_region_ok 14116a99d290SRiver Riddlefunc.func @graph_region_in_graph_region_ok() -> () { 141262828865SStephen Neuendorffer// CHECK: test.graph_region { 141362828865SStephen Neuendorffer// CHECK: test.graph_region { 141462828865SStephen Neuendorffer// CHECK: [[VAL2:%.*]]:3 = "bar"([[VAL3:%.*]]) : (i64) -> (i1, i1, i1) 141562828865SStephen Neuendorffer// CHECK: } 141662828865SStephen Neuendorffer// CHECK: [[VAL3]] = "foo"() : () -> i64 141762828865SStephen Neuendorffer// CHECK: } 141862828865SStephen Neuendorffertest.graph_region { 141962828865SStephen Neuendorffer test.graph_region { 142062828865SStephen Neuendorffer // %1 is well-defined here since defined in graph region 142162828865SStephen Neuendorffer %2:3 = "bar"(%1) : (i64) -> (i1,i1,i1) 142262828865SStephen Neuendorffer } 142362828865SStephen Neuendorffer %1 = "foo"() : ()->i64 142462828865SStephen Neuendorffer "test.terminator"() : ()->() 142562828865SStephen Neuendorffer } 142662828865SStephen Neuendorffer return 142762828865SStephen Neuendorffer} 142862828865SStephen Neuendorffer 142962828865SStephen Neuendorffer// CHECK: test.graph_region { 143062828865SStephen Neuendorffertest.graph_region { 143162828865SStephen Neuendorffer// CHECK: [[VAL1:%.*]] = "op1"([[VAL3:%.*]]) : (i32) -> i32 143262828865SStephen Neuendorffer// CHECK: [[VAL2:%.*]] = "test.ssacfg_region"([[VAL1]], [[VAL2]], [[VAL3]], [[VAL4:%.*]]) ({ 143362828865SStephen Neuendorffer// CHECK: [[VAL5:%.*]] = "op2"([[VAL1]], [[VAL2]], [[VAL3]], [[VAL4]]) : (i32, i32, i32, i32) -> i32 143462828865SStephen Neuendorffer// CHECK: }) : (i32, i32, i32, i32) -> i32 143562828865SStephen Neuendorffer// CHECK: [[VAL3]] = "op2"([[VAL1]], [[VAL4]]) : (i32, i32) -> i32 143662828865SStephen Neuendorffer// CHECK: [[VAL4]] = "op3"([[VAL1]]) : (i32) -> i32 143762828865SStephen Neuendorffer %1 = "op1"(%3) : (i32) -> (i32) 143862828865SStephen Neuendorffer %2 = "test.ssacfg_region"(%1, %2, %3, %4) ({ 143962828865SStephen Neuendorffer %5 = "op2"(%1, %2, %3, %4) : 144062828865SStephen Neuendorffer (i32, i32, i32, i32) -> (i32) 144162828865SStephen Neuendorffer }) : (i32, i32, i32, i32) -> (i32) 144262828865SStephen Neuendorffer %3 = "op2"(%1, %4) : (i32, i32) -> (i32) 144362828865SStephen Neuendorffer %4 = "op3"(%1) : (i32) -> (i32) 144462828865SStephen Neuendorffer} 144562828865SStephen Neuendorffer 144662828865SStephen Neuendorffer// CHECK: "unregistered_func_might_have_graph_region"() ({ 144762828865SStephen Neuendorffer// CHECK: [[VAL1:%.*]] = "foo"([[VAL1]], [[VAL2:%.*]]) : (i64, i64) -> i64 144862828865SStephen Neuendorffer// CHECK: [[VAL2]] = "bar"([[VAL1]]) 144962828865SStephen Neuendorffer"unregistered_func_might_have_graph_region"() ({ 145062828865SStephen Neuendorffer %1 = "foo"(%1, %2) : (i64, i64) -> i64 145162828865SStephen Neuendorffer %2 = "bar"(%1) : (i64) -> i64 145262828865SStephen Neuendorffer "unregistered_terminator"() : () -> () 14534a3460a7SRiver Riddle}) {sym_name = "unregistered_op_dominance_violation_ok", function_type = () -> i1} : () -> () 1454a0c776fcSMehdi Amini 1455a0c776fcSMehdi Amini// This is an unregister operation, the printing/parsing is handled by the dialect. 1456a0c776fcSMehdi Amini// CHECK: test.dialect_custom_printer custom_format 1457a0c776fcSMehdi Aminitest.dialect_custom_printer custom_format 14580845635eSMogball 14590845635eSMogball// This is a registered operation with no custom parser and printer, and should 14600845635eSMogball// be handled by the dialect. 14610845635eSMogball// CHECK: test.dialect_custom_format_fallback custom_format_fallback 14620845635eSMogballtest.dialect_custom_format_fallback custom_format_fallback 1463554839ecSAlex Zinenko 1464554839ecSAlex Zinenko// Check that an op with an optional result parses f80 as type. 1465554839ecSAlex Zinenko// CHECK: test.format_optional_result_d_op : f80 1466554839ecSAlex Zinenkotest.format_optional_result_d_op : f80 1467