blob: 1c3825ef60b51ea9550b8a38bb955ef6f6593a4f [file] [edit]
; RUN: mlir-translate -import-llvm -split-input-file %s --verify-diagnostics | FileCheck %s
; RUN: mlir-translate -import-llvm -emit-expensive-warnings -split-input-file %s -o /dev/null 2>&1 | FileCheck %s --check-prefix=WARN
; CHECK-LABEL: llvm.func @repeated_type_metadata
; CHECK-SAME: function_metadata
; CHECK-SAME: #llvm.func_metadata<"type", <#llvm.md_const<0 : i64>, #llvm.md_string<"typeid0">>>
; CHECK-SAME: #llvm.func_metadata<"type", <#llvm.md_const<0 : i64>, #llvm.md_string<"typeid1">>>
define void @repeated_type_metadata() !type !0 !type !1 {
ret void
}
!0 = !{i64 0, !"typeid0"}
!1 = !{i64 0, !"typeid1"}
; // -----
; CHECK-LABEL: llvm.func @declaration_metadata
; CHECK-SAME: function_metadata
; CHECK-SAME: #llvm.func_metadata<"annotation", <#llvm.md_string<"declaration annotation">>>
declare !annotation !0 void @declaration_metadata()
!0 = !{!"declaration annotation"}
; // -----
declare void @callee()
; CHECK-LABEL: llvm.func @function_ref_metadata
; CHECK-SAME: function_metadata
; CHECK-SAME: #llvm.func_metadata<"callees", <#llvm.md_global_value<@callee>>>
define void @function_ref_metadata() !callees !0 {
ret void
}
!0 = !{ptr @callee}
; // -----
define void @alias_target() {
ret void
}
@alias = alias void (), ptr @alias_target
; CHECK-LABEL: llvm.func @alias_ref_metadata
; CHECK-SAME: function_metadata
; CHECK-SAME: #llvm.func_metadata<"callees", <#llvm.md_global_value<@alias>>>
define void @alias_ref_metadata() !callees !0 {
ret void
}
!0 = !{ptr @alias}
; // -----
@global = global i32 0
; CHECK-LABEL: llvm.func @global_ref_metadata
; CHECK-SAME: function_metadata
; CHECK-SAME: #llvm.func_metadata<"callees", <#llvm.md_global_value<@global>>>
define void @global_ref_metadata() !callees !0 {
ret void
}
!0 = !{ptr @global}
; // -----
@0 = global i32 0
; CHECK-LABEL: llvm.func @nameless_global_ref_metadata
; CHECK-SAME: function_metadata
; CHECK-SAME: #llvm.func_metadata<"callees", <#llvm.md_global_value<@{{mlir\.llvm\.nameless_global_[0-9]+}}>>>
define void @nameless_global_ref_metadata() !callees !0 {
ret void
}
!0 = !{ptr @0}
; // -----
@ifunc = ifunc void (), ptr @ifunc_resolver
define ptr @ifunc_resolver() {
ret ptr @ifunc_target
}
define void @ifunc_target() {
ret void
}
; CHECK-LABEL: llvm.func @ifunc_ref_metadata
; CHECK-SAME: function_metadata
; CHECK-SAME: #llvm.func_metadata<"callees", <#llvm.md_global_value<@ifunc>>>
define void @ifunc_ref_metadata() !callees !0 {
ret void
}
!0 = !{ptr @ifunc}
; // -----
; WARN: warning: unhandled function metadata:
; WARN-SAME: !{{[0-9]+}} = !{!"unknown", !"sample-pass"}
; WARN-SAME: on @unknown_profile_metadata
; CHECK-LABEL: llvm.func @unknown_profile_metadata()
; CHECK-NOT: function_metadata
; CHECK: llvm.return
define void @unknown_profile_metadata() !prof !0 {
ret void
}
!0 = !{!"unknown", !"sample-pass"}
; // -----
; WARN: warning: unhandled function metadata:
; WARN-SAME: !{{[0-9]+}} = distinct !{!"identity"}
; WARN-SAME: on @distinct_metadata
; CHECK-LABEL: llvm.func @distinct_metadata()
; CHECK-NOT: function_metadata
; CHECK: llvm.return
define void @distinct_metadata() !annotation !0 {
ret void
}
!0 = distinct !{!"identity"}