llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-llvm-ir Author: Bryce Kahle (brycekahle) <details> <summary>Changes</summary> The BPF packet load intrinsics lost attribute WillReturn due to 0b20c30. The attribute loss causes excessive bitshifting, resulting in previously working programs failing the BPF verifier due to instruction/complexity limits. cherry picked only the BPF changes from 99a10f1 --- Full diff: https://github.com/llvm/llvm-project/pull/105314.diff 3 Files Affected: - (modified) llvm/include/llvm/IR/IntrinsicsBPF.td (+3-3) - (modified) llvm/test/CodeGen/BPF/sockex2.ll (+1-1) - (added) llvm/test/Transforms/DCE/intrinsics-bpf.ll (+33) ``````````diff diff --git a/llvm/include/llvm/IR/IntrinsicsBPF.td b/llvm/include/llvm/IR/IntrinsicsBPF.td index c7ec0916f1d1f..d02eaa6d0dff6 100644 --- a/llvm/include/llvm/IR/IntrinsicsBPF.td +++ b/llvm/include/llvm/IR/IntrinsicsBPF.td @@ -13,11 +13,11 @@ // Specialized loads from packet let TargetPrefix = "bpf" in { // All intrinsics start with "llvm.bpf." def int_bpf_load_byte : ClangBuiltin<"__builtin_bpf_load_byte">, - Intrinsic<[llvm_i64_ty], [llvm_ptr_ty, llvm_i64_ty], [IntrReadMem]>; + DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_ptr_ty, llvm_i64_ty], [IntrReadMem]>; def int_bpf_load_half : ClangBuiltin<"__builtin_bpf_load_half">, - Intrinsic<[llvm_i64_ty], [llvm_ptr_ty, llvm_i64_ty], [IntrReadMem]>; + DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_ptr_ty, llvm_i64_ty], [IntrReadMem]>; def int_bpf_load_word : ClangBuiltin<"__builtin_bpf_load_word">, - Intrinsic<[llvm_i64_ty], [llvm_ptr_ty, llvm_i64_ty], [IntrReadMem]>; + DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_ptr_ty, llvm_i64_ty], [IntrReadMem]>; def int_bpf_pseudo : ClangBuiltin<"__builtin_bpf_pseudo">, Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty]>; def int_bpf_preserve_field_info : ClangBuiltin<"__builtin_bpf_preserve_field_info">, diff --git a/llvm/test/CodeGen/BPF/sockex2.ll b/llvm/test/CodeGen/BPF/sockex2.ll index 4131d9dac31d8..b1264099f64c6 100644 --- a/llvm/test/CodeGen/BPF/sockex2.ll +++ b/llvm/test/CodeGen/BPF/sockex2.ll @@ -311,7 +311,7 @@ flow_dissector.exit.thread: ; preds = %86, %12, %196, %199 ; CHECK-LABEL: bpf_prog2: ; CHECK: r0 = *(u16 *)skb[12] # encoding: [0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00] ; CHECK: r0 = *(u16 *)skb[16] # encoding: [0x28,0x00,0x00,0x00,0x10,0x00,0x00,0x00] -; CHECK: implicit-def: $r8 +; CHECK: implicit-def: $r7 ; CHECK: r1 = ; CHECK: call 1 # encoding: [0x85,0x00,0x00,0x00,0x01,0x00,0x00,0x00] ; CHECK: call 2 # encoding: [0x85,0x00,0x00,0x00,0x02,0x00,0x00,0x00] diff --git a/llvm/test/Transforms/DCE/intrinsics-bpf.ll b/llvm/test/Transforms/DCE/intrinsics-bpf.ll new file mode 100644 index 0000000000000..135588ba21cbb --- /dev/null +++ b/llvm/test/Transforms/DCE/intrinsics-bpf.ll @@ -0,0 +1,33 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 +; RUN: opt -S < %s -passes=dce | FileCheck %s + +declare i64 @llvm.bpf.load.half(ptr, i64) +declare i64 @llvm.bpf.load.word(ptr, i64) +declare i64 @llvm.bpf.load.byte(ptr, i64) + +define void @test_bpf_load_half(ptr %a, i64 %b) { +; CHECK-LABEL: define void @test_bpf_load_half( +; CHECK-SAME: ptr [[A:%.*]], i64 [[B:%.*]]) { +; CHECK-NEXT: ret void +; + %v = call i64 @llvm.bpf.load.half(ptr %a, i64 %b) + ret void +} + +define void @test_bpf_load_word(ptr %a, i64 %b) { +; CHECK-LABEL: define void @test_bpf_load_word( +; CHECK-SAME: ptr [[A:%.*]], i64 [[B:%.*]]) { +; CHECK-NEXT: ret void +; + %v = call i64 @llvm.bpf.load.word(ptr %a, i64 %b) + ret void +} + +define void @test_bpf_load_byte(ptr %a, i64 %b) { +; CHECK-LABEL: define void @test_bpf_load_byte( +; CHECK-SAME: ptr [[A:%.*]], i64 [[B:%.*]]) { +; CHECK-NEXT: ret void +; + %v = call i64 @llvm.bpf.load.byte(ptr %a, i64 %b) + ret void +} `````````` </details> https://github.com/llvm/llvm-project/pull/105314 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits