brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · b7d5186 Raw
92 lines · plain
1; Checks generated using command:2;    llvm/utils/update_test_body.py llvm/test/CodeGen/BPF/jump_table_blockaddr.ll3 4; RUN: rm -rf %t && split-file %s %t && cd %t5; RUN: llc -march=bpf -mcpu=v4 < test.ll | FileCheck %s6;7; Source code:8;    int bar(int a) {9;       __label__ l1, l2;10;       void * volatile tgt;11;       int ret = 0;12;       if (a)13;         tgt = &&l1; // synthetic jump table generated here14;       else15;         tgt = &&l2; // another synthetic jump table16;       goto *tgt;17;   l1: ret += 1;18;   l2: ret += 2;19;       return ret;20;     }21;22; Compilation Flags:23;   clang --target=bpf -mcpu=v4 -O2 -emit-llvm -S test.c24 25.ifdef GEN26;--- test.ll27define dso_local range(i32 2, 4) i32 @bar(i32 noundef %a) local_unnamed_addr{28entry:29  %tgt = alloca ptr, align 830  %tobool.not = icmp eq i32 %a, 031  %. = select i1 %tobool.not, ptr blockaddress(@bar, %l2), ptr blockaddress(@bar, %l1)32  store volatile ptr %., ptr %tgt, align 833  %tgt.0.tgt.0.tgt.0.tgt.0. = load volatile ptr, ptr %tgt, align 834  indirectbr ptr %tgt.0.tgt.0.tgt.0.tgt.0., [label %l1, label %l2]35 36l1:                                               ; preds = %entry37  br label %l238 39l2:                                               ; preds = %l1, %entry40  %ret.0 = phi i32 [ 3, %l1 ], [ 2, %entry ]41  ret i32 %ret.042}43 44;--- gen45echo ""46echo "; Generated checks follow"47echo ";"48llc -march=bpf -mcpu=v4 < test.ll \49  | awk '/# -- End function/ {p=0} /@function/ {p=1} p {print "; CHECK" ": " $0}'50 51.endif52 53; Generated checks follow54;55; CHECK: 	.type	bar,@function56; CHECK: bar:                                    # @bar57; CHECK: .Lbar$local:58; CHECK: 	.type	.Lbar$local,@function59; CHECK: 	.cfi_startproc60; CHECK: # %bb.0:                                # %entry61; CHECK: 	r2 = BPF.JT.0.0 ll62; CHECK: 	r2 = *(u64 *)(r2 + 0)63; CHECK: 	r3 = BPF.JT.0.1 ll64; CHECK: 	r3 = *(u64 *)(r3 + 0)65; CHECK: 	if w1 == 0 goto LBB0_266; CHECK: # %bb.1:                                # %entry67; CHECK: 	r3 = r268; CHECK: LBB0_2:                                 # %entry69; CHECK: 	*(u64 *)(r10 - 8) = r370; CHECK: 	r1 = *(u64 *)(r10 - 8)71; CHECK: 	gotox r172; CHECK: .Ltmp0:                                 # Block address taken73; CHECK: LBB0_3:                                 # %l174; CHECK: 	w0 = 375; CHECK: 	goto LBB0_576; CHECK: .Ltmp1:                                 # Block address taken77; CHECK: LBB0_4:                                 # %l278; CHECK: 	w0 = 279; CHECK: LBB0_5:                                 # %.split80; CHECK: 	exit81; CHECK: .Lfunc_end0:82; CHECK: 	.size	bar, .Lfunc_end0-bar83; CHECK: 	.size	.Lbar$local, .Lfunc_end0-bar84; CHECK: 	.cfi_endproc85; CHECK: 	.section	.jumptables,"",@progbits86; CHECK: BPF.JT.0.0:87; CHECK: 	.quad	LBB0_3-.text88; CHECK: 	.size	BPF.JT.0.0, 889; CHECK: BPF.JT.0.1:90; CHECK: 	.quad	LBB0_4-.text91; CHECK: 	.size	BPF.JT.0.1, 892