41 lines · plain
1; RUN: llc < %s -mtriple=bpf -mcpu=v1 -verify-machineinstrs | FileCheck %s2; Source Code:3; struct loc_prog {4; unsigned int ip;5; int len;6; };7; int exec_prog(struct loc_prog *prog) {8; if (prog->ip < prog->len) {9; int x = prog->ip;10; if (x < 3)11; prog->ip += 2;12; }13; return 3;14; }15; Compilation flag:16; clang -target bpf -O2 -S -emit-llvm t.c17 18%struct.loc_prog = type { i32, i32 }19 20; Function Attrs: nofree norecurse nounwind willreturn21define dso_local i32 @exec_prog(ptr nocapture %prog) local_unnamed_addr {22entry:23 %0 = load i32, ptr %prog, align 424 %len = getelementptr inbounds %struct.loc_prog, ptr %prog, i64 0, i32 125 %1 = load i32, ptr %len, align 426 %cmp = icmp ult i32 %0, %127 %cmp2 = icmp slt i32 %0, 328 %or.cond = and i1 %cmp2, %cmp29; CHECK: r{{[0-9]+}} <<= 3230; CHECK: r{{[0-9]+}} s>>= 3231 br i1 %or.cond, label %if.then3, label %if.end532 33if.then3: ; preds = %entry34 %add = add nsw i32 %0, 235 store i32 %add, ptr %prog, align 436 br label %if.end537 38if.end5: ; preds = %if.then3, %entry39 ret i32 340}41