1*c5037db4SFangrui Song; RUN: llc < %s -mtriple=bpf -mcpu=v1 -verify-machineinstrs | FileCheck %s 251cdb780SYonghong Song; Source Code: 351cdb780SYonghong Song; struct loc_prog { 451cdb780SYonghong Song; unsigned int ip; 551cdb780SYonghong Song; int len; 651cdb780SYonghong Song; }; 751cdb780SYonghong Song; int exec_prog(struct loc_prog *prog) { 851cdb780SYonghong Song; if (prog->ip < prog->len) { 951cdb780SYonghong Song; int x = prog->ip; 1051cdb780SYonghong Song; if (x < 3) 1151cdb780SYonghong Song; prog->ip += 2; 1251cdb780SYonghong Song; } 1351cdb780SYonghong Song; return 3; 1451cdb780SYonghong Song; } 1551cdb780SYonghong Song; Compilation flag: 1651cdb780SYonghong Song; clang -target bpf -O2 -S -emit-llvm t.c 1751cdb780SYonghong Song 1851cdb780SYonghong Song%struct.loc_prog = type { i32, i32 } 1951cdb780SYonghong Song 2051cdb780SYonghong Song; Function Attrs: nofree norecurse nounwind willreturn 2160228733SNikita Popovdefine dso_local i32 @exec_prog(ptr nocapture %prog) local_unnamed_addr { 2251cdb780SYonghong Songentry: 2360228733SNikita Popov %0 = load i32, ptr %prog, align 4 2460228733SNikita Popov %len = getelementptr inbounds %struct.loc_prog, ptr %prog, i64 0, i32 1 2560228733SNikita Popov %1 = load i32, ptr %len, align 4 2651cdb780SYonghong Song %cmp = icmp ult i32 %0, %1 2751cdb780SYonghong Song %cmp2 = icmp slt i32 %0, 3 2851cdb780SYonghong Song %or.cond = and i1 %cmp2, %cmp 2951cdb780SYonghong Song; CHECK: r{{[0-9]+}} <<= 32 3051cdb780SYonghong Song; CHECK: r{{[0-9]+}} s>>= 32 3151cdb780SYonghong Song br i1 %or.cond, label %if.then3, label %if.end5 3251cdb780SYonghong Song 3351cdb780SYonghong Songif.then3: ; preds = %entry 3451cdb780SYonghong Song %add = add nsw i32 %0, 2 3560228733SNikita Popov store i32 %add, ptr %prog, align 4 3651cdb780SYonghong Song br label %if.end5 3751cdb780SYonghong Song 3851cdb780SYonghong Songif.end5: ; preds = %if.then3, %entry 3951cdb780SYonghong Song ret i32 3 4051cdb780SYonghong Song} 41