diff --git a/llvm/lib/Target/BPF/BPFISelLowering.cpp b/llvm/lib/Target/BPF/BPFISelLowering.cpp --- a/llvm/lib/Target/BPF/BPFISelLowering.cpp +++ b/llvm/lib/Target/BPF/BPFISelLowering.cpp @@ -160,6 +160,8 @@ MaxStoresPerMemmove = MaxStoresPerMemmoveOptSize = CommonMaxStores; } + setSchedulingPreference(Sched::Source); + // CPU/Feature control HasAlu32 = STI.getHasAlu32(); HasJmp32 = STI.getHasJmp32(); diff --git a/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-byte-size-1.ll b/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-byte-size-1.ll --- a/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-byte-size-1.ll +++ b/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-byte-size-1.ll @@ -47,14 +47,14 @@ ; CHECK: r1 = 4 ; CHECK: r0 = 4 +; CHECK: r2 = 4 +; CHECK: r3 = 4 ; CHECK-ALU64: r0 += r1 ; CHECK-ALU32: w0 += w1 -; CHECK: r1 = 4 -; CHECK-ALU64: r0 += r1 -; CHECK-ALU32: w0 += w1 -; CHECK: r1 = 4 -; CHECK-ALU64: r0 += r1 -; CHECK-ALU32: w0 += w1 +; CHECK-ALU64: r0 += r2 +; CHECK-ALU32: w0 += w2 +; CHECK-ALU64: r0 += r3 +; CHECK-ALU32: w0 += w3 ; CHECK: exit ; CHECK: .long 1 # BTF_KIND_UNION(id = 2) diff --git a/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-byte-size-2.ll b/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-byte-size-2.ll --- a/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-byte-size-2.ll +++ b/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-byte-size-2.ll @@ -41,11 +41,11 @@ ; CHECK: r1 = 8 ; CHECK: r0 = 4 +; CHECK: r2 = 1 ; CHECK-ALU64: r0 += r1 ; CHECK-ALU32: w0 += w1 -; CHECK: r1 = 1 -; CHECK-ALU64: r0 += r1 -; CHECK-ALU32: w0 += w1 +; CHECK-ALU64: r0 += r2 +; CHECK-ALU32: w0 += w2 ; CHECK: exit ; CHECK: .long 1 # BTF_KIND_UNION(id = 2) diff --git a/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-existence-1.ll b/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-existence-1.ll --- a/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-existence-1.ll +++ b/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-existence-1.ll @@ -48,14 +48,14 @@ ; CHECK: r1 = 1 ; CHECK: r0 = 1 +; CHECK: r2 = 1 +; CHECK: r3 = 1 ; CHECK-ALU64: r0 += r1 ; CHECK-ALU32: w0 += w1 -; CHECK: r1 = 1 -; CHECK-ALU64: r0 += r1 -; CHECK-ALU32: w0 += w1 -; CHECK: r1 = 1 -; CHECK-ALU64: r0 += r1 -; CHECK-ALU32: w0 += w1 +; CHECK-ALU64: r0 += r2 +; CHECK-ALU32: w0 += w2 +; CHECK-ALU64: r0 += r3 +; CHECK-ALU32: w0 += w3 ; CHECK: exit ; CHECK: .long 1 # BTF_KIND_STRUCT(id = 2) diff --git a/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-lshift-1-bpfeb.ll b/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-lshift-1-bpfeb.ll --- a/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-lshift-1-bpfeb.ll +++ b/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-lshift-1-bpfeb.ll @@ -48,14 +48,14 @@ ; CHECK-EB: r1 = 32 ; CHECK-EB: r0 = 39 +; CHECK-EB: r2 = 43 +; CHECK-EB: r3 = 48 ; CHECK-ALU64: r0 += r1 ; CHECK-ALU32: w0 += w1 -; CHECK-EB: r1 = 43 -; CHECK-ALU64: r0 += r1 -; CHECK-ALU32: w0 += w1 -; CHECK-EB: r1 = 48 -; CHECK-ALU64: r0 += r1 -; CHECK-ALU32: w0 += w1 +; CHECK-ALU64: r0 += r2 +; CHECK-ALU32: w0 += w2 +; CHECK-ALU64: r0 += r3 +; CHECK-ALU32: w0 += w3 ; CHECK: exit ; CHECK: .long 1 # BTF_KIND_UNION(id = 2) diff --git a/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-lshift-1.ll b/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-lshift-1.ll --- a/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-lshift-1.ll +++ b/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-lshift-1.ll @@ -48,14 +48,14 @@ ; CHECK-EL: r1 = 57 ; CHECK-EL: r0 = 53 +; CHECK-EL: r2 = 48 +; CHECK-EL: r3 = 32 ; CHECK-ALU64: r0 += r1 ; CHECK-ALU32: w0 += w1 -; CHECK-EL: r1 = 48 -; CHECK-ALU64: r0 += r1 -; CHECK-ALU32: w0 += w1 -; CHECK-EL: r1 = 32 -; CHECK-ALU64: r0 += r1 -; CHECK-ALU32: w0 += w1 +; CHECK-ALU64: r0 += r2 +; CHECK-ALU32: w0 += w2 +; CHECK-ALU64: r0 += r3 +; CHECK-ALU32: w0 += w3 ; CHECK: exit ; CHECK: .long 1 # BTF_KIND_UNION(id = 2) diff --git a/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-rshift-1.ll b/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-rshift-1.ll --- a/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-rshift-1.ll +++ b/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-rshift-1.ll @@ -47,14 +47,14 @@ ; CHECK: r1 = 57 ; CHECK: r0 = 60 +; CHECK: r2 = 59 +; CHECK: r3 = 48 ; CHECK-ALU64: r0 += r1 ; CHECK-ALU32: w0 += w1 -; CHECK: r1 = 59 -; CHECK-ALU64: r0 += r1 -; CHECK-ALU32: w0 += w1 -; CHECK: r1 = 48 -; CHECK-ALU64: r0 += r1 -; CHECK-ALU32: w0 += w1 +; CHECK-ALU64: r0 += r2 +; CHECK-ALU32: w0 += w2 +; CHECK-ALU64: r0 += r3 +; CHECK-ALU32: w0 += w3 ; CHECK: exit ; CHECK: .long 1 # BTF_KIND_UNION(id = 2) diff --git a/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-signedness-1.ll b/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-signedness-1.ll --- a/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-signedness-1.ll +++ b/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-signedness-1.ll @@ -48,14 +48,14 @@ ; CHECK: r1 = 1 ; CHECK: r0 = 0 +; CHECK: r2 = 1 +; CHECK: r3 = 0 ; CHECK-ALU64: r0 += r1 ; CHECK-ALU32: w0 += w1 -; CHECK: r1 = 1 -; CHECK-ALU64: r0 += r1 -; CHECK-ALU32: w0 += w1 -; CHECK: r1 = 0 -; CHECK-ALU64: r0 += r1 -; CHECK-ALU32: w0 += w1 +; CHECK-ALU64: r0 += r2 +; CHECK-ALU32: w0 += w2 +; CHECK-ALU64: r0 += r3 +; CHECK-ALU32: w0 += w3 ; CHECK: exit ; CHECK: .long 1 # BTF_KIND_STRUCT(id = 2) diff --git a/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-signedness-2.ll b/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-signedness-2.ll --- a/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-signedness-2.ll +++ b/llvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-signedness-2.ll @@ -46,11 +46,11 @@ ; CHECK: r1 = 1 ; CHECK: r0 = 0 +; CHECK: r2 = 1 ; CHECK-ALU64: r0 += r1 ; CHECK-ALU32: w0 += w1 -; CHECK: r1 = 1 -; CHECK-ALU64: r0 += r1 -; CHECK-ALU32: w0 += w1 +; CHECK-ALU64: r0 += r2 +; CHECK-ALU32: w0 += w2 ; CHECK: exit ; CHECK: .long 1 # BTF_KIND_UNION(id = 2) diff --git a/llvm/test/CodeGen/BPF/CORE/offset-reloc-fieldinfo-1.ll b/llvm/test/CodeGen/BPF/CORE/offset-reloc-fieldinfo-1.ll --- a/llvm/test/CodeGen/BPF/CORE/offset-reloc-fieldinfo-1.ll +++ b/llvm/test/CodeGen/BPF/CORE/offset-reloc-fieldinfo-1.ll @@ -77,11 +77,11 @@ ; CHECK: r{{[0-9]+}} = 4 ; CHECK: r{{[0-9]+}} = 4 ; CHECK: r{{[0-9]+}} <<= 51 +; CHECK: r{{[0-9]+}} = 1 ; CHECK64: r{{[0-9]+}} s>>= 60 ; CHECK64: r{{[0-9]+}} >>= 60 -; CHECK32: r{{[0-9]+}} >>= 60 ; CHECK32: r{{[0-9]+}} s>>= 60 -; CHECK: r{{[0-9]+}} = 1 +; CHECK32: r{{[0-9]+}} >>= 60 ; CHECK: .byte 115 # string offset=1 ; CHECK: .ascii ".text" # string offset=30 @@ -105,7 +105,7 @@ ; CHECK-NEXT: .long .Ltmp{{[0-9]+}} ; CHECK-NEXT: .long 2 ; CHECK-NEXT: .long 73 -; CHECK-NEXT: .long 5 +; CHECK-NEXT: .long 3 ; CHECK-NEXT: .long .Ltmp{{[0-9]+}} ; CHECK-NEXT: .long 2 ; CHECK-NEXT: .long 73 @@ -113,7 +113,7 @@ ; CHECK-NEXT: .long .Ltmp{{[0-9]+}} ; CHECK-NEXT: .long 2 ; CHECK-NEXT: .long 73 -; CHECK-NEXT: .long 3 +; CHECK-NEXT: .long 5 ; Function Attrs: argmemonly nounwind willreturn declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) #1 diff --git a/llvm/test/CodeGen/BPF/CORE/offset-reloc-fieldinfo-2-bpfeb.ll b/llvm/test/CodeGen/BPF/CORE/offset-reloc-fieldinfo-2-bpfeb.ll --- a/llvm/test/CodeGen/BPF/CORE/offset-reloc-fieldinfo-2-bpfeb.ll +++ b/llvm/test/CodeGen/BPF/CORE/offset-reloc-fieldinfo-2-bpfeb.ll @@ -116,11 +116,11 @@ ; CHECK: r{{[0-9]+}} = 4 ; CHECK: r{{[0-9]+}} = 4 ; CHECK-EB: r{{[0-9]+}} <<= 41 +; CHECK: r{{[0-9]+}} = 1 ; CHECK64: r{{[0-9]+}} s>>= 60 ; CHECK64: r{{[0-9]+}} >>= 60 -; CHECK32: r{{[0-9]+}} >>= 60 ; CHECK32: r{{[0-9]+}} s>>= 60 -; CHECK: r{{[0-9]+}} = 1 +; CHECK32: r{{[0-9]+}} >>= 60 ; CHECK: .long 1 # BTF_KIND_STRUCT(id = 2) ; CHECK: .byte 115 # string offset=1 @@ -153,7 +153,7 @@ ; CHECK-NEXT: .long .Ltmp{{[0-9]+}} ; CHECK-NEXT: .long 2 ; CHECK-NEXT: .long 36 -; CHECK-NEXT: .long 5 +; CHECK-NEXT: .long 3 ; CHECK-NEXT: .long .Ltmp{{[0-9]+}} ; CHECK-NEXT: .long 2 ; CHECK-NEXT: .long 36 @@ -161,7 +161,7 @@ ; CHECK-NEXT: .long .Ltmp{{[0-9]+}} ; CHECK-NEXT: .long 2 ; CHECK-NEXT: .long 36 -; CHECK-NEXT: .long 3 +; CHECK-NEXT: .long 5 ; Function Attrs: nounwind readnone declare i16* @llvm.preserve.struct.access.index.p0i16.p0s_struct.ss(%struct.s*, i32, i32) #1 diff --git a/llvm/test/CodeGen/BPF/CORE/offset-reloc-fieldinfo-2.ll b/llvm/test/CodeGen/BPF/CORE/offset-reloc-fieldinfo-2.ll --- a/llvm/test/CodeGen/BPF/CORE/offset-reloc-fieldinfo-2.ll +++ b/llvm/test/CodeGen/BPF/CORE/offset-reloc-fieldinfo-2.ll @@ -116,11 +116,11 @@ ; CHECK: r{{[0-9]+}} = 4 ; CHECK: r{{[0-9]+}} = 4 ; CHECK-EL: r{{[0-9]+}} <<= 51 +; CHECK: r{{[0-9]+}} = 1 ; CHECK64: r{{[0-9]+}} s>>= 60 ; CHECK64: r{{[0-9]+}} >>= 60 -; CHECK32: r{{[0-9]+}} >>= 60 ; CHECK32: r{{[0-9]+}} s>>= 60 -; CHECK: r{{[0-9]+}} = 1 +; CHECK32: r{{[0-9]+}} >>= 60 ; CHECK: .long 1 # BTF_KIND_STRUCT(id = 2) ; CHECK: .byte 115 # string offset=1 @@ -153,7 +153,7 @@ ; CHECK-NEXT: .long .Ltmp{{[0-9]+}} ; CHECK-NEXT: .long 2 ; CHECK-NEXT: .long 36 -; CHECK-NEXT: .long 5 +; CHECK-NEXT: .long 3 ; CHECK-NEXT: .long .Ltmp{{[0-9]+}} ; CHECK-NEXT: .long 2 ; CHECK-NEXT: .long 36 @@ -161,7 +161,7 @@ ; CHECK-NEXT: .long .Ltmp{{[0-9]+}} ; CHECK-NEXT: .long 2 ; CHECK-NEXT: .long 36 -; CHECK-NEXT: .long 3 +; CHECK-NEXT: .long 5 ; Function Attrs: nounwind readnone declare i16* @llvm.preserve.struct.access.index.p0i16.p0s_struct.ss(%struct.s*, i32, i32) #1 diff --git a/llvm/test/CodeGen/BPF/CORE/offset-reloc-global-3.ll b/llvm/test/CodeGen/BPF/CORE/offset-reloc-global-3.ll --- a/llvm/test/CodeGen/BPF/CORE/offset-reloc-global-3.ll +++ b/llvm/test/CodeGen/BPF/CORE/offset-reloc-global-3.ll @@ -31,18 +31,18 @@ ; CHECK: r1 += r2 ; CHECK: call get_value -; CHECK: .long 16 # BTF_KIND_STRUCT(id = [[TID1:[0-9]+]]) +; CHECK: .long 58 # BTF_KIND_STRUCT(id = [[TID1:[0-9]+]]) ; CHECK: .ascii ".text" # string offset=10 -; CHECK: .ascii "v3" # string offset=16 -; CHECK: .ascii "0:1" # string offset=23 +; CHECK: .ascii "v3" # string offset=58 +; CHECK: .ascii "0:1" # string offset=65 ; CHECK: .long 16 # FieldReloc ; CHECK-NEXT: .long 10 # Field reloc section string offset=10 ; CHECK-NEXT: .long 1 ; CHECK-NEXT: .long .Ltmp{{[0-9]+}} ; CHECK-NEXT: .long [[TID1]] -; CHECK-NEXT: .long 23 +; CHECK-NEXT: .long 65 ; CHECK-NEXT: .long 0 declare dso_local i32 @get_value(i32*) local_unnamed_addr #1 diff --git a/llvm/test/CodeGen/BPF/intrinsics.ll b/llvm/test/CodeGen/BPF/intrinsics.ll --- a/llvm/test/CodeGen/BPF/intrinsics.ll +++ b/llvm/test/CodeGen/BPF/intrinsics.ll @@ -31,10 +31,10 @@ %5 = trunc i64 %4 to i32 ret i32 %5 ; CHECK-LABEL: ld_h: -; CHECK-EL: r0 = *(u16 *)skb[r ; CHECK-EL: r0 = *(u16 *)skb[123] -; CHECK-EB: r0 = *(u16 *)skb[r +; CHECK-EL: r0 = *(u16 *)skb[r ; CHECK-EB: r0 = *(u16 *)skb[123] +; CHECK-EB: r0 = *(u16 *)skb[r } declare i64 @llvm.bpf.load.half(i8*, i64) #1 @@ -48,10 +48,10 @@ %5 = trunc i64 %4 to i32 ret i32 %5 ; CHECK-LABEL: ld_w: -; CHECK-EL: r0 = *(u32 *)skb[r ; CHECK-EL: r0 = *(u32 *)skb[123] -; CHECK-EB: r0 = *(u32 *)skb[r +; CHECK-EL: r0 = *(u32 *)skb[r ; CHECK-EB: r0 = *(u32 *)skb[123] +; CHECK-EB: r0 = *(u32 *)skb[r } declare i64 @llvm.bpf.load.word(i8*, i64) #1 diff --git a/llvm/test/CodeGen/BPF/lifetime.ll b/llvm/test/CodeGen/BPF/lifetime.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/BPF/lifetime.ll @@ -0,0 +1,80 @@ +; RUN: llc -O2 -march=bpfel -mcpu=v3 < %s | FileCheck %s +; +; more info: https://bugs.llvm.org/show_bug.cgi?id=47591 + +%printf_t = type { i64, i64 } + +define i64 @"kprobe:blk_update_request"(i8* %0) local_unnamed_addr section "s_kprobe:blk_update_request_1" { +entry: + %"struct kernfs_node.parent" = alloca i64, align 8 + %printf_args = alloca %printf_t, align 8 + %"struct cgroup.kn" = alloca i64, align 8 + %"struct cgroup_subsys_state.cgroup" = alloca i64, align 8 + %"struct blkcg_gq.blkcg" = alloca i64, align 8 + %"struct bio.bi_blkg" = alloca i64, align 8 + %"struct request.bio" = alloca i64, align 8 + %1 = getelementptr i8, i8* %0, i64 112 + %2 = bitcast i8* %1 to i64* + %arg0 = load volatile i64, i64* %2, align 8 + %3 = add i64 %arg0, 56 + %4 = bitcast i64* %"struct request.bio" to i8* + call void @llvm.lifetime.start.p0i8(i64 -1, i8* nonnull %4) + %probe_read = call i64 inttoptr (i64 10 to i64 (i64*, i32, i64)*)(i64* nonnull %"struct request.bio", i32 8, i64 %3) + %5 = load i64, i64* %"struct request.bio", align 8 + call void @llvm.lifetime.end.p0i8(i64 -1, i8* nonnull %4) + %6 = add i64 %5, 72 + %7 = bitcast i64* %"struct bio.bi_blkg" to i8* + call void @llvm.lifetime.start.p0i8(i64 -1, i8* nonnull %7) + %probe_read1 = call i64 inttoptr (i64 11 to i64 (i64*, i32, i64)*)(i64* nonnull %"struct bio.bi_blkg", i32 8, i64 %6) + %8 = load i64, i64* %"struct bio.bi_blkg", align 8 + call void @llvm.lifetime.end.p0i8(i64 -1, i8* nonnull %7) + %9 = add i64 %8, 40 + %10 = bitcast i64* %"struct blkcg_gq.blkcg" to i8* + call void @llvm.lifetime.start.p0i8(i64 -1, i8* nonnull %10) + %probe_read2 = call i64 inttoptr (i64 12 to i64 (i64*, i32, i64)*)(i64* nonnull %"struct blkcg_gq.blkcg", i32 8, i64 %9) + %11 = load i64, i64* %"struct blkcg_gq.blkcg", align 8 + call void @llvm.lifetime.end.p0i8(i64 -1, i8* nonnull %10) + %12 = bitcast i64* %"struct cgroup_subsys_state.cgroup" to i8* + call void @llvm.lifetime.start.p0i8(i64 -1, i8* nonnull %12) + %probe_read3 = call i64 inttoptr (i64 13 to i64 (i64*, i32, i64)*)(i64* nonnull %"struct cgroup_subsys_state.cgroup", i32 8, i64 %11) + %13 = load i64, i64* %"struct cgroup_subsys_state.cgroup", align 8 + call void @llvm.lifetime.end.p0i8(i64 -1, i8* nonnull %12) + %14 = add i64 %13, 288 + %15 = bitcast i64* %"struct cgroup.kn" to i8* + call void @llvm.lifetime.start.p0i8(i64 -1, i8* nonnull %15) + %probe_read4 = call i64 inttoptr (i64 14 to i64 (i64*, i32, i64)*)(i64* nonnull %"struct cgroup.kn", i32 8, i64 %14) + %16 = load i64, i64* %"struct cgroup.kn", align 8 + call void @llvm.lifetime.end.p0i8(i64 -1, i8* nonnull %15) + %17 = bitcast %printf_t* %printf_args to i8* + call void @llvm.lifetime.start.p0i8(i64 -1, i8* nonnull %17) + %18 = add i64 %16, 8 + %19 = bitcast i64* %"struct kernfs_node.parent" to i8* + %20 = getelementptr inbounds %printf_t, %printf_t* %printf_args, i64 0, i32 0 + store i64 0, i64* %20, align 8 + +; CHECK: call 14 +; CHECK-NEXT: r{{[0-9]+}} = *(u64 *)(r10 - 24) +; CHECK: r{{[0-9]+}} = 0 +; CHECK-NEXT: *(u64 *)(r10 - 24) = r{{[0-9]+}} +; CHECK-NOT: r{{[0-9]+}} = *(u64 *)(r10 - 24) + + call void @llvm.lifetime.start.p0i8(i64 -1, i8* nonnull %19) + %probe_read5 = call i64 inttoptr (i64 15 to i64 (i64*, i32, i64)*)(i64* nonnull %"struct kernfs_node.parent", i32 8, i64 %18) + %21 = load i64, i64* %"struct kernfs_node.parent", align 8 + call void @llvm.lifetime.end.p0i8(i64 -1, i8* nonnull %19) + %22 = getelementptr inbounds %printf_t, %printf_t* %printf_args, i64 0, i32 1 + store i64 %21, i64* %22, align 8 + %get_cpu_id = call i64 inttoptr (i64 15 to i64 ()*)() + %perf_event_output = call i64 inttoptr (i64 17 to i64 (i8*, i64, i64, %printf_t*, i64)*)(i8* %0, i64 1, i64 %get_cpu_id, %printf_t* nonnull %printf_args, i64 16) + call void @llvm.lifetime.end.p0i8(i64 -1, i8* nonnull %17) + ret i64 0 +} + +; Function Attrs: argmemonly nounwind willreturn +declare void @llvm.lifetime.start.p0i8(i64 immarg %0, i8* nocapture %1) #1 + +; Function Attrs: argmemonly nounwind willreturn +declare void @llvm.lifetime.end.p0i8(i64 immarg %0, i8* nocapture %1) #1 + +attributes #0 = { nounwind } +attributes #1 = { argmemonly nounwind willreturn } diff --git a/llvm/test/CodeGen/BPF/objdump_cond_op.ll b/llvm/test/CodeGen/BPF/objdump_cond_op.ll --- a/llvm/test/CodeGen/BPF/objdump_cond_op.ll +++ b/llvm/test/CodeGen/BPF/objdump_cond_op.ll @@ -45,10 +45,10 @@ br label %13 ; CHECK-LABEL: : -; CHECK: r3 = 0 ll -; CHECK: r0 = *(u32 *)(r3 + 0) ; CHECK: r2 <<= 32 ; CHECK: r2 >>= 32 +; CHECK: r3 = 0 ll +; CHECK: r0 = *(u32 *)(r3 + 0) ; CHECK: if r1 == r2 goto +4 ; CHECK: r0 <<= 2 diff --git a/llvm/test/CodeGen/BPF/objdump_intrinsics.ll b/llvm/test/CodeGen/BPF/objdump_intrinsics.ll --- a/llvm/test/CodeGen/BPF/objdump_intrinsics.ll +++ b/llvm/test/CodeGen/BPF/objdump_intrinsics.ll @@ -31,10 +31,10 @@ %5 = trunc i64 %4 to i32 ret i32 %5 ; CHECK-LABEL: ld_h: -; CHECK-EL: r0 = *(u16 *)skb[r ; CHECK-EL: r0 = *(u16 *)skb[123] -; CHECK-EB: r0 = *(u16 *)skb[r +; CHECK-EL: r0 = *(u16 *)skb[r ; CHECK-EB: r0 = *(u16 *)skb[123] +; CHECK-EB: r0 = *(u16 *)skb[r } declare i64 @llvm.bpf.load.half(i8*, i64) #1 @@ -48,10 +48,10 @@ %5 = trunc i64 %4 to i32 ret i32 %5 ; CHECK-LABEL: ld_w: -; CHECK-EL: r0 = *(u32 *)skb[r ; CHECK-EL: r0 = *(u32 *)skb[123] -; CHECK-EB: r0 = *(u32 *)skb[r +; CHECK-EL: r0 = *(u32 *)skb[r ; CHECK-EB: r0 = *(u32 *)skb[123] +; CHECK-EB: r0 = *(u32 *)skb[r } declare i64 @llvm.bpf.load.word(i8*, i64) #1 diff --git a/llvm/test/CodeGen/BPF/objdump_nop.ll b/llvm/test/CodeGen/BPF/objdump_nop.ll --- a/llvm/test/CodeGen/BPF/objdump_nop.ll +++ b/llvm/test/CodeGen/BPF/objdump_nop.ll @@ -2,7 +2,7 @@ ; ; Source: ; int test() { -; asm volatile("r0 = r0" ::); +; asm volatile("r0 = r0" :::"r0"); ; return 0; ; } ; Compilation flag: @@ -11,7 +11,7 @@ ; Function Attrs: nounwind define dso_local i32 @test() local_unnamed_addr { entry: - tail call void asm sideeffect "r0 = r0", ""() + tail call void asm sideeffect "r0 = r0", "~{r0}"() ret i32 0 } ; CHECK-LABEL: test diff --git a/llvm/test/CodeGen/BPF/remove_truncate_3.ll b/llvm/test/CodeGen/BPF/remove_truncate_3.ll --- a/llvm/test/CodeGen/BPF/remove_truncate_3.ll +++ b/llvm/test/CodeGen/BPF/remove_truncate_3.ll @@ -91,13 +91,13 @@ ; Function Attrs: norecurse nounwind readnone define i32 @rol32(i32, i32) local_unnamed_addr #1 { %3 = shl i32 %0, %1 -; CHECK: r1 <<= 32 -; CHECK: r1 >>= 32 +; CHECK: r{{[0-9]+}} <<= 32 +; CHECK: r{{[0-9]+}} >>= 32 %4 = sub i32 0, %1 %5 = and i32 %4, 31 %6 = lshr i32 %0, %5 -; CHECK: r0 <<= 32 -; CHECK: r0 >>= 32 +; CHECK: r{{[0-9]+}} <<= 32 +; CHECK: r{{[0-9]+}} >>= 32 %7 = or i32 %6, %3 ret i32 %7 } diff --git a/llvm/test/CodeGen/BPF/rodata_5.ll b/llvm/test/CodeGen/BPF/rodata_5.ll --- a/llvm/test/CodeGen/BPF/rodata_5.ll +++ b/llvm/test/CodeGen/BPF/rodata_5.ll @@ -33,10 +33,10 @@ call void @llvm.lifetime.end.p0i8(i64 3, i8* nonnull %v1.sub) ret i32 0 } -; CHECK-NOT: w{{[0-9]+}} = *(u16 *) ; CHECK-NOT: w{{[0-9]+}} = *(u8 *) -; CHECK: *(u16 *)(r10 - 4) = w{{[0-9]+}} +; CHECK-NOT: w{{[0-9]+}} = *(u16 *) ; CHECK: *(u8 *)(r10 - 2) = w{{[0-9]+}} +; CHECK: *(u16 *)(r10 - 4) = w{{[0-9]+}} ; Function Attrs: argmemonly nounwind willreturn declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture)