46 lines · plain
1// RUN: mlir-opt %s -test-recursive-types | FileCheck %s2 3// CHECK: !testrec = !test.test_rec<type_to_alias, test_rec<type_to_alias>>4// CHECK: ![[$NAME:.*]] = !test.test_rec_alias<name, !test.test_rec_alias<name>>5// CHECK: ![[$NAME5:.*]] = !test.test_rec_alias<name5, !test.test_rec_alias<name3, !test.test_rec_alias<name4, !test.test_rec_alias<name5>>>>6// CHECK: ![[$NAME2:.*]] = !test.test_rec_alias<name2, tuple<!test.test_rec_alias<name2>, i32>>7// CHECK: ![[$NAME4:.*]] = !test.test_rec_alias<name4, !name5>8// CHECK: ![[$NAME3:.*]] = !test.test_rec_alias<name3, !name4>9 10// CHECK-LABEL: @roundtrip11func.func @roundtrip() {12 // CHECK: !test.test_rec<a, test_rec<b, test_type>>13 "test.dummy_op_for_roundtrip"() : () -> !test.test_rec<a, test_rec<b, test_type>>14 // CHECK: !test.test_rec<c, test_rec<c>>15 "test.dummy_op_for_roundtrip"() : () -> !test.test_rec<c, test_rec<c>>16 // Make sure walkSubElementType, which is used to generate aliases, doesn't go17 // into inifinite recursion.18 // CHECK: !testrec19 "test.dummy_op_for_roundtrip"() : () -> !test.test_rec<type_to_alias, test_rec<type_to_alias>>20 21 // CHECK: () -> ![[$NAME]]22 // CHECK: () -> ![[$NAME]]23 "test.dummy_op_for_roundtrip"() : () -> !test.test_rec_alias<name, !test.test_rec_alias<name>>24 "test.dummy_op_for_roundtrip"() : () -> !test.test_rec_alias<name, !test.test_rec_alias<name>>25 26 // CHECK: () -> ![[$NAME2]]27 // CHECK: () -> ![[$NAME2]]28 "test.dummy_op_for_roundtrip"() : () -> !test.test_rec_alias<name2, tuple<!test.test_rec_alias<name2>, i32>>29 "test.dummy_op_for_roundtrip"() : () -> !test.test_rec_alias<name2, tuple<!test.test_rec_alias<name2>, i32>>30 31 // Mutual recursion.32 // CHECK: () -> ![[$NAME3]]33 // CHECK: () -> ![[$NAME4]]34 // CHECK: () -> ![[$NAME5]]35 "test.dummy_op_for_roundtrip"() : () -> !test.test_rec_alias<name3, !test.test_rec_alias<name4, !test.test_rec_alias<name5, !test.test_rec_alias<name3>>>>36 "test.dummy_op_for_roundtrip"() : () -> !test.test_rec_alias<name4, !test.test_rec_alias<name5, !test.test_rec_alias<name3, !test.test_rec_alias<name4>>>>37 "test.dummy_op_for_roundtrip"() : () -> !test.test_rec_alias<name5, !test.test_rec_alias<name3, !test.test_rec_alias<name4, !test.test_rec_alias<name5>>>>38 return39}40 41// CHECK-LABEL: @create42func.func @create() {43 // CHECK: !test.test_rec<some_long_and_unique_name, test_rec<some_long_and_unique_name>>44 return45}46