1 ; RUN: llc < %s -march=bpf | FileCheck %s
3 ; Function Attrs: nounwind uwtable
4 define i32 @ld_b(i64 %foo, i64* nocapture %bar, i8* %ctx, i8* %ctx2) #0 {
5 %1 = tail call i64 @llvm.bpf.load.byte(i8* %ctx, i64 123) #2
7 %3 = load volatile i64* %bar, align 8
9 %5 = tail call i64 @llvm.bpf.load.byte(i8* %ctx2, i64 %foo) #2
11 %7 = load volatile i64* %bar, align 8
13 %9 = trunc i64 %8 to i32
16 ; CHECK: ldabs_b r0, r6.data + 123
17 ; CHECK: ldind_b r0, r6.data
20 declare i64 @llvm.bpf.load.byte(i8*, i64) #1
22 ; Function Attrs: nounwind uwtable
23 define i32 @ld_h(i8* %ctx, i8* %ctx2, i32 %foo) #0 {
24 %1 = tail call i64 @llvm.bpf.load.half(i8* %ctx, i64 123) #2
25 %2 = sext i32 %foo to i64
26 %3 = tail call i64 @llvm.bpf.load.half(i8* %ctx2, i64 %2) #2
28 %5 = trunc i64 %4 to i32
31 ; CHECK: ldind_h r0, r6.data
32 ; CHECK: ldabs_h r0, r6.data + 123
35 declare i64 @llvm.bpf.load.half(i8*, i64) #1
37 ; Function Attrs: nounwind uwtable
38 define i32 @ld_w(i8* %ctx, i8* %ctx2, i32 %foo) #0 {
39 %1 = tail call i64 @llvm.bpf.load.word(i8* %ctx, i64 123) #2
40 %2 = sext i32 %foo to i64
41 %3 = tail call i64 @llvm.bpf.load.word(i8* %ctx2, i64 %2) #2
43 %5 = trunc i64 %4 to i32
46 ; CHECK: ldind_w r0, r6.data
47 ; CHECK: ldabs_w r0, r6.data + 123
50 declare i64 @llvm.bpf.load.word(i8*, i64) #1