blob: 6ce34a21fda30b1116837d991e3047eb464af443 [file] [log] [blame] [edit]
// 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 : i64, 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 : i64, 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 : i64, 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 : i64, 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"]}
}