| // RUN: %eopt --print-activity-analysis=funcs=_Z2fnv %s 2>&1 | FileCheck %s | |
| #tbaa_root = #llvm.tbaa_root<id = "Simple C++ TBAA"> | |
| #tbaa_type_desc = #llvm.tbaa_type_desc<id = "omnipotent char", members = {<#tbaa_root, 0>}> | |
| #tbaa_tag = #llvm.tbaa_tag<base_type = #tbaa_type_desc, access_type = #tbaa_type_desc, offset = 0> | |
| #tbaa_type_desc1 = #llvm.tbaa_type_desc<id = "any pointer", members = {<#tbaa_type_desc, 0>}> | |
| #tbaa_type_desc2 = #llvm.tbaa_type_desc<id = "long", members = {<#tbaa_type_desc, 0>}> | |
| #tbaa_type_desc3 = #llvm.tbaa_type_desc<id = "_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", members = {<#tbaa_type_desc1, 0>}> | |
| #tbaa_tag1 = #llvm.tbaa_tag<base_type = #tbaa_type_desc3, access_type = #tbaa_type_desc1, offset = 0> | |
| #tbaa_type_desc4 = #llvm.tbaa_type_desc<id = "_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", members = {<#tbaa_type_desc3, 0>, <#tbaa_type_desc2, 8>, <#tbaa_type_desc, 16>}> | |
| #tbaa_tag2 = #llvm.tbaa_tag<base_type = #tbaa_type_desc4, access_type = #tbaa_type_desc2, offset = 8> | |
| #tbaa_tag3 = #llvm.tbaa_tag<base_type = #tbaa_type_desc4, access_type = #tbaa_type_desc1, offset = 0> | |
| module attributes { | |
| dlti.dl_spec = #dlti.dl_spec< | |
| #dlti.dl_entry<!llvm.ptr, dense<64> : vector<4xi64>>, | |
| #dlti.dl_entry<i8, dense<8> : vector<2xi64>>, | |
| #dlti.dl_entry<i16, dense<16> : vector<2xi64>>, | |
| #dlti.dl_entry<i1, dense<8> : vector<2xi64>>, | |
| #dlti.dl_entry<f16, dense<16> : vector<2xi64>>, | |
| #dlti.dl_entry<i64, dense<[32, 64]> : vector<2xi64>>, | |
| #dlti.dl_entry<i32, dense<32> : vector<2xi64>>, | |
| #dlti.dl_entry<f128, dense<128> : vector<2xi64>>, | |
| #dlti.dl_entry<f64, dense<64> : vector<2xi64>>, | |
| #dlti.dl_entry<"dlti.endianness", "little">>} { | |
| llvm.mlir.global private unnamed_addr constant @".str"("test string\00") {addr_space = 0 : i32, alignment = 1 : i64, dso_local} | |
| llvm.mlir.global private unnamed_addr constant @".str.2"("%f\0A\00") {addr_space = 0 : i32, alignment = 1 : i64, dso_local} | |
| llvm.mlir.global private unnamed_addr constant @str("Home\00") {addr_space = 0 : i32, alignment = 1 : i64, dso_local} | |
| // CHECK-LABEL: @_Z2fnv: | |
| // CHECK: "alloc": Constant | |
| // CHECK: "casted": Constant | |
| // CHECK: "loaded": Constant | |
| llvm.func @_Z2fnv() { | |
| %0 = llvm.mlir.constant(1 : i32) : i32 | |
| %1 = llvm.mlir.constant(0 : i64) : i64 | |
| %2 = llvm.mlir.constant(2 : i32) : i32 | |
| %3 = llvm.mlir.constant("test string\00") : !llvm.array<12 x i8> | |
| %4 = llvm.mlir.addressof @".str" : !llvm.ptr | |
| %5 = llvm.mlir.constant(11 : i64) : i64 | |
| %6 = llvm.mlir.constant(false) : i1 | |
| %7 = llvm.mlir.constant(0 : i32) : i32 | |
| %8 = llvm.mlir.constant(3 : i64) : i64 | |
| %9 = llvm.mlir.constant(0 : i8) : i8 | |
| %10 = llvm.alloca %0 x !llvm.struct<"class.std::__cxx11::basic_string", (struct<"struct.std::__cxx11::basic_string<char>::_Alloc_hider", (ptr)>, i64, struct<"union.anon", (i64, array<8 x i8>)>)> {alignment = 8 : i64, tag = "alloc"} : (i32) -> !llvm.ptr | |
| %11 = llvm.bitcast %10 : !llvm.ptr to !llvm.ptr | |
| %12 = llvm.getelementptr inbounds %10[%1, 2] : (!llvm.ptr, i64) -> !llvm.ptr, !llvm.struct<"class.std::__cxx11::basic_string", (struct<"struct.std::__cxx11::basic_string<char>::_Alloc_hider", (ptr)>, i64, struct<"union.anon", (i64, array<8 x i8>)>)> | |
| %13 = llvm.bitcast %10 : !llvm.ptr to !llvm.ptr | |
| llvm.store %12, %13 <alignment = 8, tbaa = [#tbaa_tag1]> : !llvm.ptr, !llvm.ptr | |
| %14 = llvm.bitcast %12 {tag = "casted"} : !llvm.ptr to !llvm.ptr | |
| "llvm.intr.memcpy"(%14, %4, %5) <{isVolatile = false}> : (!llvm.ptr, !llvm.ptr, i64) -> () | |
| %15 = llvm.getelementptr inbounds %10[%1, 0, 0] : (!llvm.ptr, i64) -> !llvm.ptr, !llvm.struct<"class.std::__cxx11::basic_string", (struct<"struct.std::__cxx11::basic_string<char>::_Alloc_hider", (ptr)>, i64, struct<"union.anon", (i64, array<8 x i8>)>)> | |
| %16 = llvm.getelementptr inbounds %10[%1, 1] : (!llvm.ptr, i64) -> !llvm.ptr, !llvm.struct<"class.std::__cxx11::basic_string", (struct<"struct.std::__cxx11::basic_string<char>::_Alloc_hider", (ptr)>, i64, struct<"union.anon", (i64, array<8 x i8>)>)> | |
| llvm.store %5, %16 <alignment = 8, tbaa = [#tbaa_tag2]> : i64, !llvm.ptr | |
| %17 = llvm.getelementptr inbounds %10[%1, 2, 1, %8] : (!llvm.ptr, i64, i64) -> !llvm.ptr, !llvm.struct<"class.std::__cxx11::basic_string", (struct<"struct.std::__cxx11::basic_string<char>::_Alloc_hider", (ptr)>, i64, struct<"union.anon", (i64, array<8 x i8>)>)> | |
| llvm.store %9, %17 <alignment = 1, tbaa = [#tbaa_tag]> : i8, !llvm.ptr | |
| %18 = llvm.call @printf(%14) vararg(!llvm.func<i32 (ptr, ...)>) : (!llvm.ptr) -> i32 | |
| %19 = llvm.load %15 <alignment = 8, tbaa = [#tbaa_tag3]> {tag = "loaded"} : !llvm.ptr -> !llvm.ptr | |
| %20 = llvm.icmp "eq" %19, %14 : !llvm.ptr | |
| llvm.cond_br %20, ^bb2, ^bb1 | |
| ^bb1: // pred: ^bb0 | |
| llvm.call @_ZdlPv(%19) : (!llvm.ptr) -> () | |
| llvm.br ^bb2 | |
| ^bb2: // 2 preds: ^bb0, ^bb1 | |
| llvm.return | |
| } | |
| llvm.func @printf(!llvm.ptr {llvm.nocapture, llvm.readonly}, ...) -> i32 | |
| llvm.func local_unnamed_addr @_ZdlPv(!llvm.ptr) attributes {passthrough = ["nobuiltin", "nounwind"]} | |
| } |