127 lines · plain
1; Checks generated using command:2; llvm/utils/update_test_body.py llvm/test/CodeGen/BPF/jump_table_switch_stmt.ll3 4; RUN: rm -rf %t && split-file %s %t && cd %t5; RUN: llc -march=bpf -mcpu=v4 -bpf-min-jump-table-entries=3 < test.ll | FileCheck %s6;7; Source code:8; int ret_user;9; int foo(int a)10; {11; switch (a) {12; case 1: ret_user = 18; break;13; case 20: ret_user = 6; break;14; case 30: ret_user = 2; break;15; default: break;16; }17; return 0;18; }19;20; Compilation Flags:21; clang --target=bpf -mcpu=v4 -O2 -emit-llvm -S test.c22 23.ifdef GEN24;--- test.ll25@ret_user = dso_local local_unnamed_addr global i32 0, align 426 27define dso_local noundef i32 @foo(i32 noundef %a) local_unnamed_addr {28entry:29 switch i32 %a, label %sw.epilog [30 i32 1, label %sw.epilog.sink.split31 i32 20, label %sw.bb132 i32 30, label %sw.bb233 ]34 35sw.bb1: ; preds = %entry36 br label %sw.epilog.sink.split37 38sw.bb2: ; preds = %entry39 br label %sw.epilog.sink.split40 41sw.epilog.sink.split: ; preds = %entry, %sw.bb1, %sw.bb242 %.sink = phi i32 [ 2, %sw.bb2 ], [ 6, %sw.bb1 ], [ 18, %entry ]43 store i32 %.sink, ptr @ret_user, align 444 br label %sw.epilog45 46sw.epilog: ; preds = %sw.epilog.sink.split, %entry47 ret i32 048}49 50;--- gen51echo ""52echo "; Generated checks follow"53echo ";"54llc -march=bpf -mcpu=v4 -bpf-min-jump-table-entries=3 < test.ll \55 | awk '/# -- End function/ {p=0} /@function/ {p=1} p {print "; CHECK" ": " $0}'56 57.endif58 59; Generated checks follow60;61; CHECK: .type foo,@function62; CHECK: foo: # @foo63; CHECK: .Lfoo$local:64; CHECK: .type .Lfoo$local,@function65; CHECK: .cfi_startproc66; CHECK: # %bb.0: # %entry67; CHECK: # kill: def $w1 killed $w1 def $r168; CHECK: w1 += -169; CHECK: if w1 > 29 goto LBB0_570; CHECK: # %bb.1: # %entry71; CHECK: w2 = 1872; CHECK: r1 <<= 373; CHECK: r3 = BPF.JT.0.0 ll74; CHECK: r4 = BPF.JT.0.0 ll75; CHECK: r4 += r176; CHECK: r1 = *(u64 *)(r4 + 0)77; CHECK: r3 += r178; CHECK: gotox r379; CHECK: LBB0_2: # %sw.bb180; CHECK: w2 = 681; CHECK: goto LBB0_482; CHECK: LBB0_3: # %sw.bb283; CHECK: w2 = 284; CHECK: LBB0_4: # %sw.epilog.sink.split85; CHECK: r1 = ret_user ll86; CHECK: *(u32 *)(r1 + 0) = w287; CHECK: LBB0_5: # %sw.epilog88; CHECK: w0 = 089; CHECK: exit90; CHECK: .Lfunc_end0:91; CHECK: .size foo, .Lfunc_end0-foo92; CHECK: .size .Lfoo$local, .Lfunc_end0-foo93; CHECK: .cfi_endproc94; CHECK: .section .jumptables,"",@progbits95; CHECK: BPF.JT.0.0:96; CHECK: .quad LBB0_4-.text97; CHECK: .quad LBB0_5-.text98; CHECK: .quad LBB0_5-.text99; CHECK: .quad LBB0_5-.text100; CHECK: .quad LBB0_5-.text101; CHECK: .quad LBB0_5-.text102; CHECK: .quad LBB0_5-.text103; CHECK: .quad LBB0_5-.text104; CHECK: .quad LBB0_5-.text105; CHECK: .quad LBB0_5-.text106; CHECK: .quad LBB0_5-.text107; CHECK: .quad LBB0_5-.text108; CHECK: .quad LBB0_5-.text109; CHECK: .quad LBB0_5-.text110; CHECK: .quad LBB0_5-.text111; CHECK: .quad LBB0_5-.text112; CHECK: .quad LBB0_5-.text113; CHECK: .quad LBB0_5-.text114; CHECK: .quad LBB0_5-.text115; CHECK: .quad LBB0_2-.text116; CHECK: .quad LBB0_5-.text117; CHECK: .quad LBB0_5-.text118; CHECK: .quad LBB0_5-.text119; CHECK: .quad LBB0_5-.text120; CHECK: .quad LBB0_5-.text121; CHECK: .quad LBB0_5-.text122; CHECK: .quad LBB0_5-.text123; CHECK: .quad LBB0_5-.text124; CHECK: .quad LBB0_5-.text125; CHECK: .quad LBB0_3-.text126; CHECK: .size BPF.JT.0.0, 240127