brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.3 KiB · 102162a Raw
372 lines · plain
1; RUN: mlir-translate -import-llvm -split-input-file %s | FileCheck %s2 3%sub_struct = type {}4%my_struct = type { %sub_struct, i64 }5 6; CHECK:  llvm.mlir.global external @global_struct7; CHECK-SAME:  {addr_space = 0 : i32, alignment = 8 : i64}8; CHECK-SAME:  !llvm.struct<"my_struct", (struct<"sub_struct", ()>, i64)>9@global_struct = external global %my_struct, align 810 11; CHECK:  llvm.mlir.global external @global_float12; CHECK-SAME:  {addr_space = 0 : i32, alignment = 8 : i64} : f6413@global_float = external global double, align 814 15; CHECK:  llvm.mlir.global internal constant @address_before16; CHECK:  = llvm.mlir.addressof @global_int : !llvm.ptr17@address_before = internal constant ptr @global_int18 19; CHECK:  llvm.mlir.global external @global_int20; CHECK-SAME:  {addr_space = 0 : i32, alignment = 8 : i64} : i3221@global_int = external global i32, align 822 23; CHECK:  llvm.mlir.global internal constant @address_after24; CHECK:  = llvm.mlir.addressof @global_int : !llvm.ptr25@address_after = internal constant ptr @global_int26 27; CHECK:  llvm.mlir.global internal @global_string("hello world")28@global_string = internal global [11 x i8] c"hello world"29 30; CHECK:  llvm.mlir.global external @global_vector31; CHECK-SAME:  {addr_space = 0 : i32} : vector<8xi32>32@global_vector = external global <8 x i32>33 34; CHECK: llvm.mlir.global internal constant @global_gep_const_expr35; CHECK-SAME:  {addr_space = 0 : i32, dso_local} : !llvm.ptr {36; CHECK-DAG:  %[[ADDR:[0-9]+]] = llvm.mlir.addressof @global_int : !llvm.ptr37; CHECK-DAG:  %[[IDX:[0-9]+]] = llvm.mlir.constant(2 : i32) : i3238; CHECK-DAG:  %[[GEP:[0-9]+]] = llvm.getelementptr %[[ADDR]][%[[IDX]]] : (!llvm.ptr, i32) -> !llvm.ptr39; CHECK-DAG:  llvm.return %[[GEP]] : !llvm.ptr40@global_gep_const_expr = internal constant ptr getelementptr (i32, ptr @global_int, i32 2)41 42; // -----43 44; Verifies that converting a reference to a global does not convert the global45; a second time.46 47; CHECK-LABEL: llvm.mlir.global external constant @reference48; CHECK-NEXT: %[[ADDR:.*]] = llvm.mlir.addressof @simple49; CHECK-NEXT: llvm.return %[[ADDR]]50@reference = constant ptr @simple51 52@simple = global { ptr } { ptr null }53 54; // -----55 56; CHECK-LABEL: llvm.mlir.global external @recursive57; CHECK: %[[ADDR:.*]] = llvm.mlir.addressof @recursive58; CHECK: llvm.return %[[ADDR]]59@recursive = global ptr @recursive60 61; // -----62 63; alignment attribute.64 65; CHECK:  llvm.mlir.global private @global_int_align_3266; CHECK-SAME:  (42 : i64) {addr_space = 0 : i32, alignment = 32 : i64, dso_local} : i6467@global_int_align_32 = private global i64 42, align 3268 69; CHECK:  llvm.mlir.global private @global_int_align_6470; CHECK-SAME:  (42 : i64) {addr_space = 0 : i32, alignment = 64 : i64, dso_local} : i6471@global_int_align_64 = private global i64 42, align 6472 73; // -----74 75; dso_local attribute.76 77%sub_struct = type {}78%my_struct = type { %sub_struct, i64 }79 80; CHECK:  llvm.mlir.global external @dso_local_var81; CHECK-SAME:  {addr_space = 0 : i32, dso_local} : !llvm.struct<"my_struct", (struct<"sub_struct", ()>, i64)>82@dso_local_var = external dso_local global %my_struct83 84; // -----85 86; thread_local attribute.87 88%sub_struct = type {}89%my_struct = type { %sub_struct, i64 }90 91; CHECK:  llvm.mlir.global external thread_local @thread_local_var92; CHECK-SAME:  {addr_space = 0 : i32} : !llvm.struct<"my_struct", (struct<"sub_struct", ()>, i64)>93@thread_local_var = external thread_local global %my_struct94 95; // -----96 97; addr_space attribute.98 99; CHECK:  llvm.mlir.global external @addr_space_var100; CHECK-SAME:  (0 : i32) {addr_space = 6 : i32} : i32101@addr_space_var = addrspace(6) global i32 0102 103; // -----104 105; Linkage attributes.106 107; CHECK:  llvm.mlir.global private @private108; CHECK-SAME:  (42 : i32) {addr_space = 0 : i32, dso_local} : i32109@private = private global i32 42110 111; CHECK:  llvm.mlir.global internal @internal112; CHECK-SAME:  (42 : i32) {addr_space = 0 : i32, dso_local} : i32113@internal = internal global i32 42114 115; CHECK:  llvm.mlir.global available_externally @available_externally116; CHECK-SAME:  (42 : i32) {addr_space = 0 : i32}  : i32117@available_externally = available_externally global i32 42118 119; CHECK:  llvm.mlir.global linkonce @linkonce120; CHECK-SAME:  (42 : i32) {addr_space = 0 : i32} : i32121@linkonce = linkonce global i32 42122 123; CHECK:  llvm.mlir.global weak @weak124; CHECK-SAME:  (42 : i32) {addr_space = 0 : i32} : i32125@weak = weak global i32 42126 127; CHECK:  llvm.mlir.global common @common128; CHECK-SAME:  (0 : i32) {addr_space = 0 : i32} : i32129@common = common global i32 zeroinitializer130 131; CHECK:  llvm.mlir.global appending @appending132; CHECK-SAME:  (dense<[0, 1]> : tensor<2xi32>) {addr_space = 0 : i32} : !llvm.array<2 x i32>133@appending = appending global [2 x i32] [i32 0, i32 1]134 135; CHECK:  llvm.mlir.global extern_weak @extern_weak136; CHECK-SAME:  {addr_space = 0 : i32} : i32137@extern_weak = extern_weak global i32138 139; CHECK:  llvm.mlir.global linkonce_odr @linkonce_odr140; CHECK-SAME:  (42 : i32) {addr_space = 0 : i32} : i32141@linkonce_odr = linkonce_odr global i32 42142 143; CHECK:  llvm.mlir.global weak_odr @weak_odr144; CHECK-SAME:  (42 : i32) {addr_space = 0 : i32} : i32145@weak_odr = weak_odr global i32 42146 147; CHECK:  llvm.mlir.global external @external148; CHECK-SAME:  {addr_space = 0 : i32} : i32149@external = external global i32150 151; // -----152 153; local_unnamed_addr and unnamed_addr attributes.154 155; CHECK:  llvm.mlir.global private constant @no_unnamed_addr156; CHECK-SAME:  (42 : i64) {addr_space = 0 : i32, dso_local} : i64157@no_unnamed_addr = private constant i64 42158 159; CHECK:  llvm.mlir.global private local_unnamed_addr constant @local_unnamed_addr160; CHECK-SAME:  (42 : i64) {addr_space = 0 : i32, dso_local} : i64161@local_unnamed_addr = private local_unnamed_addr constant i64 42162 163; CHECK:  llvm.mlir.global private unnamed_addr constant @unnamed_addr164; CHECK-SAME:  (42 : i64) {addr_space = 0 : i32, dso_local} : i64165@unnamed_addr = private unnamed_addr constant i64 42166 167; // -----168 169; section attribute.170 171; CHECK:  llvm.mlir.global internal constant @sectionvar("hello world")172; CHECK-SAME:  {addr_space = 0 : i32, dso_local, section = ".mysection"}173@sectionvar = internal constant [11 x i8] c"hello world", section ".mysection"174 175; // -----176 177; Sequential constants.178 179; CHECK:  llvm.mlir.global internal constant @vector_constant180; CHECK-SAME:  (dense<[1, 2]> : vector<2xi32>)181; CHECK-SAME:  {addr_space = 0 : i32, dso_local} : vector<2xi32>182@vector_constant = internal constant <2 x i32> <i32 1, i32 2>183 184; CHECK:  llvm.mlir.global internal constant @array_constant185; CHECK-SAME:  (dense<[1.000000e+00, 2.000000e+00]> : tensor<2xf32>)186; CHECK-SAME:  {addr_space = 0 : i32, dso_local} : !llvm.array<2 x f32>187@array_constant = internal constant [2 x float] [float 1., float 2.]188 189; CHECK{LITERAL}: llvm.mlir.global internal constant @nested_array_constant(dense<[[1, 2], [3, 4]]> : tensor<2x2xi32>)190; CHECK-SAME:  {addr_space = 0 : i32, dso_local} : !llvm.array<2 x array<2 x i32>>191@nested_array_constant = internal constant [2 x [2 x i32]] [[2 x i32] [i32 1, i32 2], [2 x i32] [i32 3, i32 4]]192 193; CHECK{LITERAL}: llvm.mlir.global internal constant @nested_array_constant3(dense<[[[1, 2], [3, 4]]]> : tensor<1x2x2xi32>)194; CHECK-SAME:  {addr_space = 0 : i32, dso_local} : !llvm.array<1 x array<2 x array<2 x i32>>>195@nested_array_constant3 = internal constant [1 x [2 x [2 x i32]]] [[2 x [2 x i32]] [[2 x i32] [i32 1, i32 2], [2 x i32] [i32 3, i32 4]]]196 197; CHECK{LITERAL}: llvm.mlir.global internal constant @nested_array_vector(dense<[[[1, 2], [3, 4]]]> : vector<1x2x2xi32>)198; CHECK-SAME:  {addr_space = 0 : i32, dso_local} : !llvm.array<1 x array<2 x vector<2xi32>>>199@nested_array_vector = internal constant [1 x [2 x <2 x i32>]] [[2 x <2 x i32>] [<2 x i32> <i32 1, i32 2>, <2 x i32> <i32 3, i32 4>]]200 201; CHECK:  llvm.mlir.global internal constant @vector_constant_zero202; CHECK-SAME:  (dense<0> : vector<2xi24>)203; CHECK-SAME:  {addr_space = 0 : i32, dso_local} : vector<2xi24>204@vector_constant_zero = internal constant <2 x i24> zeroinitializer205 206; CHECK:  llvm.mlir.global internal constant @array_constant_zero207; CHECK-SAME:  (dense<0.000000e+00> : tensor<2xbf16>)208; CHECK-SAME:  {addr_space = 0 : i32, dso_local} : !llvm.array<2 x bf16>209@array_constant_zero = internal constant [2 x bfloat] zeroinitializer210 211; CHECK: llvm.mlir.global internal constant @nested_array_constant3_zero212; CHECK-SAME:  (dense<0> : tensor<1x2x2xi32>)213; CHECK-SAME:  {addr_space = 0 : i32, dso_local} : !llvm.array<1 x array<2 x array<2 x i32>>>214@nested_array_constant3_zero = internal constant [1 x [2 x [2 x i32]]] zeroinitializer215 216; CHECK: llvm.mlir.global internal constant @nested_array_vector_zero217; CHECK-SAME:  (dense<0> : vector<1x2x2xi32>)218; CHECK-SAME:  {addr_space = 0 : i32, dso_local} : !llvm.array<1 x array<2 x vector<2xi32>>>219@nested_array_vector_zero = internal constant [1 x [2 x <2 x i32>]] zeroinitializer220 221; CHECK{LITERAL}: llvm.mlir.global internal constant @nested_bool_array_constant(dense<[[true, false]]> : tensor<1x2xi1>)222; CHECK-SAME:  {addr_space = 0 : i32, dso_local} : !llvm.array<1 x array<2 x i1>>223@nested_bool_array_constant = internal constant [1 x [2 x i1]] [[2 x i1] [i1 1, i1 0]]224 225; CHECK: llvm.mlir.global internal constant @quad_float_constant226; CHECK-SAME:  dense<[227; CHECK-SAME:    529.340000000000031832314562052488327228; CHECK-SAME:    529.340000000001850821718107908964157229; CHECK-SAME:  ]> : vector<2xf128>)230; CHECK-SAME:  {addr_space = 0 : i32, dso_local} : vector<2xf128>231@quad_float_constant = internal constant <2 x fp128> <fp128 0xLF000000000000000400808AB851EB851, fp128 0xLF000000000000000400808AB851EB852>232 233; CHECK: llvm.mlir.global internal constant @quad_float_splat_constant234; CHECK-SAME:  dense<529.340000000000031832314562052488327> : vector<2xf128>)235; CHECK-SAME:  {addr_space = 0 : i32, dso_local} : vector<2xf128>236@quad_float_splat_constant = internal constant <2 x fp128> <fp128 0xLF000000000000000400808AB851EB851, fp128 0xLF000000000000000400808AB851EB851>237 238; // -----239 240; CHECK: llvm.mlir.global_ctors ctors = [@foo, @bar], priorities = [0 : i32, 42 : i32], data = [#llvm.zero, #llvm.zero]241; CHECK: llvm.mlir.global_dtors dtors = [@foo], priorities = [0 : i32], data = [#llvm.zero]242@llvm.global_ctors = appending global [2 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 0, ptr @foo, ptr null }, { i32, ptr, ptr } { i32 42, ptr @bar, ptr null }]243@llvm.global_dtors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 0, ptr @foo, ptr null }]244 245define void @foo() {246  ret void247}248 249define void @bar() {250  ret void251}252 253; // -----254 255; CHECK: llvm.mlir.global_ctors ctors = [], priorities = [], data = []256@llvm.global_ctors = appending global [0 x { i32, ptr, ptr }] zeroinitializer257 258; CHECK: llvm.mlir.global_dtors dtors = [], priorities = [], data = []259@llvm.global_dtors = appending global [0 x { i32, ptr, ptr }] zeroinitializer260 261; // -----262 263; llvm.mlir.global_dtors dtors = [@foo], priorities = [0 : i32], data = [@foo]264@llvm.global_dtors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 0, ptr @foo, ptr @foo }]265 266define void @foo() {267  ret void268}269 270; // -----271 272; Visibility attribute.273 274; CHECK: llvm.mlir.global external hidden constant @hidden("string")275@hidden = hidden constant [6 x i8] c"string"276 277; CHECK: llvm.mlir.global external protected constant @protected(42 : i64)278@protected = protected constant i64 42279 280; // -----281 282; CHECK-DAG: #[[TYPE:.*]] = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "int", sizeInBits = 32, encoding = DW_ATE_signed>283; CHECK-DAG: #[[FILE:.*]] = #llvm.di_file<"source.c" in "/path/to/file">284; CHECK-DAG: #[[CU:.*]] = #llvm.di_compile_unit<id = distinct[{{.*}}]<>, sourceLanguage = DW_LANG_C99, file = #[[FILE]], isOptimized = false, emissionKind = None>285; CHECK-DAG: #[[SPROG:.*]] = #llvm.di_subprogram<id = distinct[{{.*}}]<>, scope = #[[CU]], name = "foo", file = #[[FILE]], line = 5, subprogramFlags = Definition>286; CHECK-DAG: #[[GVAR0:.*]] = #llvm.di_global_variable<scope = #[[SPROG]], name = "foo", linkageName = "foo", file = #[[FILE]], line = 7, type = #[[TYPE]], isLocalToUnit = true>287; CHECK-DAG: #[[GVAR1:.*]] = #llvm.di_global_variable<scope = #[[SPROG]], name = "bar", linkageName = "bar", file = #[[FILE]], line = 8, type = #[[TYPE]], isLocalToUnit = true>288; CHECK-DAG: #[[EXPR0:.*]] = #llvm.di_global_variable_expression<var = #[[GVAR0]], expr = <[DW_OP_LLVM_fragment(0, 16)]>>289; CHECK-DAG: #[[EXPR1:.*]] = #llvm.di_global_variable_expression<var = #[[GVAR1]], expr = <[DW_OP_constu(3), DW_OP_plus]>>290; CHECK-DAG: llvm.mlir.global external @foo() {addr_space = 0 : i32, alignment = 8 : i64, dbg_exprs = [#[[EXPR0]]]} : i32291; CHECK-DAG: llvm.mlir.global external @bar() {addr_space = 0 : i32, alignment = 8 : i64, dbg_exprs = [#[[EXPR1]]]} : i32292 293@foo = external global i32, align 8, !dbg !5294@bar = external global i32, align 8, !dbg !7295!0 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)296!1 = !DIFile(filename: "source.c", directory: "/path/to/file")297!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1)298!3 = distinct !DISubprogram(name: "foo", scope: !2, file: !1, line: 5)299!4 = !DIGlobalVariable(name: "foo", linkageName: "foo", scope: !3, file: !1, line: 7, type: !0, isLocal: true, isDefinition: false)300!5 = !DIGlobalVariableExpression(var: !4, expr: !DIExpression(DW_OP_LLVM_fragment, 0, 16))301!6 = !DIGlobalVariable(name: "bar", linkageName: "bar", scope: !3, file: !1, line: 8, type: !0, isLocal: true, isDefinition: false)302!7 = !DIGlobalVariableExpression(var: !6, expr: !DIExpression(DW_OP_constu, 3, DW_OP_plus))303!100 = !{i32 2, !"Debug Info Version", i32 3}304!llvm.module.flags = !{!100}305 306; // -----307 308; Nameless and scopeless global variable.309 310; CHECK-DAG: #[[FILE:.*]] = #llvm.di_file311; CHECK-DAG: #[[COMPOSITE_TYPE:.*]] = #llvm.di_composite_type312; CHECK-DAG: #[[GLOBAL_VAR:.*]] = #llvm.di_global_variable<file = #[[FILE]], line = 268, type = #[[COMPOSITE_TYPE]], isLocalToUnit = true, isDefined = true>313; CHECK-DAG: #[[GLOBAL_VAR_EXPR:.*]] = #llvm.di_global_variable_expression<var = #[[GLOBAL_VAR]], expr = <>>314 315; CHECK:  llvm.mlir.global private unnamed_addr constant @mlir.llvm.nameless_global_0("0\00")316; We skip over @mlir.llvm.nameless_global.1 and 2 because they exist317; CHECK:  llvm.mlir.global private unnamed_addr constant @mlir.llvm.nameless_global_3("1\00")318;319; CHECK:  llvm.mlir.global internal constant @zero() {addr_space = 0 : i32, dso_local} : !llvm.ptr {320; CHECK:    llvm.mlir.addressof @mlir.llvm.nameless_global_0 : !llvm.ptr321; CHECK:  llvm.mlir.global internal constant @one() {addr_space = 0 : i32, dso_local} : !llvm.ptr {322; CHECK:    llvm.mlir.addressof @mlir.llvm.nameless_global_3 : !llvm.ptr323 324; CHECK: llvm.mlir.global external constant @".str.1"() {addr_space = 0 : i32, dbg_exprs = [#[[GLOBAL_VAR_EXPR]]]}325 326@0 = private unnamed_addr constant [2 x i8] c"0\00"327@1 = private unnamed_addr constant [2 x i8] c"1\00"328@zero = internal constant ptr @0329@one = internal constant ptr @1330 331@"mlir.llvm.nameless_global_1" = external constant [10 x i8], !dbg !0332declare void @"mlir.llvm.nameless_global_2"()333 334@.str.1 = external constant [10 x i8], !dbg !0335 336!llvm.module.flags = !{!7}337 338!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())339!1 = distinct !DIGlobalVariable(scope: null, file: !2, line: 268, type: !3, isLocal: true, isDefinition: true)340!2 = !DIFile(filename: "source.c", directory: "/path/to/file")341!3 = !DICompositeType(tag: DW_TAG_array_type, baseType: !4, size: 80, elements: !6)342!4 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !5)343!5 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)344!6 = !{}345!7 = !{i32 2, !"Debug Info Version", i32 3}346 347; // -----348 349; Verify that unnamed globals can also be referenced before they are defined.350 351; CHECK:  llvm.mlir.global internal constant @reference()352; CHECK:    llvm.mlir.addressof @mlir.llvm.nameless_global_0 : !llvm.ptr353@reference = internal constant ptr @0354 355; CHECK:  llvm.mlir.global private unnamed_addr constant @mlir.llvm.nameless_global_0("0\00")356@0 = private unnamed_addr constant [2 x i8] c"0\00"357 358; // -----359 360; CHECK-LABEL: llvm.mlir.global external @target_specific_attrs_only361; CHECK-SAME: target_specific_attrs = {{\[\[}}"memory", "0"], ["int-attr", "4"], "no-enum-attr", ["string-attr", "string"]]}362@target_specific_attrs_only = external global double #0363attributes #0 = { readnone "int-attr"="4" "no-enum-attr" "string-attr"="string" }364 365; // -----366 367; CHECK-LABEL: llvm.mlir.global external @target_specific_attrs_combined368; CHECK-SAME: alignment = 4 : i64, section = "mysection",369; CHECK-SAME: target_specific_attrs = ["norecurse", ["bss-section", "my_bss.1"]]}370@target_specific_attrs_combined = global i32 2, align 4, section "mysection" #0371attributes #0 = { norecurse "bss-section"="my_bss.1" }372