brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · eb1e5bf Raw
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