brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · d4853ed Raw
80 lines · plain
1; RUN: llc -mtriple=bpf < %s | FileCheck %s2;3; The IR is generated from a bpftrace script (https://github.com/iovisor/bpftrace/issues/1305)4; and then slightly adapted for easy unit testing.5; The llvm bugzilla link: https://bugs.llvm.org/show_bug.cgi?id=475916 7%printf_t = type { i64, i64 }8 9define i64 @"kprobe:blk_update_request"(ptr %0) local_unnamed_addr section "s_kprobe:blk_update_request_1" {10entry:11  %"struct kernfs_node.parent" = alloca i64, align 812  %printf_args = alloca %printf_t, align 813  %"struct cgroup.kn" = alloca i64, align 814  %"struct cgroup_subsys_state.cgroup" = alloca i64, align 815  %"struct blkcg_gq.blkcg" = alloca i64, align 816  %"struct bio.bi_blkg" = alloca i64, align 817  %"struct request.bio" = alloca i64, align 818  %1 = getelementptr i8, ptr %0, i64 11219  %arg0 = load volatile i64, ptr %1, align 820  %2 = add i64 %arg0, 5621  %3 = bitcast ptr %"struct request.bio" to ptr22  call void @llvm.lifetime.start.p0(i64 -1, ptr nonnull %3)23  %probe_read = call i64 inttoptr (i64 4 to ptr)(ptr nonnull %"struct request.bio", i32 8, i64 %2)24  %4 = load i64, ptr %"struct request.bio", align 825  call void @llvm.lifetime.end.p0(i64 -1, ptr nonnull %3)26  %5 = add i64 %4, 7227  %6 = bitcast ptr %"struct bio.bi_blkg" to ptr28  call void @llvm.lifetime.start.p0(i64 -1, ptr nonnull %6)29  %probe_read1 = call i64 inttoptr (i64 5 to ptr)(ptr nonnull %"struct bio.bi_blkg", i32 8, i64 %5)30  %7 = load i64, ptr %"struct bio.bi_blkg", align 831  call void @llvm.lifetime.end.p0(i64 -1, ptr nonnull %6)32  %8 = add i64 %7, 4033  %9 = bitcast ptr %"struct blkcg_gq.blkcg" to ptr34  call void @llvm.lifetime.start.p0(i64 -1, ptr nonnull %9)35  %probe_read2 = call i64 inttoptr (i64 6 to ptr)(ptr nonnull %"struct blkcg_gq.blkcg", i32 8, i64 %8)36  %10 = load i64, ptr %"struct blkcg_gq.blkcg", align 837  call void @llvm.lifetime.end.p0(i64 -1, ptr nonnull %9)38  %11 = bitcast ptr %"struct cgroup_subsys_state.cgroup" to ptr39  call void @llvm.lifetime.start.p0(i64 -1, ptr nonnull %11)40  %probe_read3 = call i64 inttoptr (i64 7 to ptr)(ptr nonnull %"struct cgroup_subsys_state.cgroup", i32 8, i64 %10)41  %12 = load i64, ptr %"struct cgroup_subsys_state.cgroup", align 842  call void @llvm.lifetime.end.p0(i64 -1, ptr nonnull %11)43  %13 = add i64 %12, 28844  %14 = bitcast ptr %"struct cgroup.kn" to ptr45  call void @llvm.lifetime.start.p0(i64 -1, ptr nonnull %14)46  %probe_read4 = call i64 inttoptr (i64 8 to ptr)(ptr nonnull %"struct cgroup.kn", i32 8, i64 %13)47  %15 = load i64, ptr %"struct cgroup.kn", align 848  call void @llvm.lifetime.end.p0(i64 -1, ptr nonnull %14)49  call void @llvm.lifetime.start.p0(i64 -1, ptr nonnull %printf_args)50  %16 = add i64 %15, 851  %17 = bitcast ptr %"struct kernfs_node.parent" to ptr52  store i64 0, ptr %printf_args, align 853  call void @llvm.lifetime.start.p0(i64 -1, ptr nonnull %17)54 55; CHECK:        call 856; CHECK-NOT:    r{{[0-9]+}} = 057; CHECK:        [[REG3:r[0-9]+]] = *(u64 *)(r10 - 24)58; CHECK:        [[REG1:r[0-9]+]] = 059; CHECK:        *(u64 *)(r10 - 24) = [[REG1]]60 61  %probe_read5 = call i64 inttoptr (i64 9 to ptr)(ptr nonnull %"struct kernfs_node.parent", i32 8, i64 %16)62  %18 = load i64, ptr %"struct kernfs_node.parent", align 863  call void @llvm.lifetime.end.p0(i64 -1, ptr nonnull %17)64  %19 = getelementptr inbounds %printf_t, ptr %printf_args, i64 0, i32 165  store i64 %18, ptr %19, align 866  %get_cpu_id = call i64 inttoptr (i64 18 to ptr)()67  %perf_event_output = call i64 inttoptr (i64 10 to ptr)(ptr %0, i64 2, i64 %get_cpu_id, ptr nonnull %printf_args, i64 16)68  call void @llvm.lifetime.end.p0(i64 -1, ptr nonnull %printf_args)69  ret i64 070}71 72; Function Attrs: argmemonly nounwind willreturn73declare void @llvm.lifetime.start.p0(i64 immarg %0, ptr nocapture %1) #174 75; Function Attrs: argmemonly nounwind willreturn76declare void @llvm.lifetime.end.p0(i64 immarg %0, ptr nocapture %1) #177 78attributes #0 = { nounwind }79attributes #1 = { argmemonly nounwind willreturn }80