84 lines · plain
1; Checks generated using command:2; llvm/utils/update_test_body.py llvm/test/CodeGen/BPF/jump_table_global_var.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 foo(unsigned a) {9; __label__ l1, l2;10; void *jt1[] = {[0]=&&l1, [1]=&&l2};11; int ret = 0;12;13; goto *jt1[a % 2];14; l1: ret += 1;15; l2: ret += 3;16; return ret;17; }18;19; Compilation Flags:20; clang --target=bpf -mcpu=v4 -O2 -emit-llvm -S test.c21 22.ifdef GEN23;--- test.ll24@__const.foo.jt1 = private unnamed_addr constant [2 x ptr] [ptr blockaddress(@foo, %l1), ptr blockaddress(@foo, %l2)], align 825 26define dso_local range(i32 3, 5) i32 @foo(i32 noundef %a) local_unnamed_addr {27entry:28 %rem = and i32 %a, 129 %idxprom = zext nneg i32 %rem to i6430 %arrayidx = getelementptr inbounds nuw [2 x ptr], ptr @__const.foo.jt1, i64 0, i64 %idxprom31 %0 = load ptr, ptr %arrayidx, align 832 indirectbr ptr %0, [label %l1, label %l2]33 34l1: ; preds = %entry35 br label %l236 37l2: ; preds = %l1, %entry38 %ret.0 = phi i32 [ 4, %l1 ], [ 3, %entry ]39 ret i32 %ret.040}41 42;--- gen43echo ""44echo "; Generated checks follow"45echo ";"46llc -march=bpf -mcpu=v4 < test.ll \47 | awk '/# -- End function/ {p=0} /@function/ {p=1} p {print "; CHECK" ": " $0}'48 49.endif50 51; Generated checks follow52;53; CHECK: .type foo,@function54; CHECK: foo: # @foo55; CHECK: .Lfoo$local:56; CHECK: .type .Lfoo$local,@function57; CHECK: .cfi_startproc58; CHECK: # %bb.0: # %entry59; CHECK: # kill: def $w1 killed $w1 def $r160; CHECK: w1 &= 161; CHECK: r1 <<= 362; CHECK: r2 = BPF.JT.0.0 ll63; CHECK: r2 += r164; CHECK: r1 = *(u64 *)(r2 + 0)65; CHECK: gotox r166; CHECK: .Ltmp0: # Block address taken67; CHECK: LBB0_1: # %l168; CHECK: w0 = 469; CHECK: goto LBB0_370; CHECK: .Ltmp1: # Block address taken71; CHECK: LBB0_2: # %l272; CHECK: w0 = 373; CHECK: LBB0_3: # %.split74; CHECK: exit75; CHECK: .Lfunc_end0:76; CHECK: .size foo, .Lfunc_end0-foo77; CHECK: .size .Lfoo$local, .Lfunc_end0-foo78; CHECK: .cfi_endproc79; CHECK: .section .jumptables,"",@progbits80; CHECK: BPF.JT.0.0:81; CHECK: .quad LBB0_1-.text82; CHECK: .quad LBB0_2-.text83; CHECK: .size BPF.JT.0.0, 1684