115 lines · plain
1// RUN: mlir-opt -allow-unregistered-dialect %s -mlir-print-debuginfo -mlir-print-local-scope | FileCheck %s2// RUN: mlir-opt -allow-unregistered-dialect %s -mlir-print-debuginfo | FileCheck %s --check-prefix=CHECK-ALIAS3// RUN: mlir-opt -allow-unregistered-dialect %s -mlir-print-debuginfo | mlir-opt -allow-unregistered-dialect -mlir-print-debuginfo | FileCheck %s --check-prefix=CHECK-ALIAS4// This test verifies that debug locations are round-trippable.5 6#set0 = affine_set<(d0) : (1 == 0)>7 8// CHECK-LABEL: func @inline_notation9func.func @inline_notation() -> i32 {10 // CHECK: -> i32 loc("foo")11 %1 = "foo"() : () -> i32 loc("foo")12 13 // CHECK: arith.constant 4 : index loc(callsite("foo" at "mysource.cc":10:8))14 %2 = arith.constant 4 : index loc(callsite("foo" at "mysource.cc":10:8))15 16 // CHECK: affine.for %arg0 loc("IVlocation") = 0 to 8 {17 // CHECK: } loc(fused["foo", "mysource.cc":10:8])18 affine.for %i0 loc("IVlocation") = 0 to 8 {19 } loc(fused["foo", "mysource.cc":10:8])20 21 // CHECK: } loc(fused<"myPass">["foo", "foo2"])22 affine.if #set0(%2) {23 } loc(fused<"myPass">["foo", "foo2"])24 25 // CHECK: } loc(fused<"myPass">["foo"])26 affine.if #set0(%2) {27 } loc(fused<"myPass">["foo"])28 29 // CHECK: return %0 : i32 loc(unknown)30 return %1 : i32 loc(unknown)31}32 33// CHECK-LABEL: func private @loc_attr(i1 {foo.loc_attr = loc(callsite("foo" at "mysource.cc":10:8))})34func.func private @loc_attr(i1 {foo.loc_attr = loc(callsite("foo" at "mysource.cc":10:8))})35 36// CHECK-LABEL: func.func private @filelocrange_attr1(i1 {foo.loc_attr = loc("mysource.cc":10:0)})37func.func private @filelocrange_attr1(i1 {foo.loc_attr = loc("mysource.cc":10)})38// CHECK-LABEL: func.func private @filelocrange_attr2(i1 {foo.loc_attr = loc("mysource.cc":10:8)})39func.func private @filelocrange_attr2(i1 {foo.loc_attr = loc("mysource.cc":10:8)})40// CHECK-LABEL: func.func private @filelocrange_attr3(i1 {foo.loc_attr = loc("mysource.cc":10:8 to :12)})41func.func private @filelocrange_attr3(i1 {foo.loc_attr = loc("mysource.cc":10:8 to :12)})42// CHECK-LABEL: func.func private @filelocrange_attr4(i1 {foo.loc_attr = loc("mysource.cc":10:8 to 12:4)})43func.func private @filelocrange_attr4(i1 {foo.loc_attr = loc("mysource.cc":10:8 to 12:4)})44 45 // Check that locations get properly escaped.46// CHECK-LABEL: func @escape_strings()47func.func @escape_strings() {48 // CHECK: loc("escaped\0A")49 "foo"() : () -> () loc("escaped\n")50 51 // CHECK: loc("escaped\0A")52 "foo"() : () -> () loc("escaped\0A")53 54 // CHECK: loc("escaped\0A":0:0)55 "foo"() : () -> () loc("escaped\n":0:0)56 return57}58 59// CHECK-ALIAS: "foo.op"() : () -> () loc(#[[LOC:.*]])60"foo.op"() : () -> () loc(#loc)61 62// CHECK-LABEL: func @argLocs(63// CHECK-SAME: %arg0: i32 loc({{.*}}locations.mlir":[[# @LINE+1]]:20),64func.func @argLocs(%x: i32,65// CHECK-SAME: %arg1: i64 loc("hotdog")66 %y: i64 loc("hotdog")) {67 return68}69 70// CHECK-LABEL: "foo.unknown_op_with_bbargs"()71// CHECK-ALIAS: "foo.unknown_op_with_bbargs"()72"foo.unknown_op_with_bbargs"() ({73// CHECK-NEXT: ^bb0(%arg0: i32 loc({{.*}}locations.mlir":[[# @LINE+2]]:7),74// CHECK-ALIAS-NEXT: ^bb0(%arg0: i32 loc({{.*}}locations.mlir":[[# @LINE+1]]:7),75 ^bb0(%x: i32,76// CHECK-SAME: %arg1: i32 loc("cheetos"),77// CHECK-ALIAS-SAME: %arg1: i32 loc("cheetos"),78 %y: i32 loc("cheetos"),79// CHECK-SAME: %arg2: i32 loc("out_of_line_location2")):80// CHECK-ALIAS-SAME: %arg2: i32 loc("out_of_line_location2")):81 %z: i32 loc("out_of_line_location2")):82 %1 = arith.addi %x, %y : i3283 "foo.yield"(%1) : (i32) -> ()84 }) : () -> ()85 86// CHECK-LABEL: func @location_name_child_is_name87func.func @location_name_child_is_name() {88 // CHECK: "foo"("foo")89 return loc("foo"("foo"))90}91 92// CHECK-ALIAS: #[[LOC]] = loc("out_of_line_location")93#loc = loc("out_of_line_location")94 95// CHECK-LABEL: @optional_location_specifier96// CHECK: test.attr_with_loc("foo" loc("foo_loc"))97func.func @optional_location_specifier() {98 test.attr_with_loc("foo" loc("foo_loc"))99 return100}101 102// CHECK-LABEL: @dialect_location103// CHECK: test.attr_with_loc("dialectLoc" loc(#test.custom_location<"foo.mlir" * 32>))104func.func @dialect_location() {105 test.attr_with_loc("dialectLoc" loc(#test.custom_location<"foo.mlir"*32>))106 return107}108 109// CHECK-LABEL: @location_attr110// CHECK: test.op_with_loc_attr loc("loc1":10:20) {foo.discardable_loc_attr = loc("loc2":20:30)} loc({{.*}}locations.mlir":[[# @LINE+2]]:3)111func.func @location_attr() {112 test.op_with_loc_attr loc("loc1":10:20) {foo.discardable_loc_attr = loc("loc2":20:30)}113 return114}115