65 lines · plain
1; RUN: llc < %s -mtriple=bpf -mcpu=v1 -verify-machineinstrs | FileCheck %s2 3; Source code:4; struct xdp_md {5; unsigned data;6; unsigned data_end;7; };8;9; int gbl;10; int xdp_dummy(struct xdp_md *xdp)11; {12; char addr = *(char *)(long)xdp->data;13; if (gbl) {14; if (gbl == 1)15; return 1;16; if (addr == 1)17; return 3;18; } else if (addr == 0)19; return 2;20; return 0;21; }22 23%struct.xdp_md = type { i32, i32 }24 25@gbl = common local_unnamed_addr global i32 0, align 426 27; Function Attrs: norecurse nounwind readonly28define i32 @xdp_dummy(ptr nocapture readonly %xdp) local_unnamed_addr #0 {29entry:30 %0 = load i32, ptr %xdp, align 431 %conv = zext i32 %0 to i6432 %1 = inttoptr i64 %conv to ptr33 %2 = load i8, ptr %1, align 134; CHECK: r1 = *(u32 *)(r1 + 0)35; CHECK: r1 = *(u8 *)(r1 + 0)36 %3 = load i32, ptr @gbl, align 437 switch i32 %3, label %if.end [38 i32 0, label %if.else39 i32 1, label %cleanup40 ]41 42if.end: ; preds = %entry43 %cmp4 = icmp eq i8 %2, 144; CHECK: r0 = 345; CHECK-NOT: r1 &= 25546; CHECK: if r1 == 1 goto47 br i1 %cmp4, label %cleanup, label %if.end1348 49if.else: ; preds = %entry50 %cmp9 = icmp eq i8 %2, 051; CHECK: r0 = 252; CHECK-NOT: r1 &= 25553; CHECK: if r1 == 0 goto54 br i1 %cmp9, label %cleanup, label %if.end1355 56if.end13: ; preds = %if.else, %if.end57 br label %cleanup58 59cleanup: ; preds = %if.else, %if.end, %entry, %if.end1360 %retval.0 = phi i32 [ 0, %if.end13 ], [ 1, %entry ], [ 3, %if.end ], [ 2, %if.else ]61 ret i32 %retval.062}63 64attributes #0 = { norecurse nounwind readonly }65