Hi, We discussed the max<min issue in [1]. But it cannot reproduced with a C inlined assembly test, as llvm doesn't support 'jset' assembly. Thanks to Yonghong's patch [2], it is now supported in the latest llvm-18. So, I resubmit the C inlined assembly test for the max<min issue here again. [1] https://lore.kernel.org/bpf/20231121173206.3594040-1-tao.lyu@xxxxxxx/ [2] https://github.com/yonghong-song/llvm-project/commit/e247e6ff272ce70003ca67f62be178f332f9de0f Signed-off-by: Tao Lyu <tao.lyu@xxxxxxx> --- .../selftests/bpf/prog_tests/verifier.c | 2 ++ .../selftests/bpf/progs/verifier_range.c | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 tools/testing/selftests/bpf/progs/verifier_range.c diff --git a/tools/testing/selftests/bpf/prog_tests/verifier.c b/tools/testing/selftests/bpf/prog_tests/verifier.c index e5c61aa6604a..3a5d746f392d 100644 --- a/tools/testing/selftests/bpf/prog_tests/verifier.c +++ b/tools/testing/selftests/bpf/prog_tests/verifier.c @@ -77,6 +77,7 @@ #include "verifier_xadd.skel.h" #include "verifier_xdp.skel.h" #include "verifier_xdp_direct_packet_access.skel.h" +#include "verifier_range.skel.h" #define MAX_ENTRIES 11 @@ -184,6 +185,7 @@ void test_verifier_var_off(void) { RUN(verifier_var_off); } void test_verifier_xadd(void) { RUN(verifier_xadd); } void test_verifier_xdp(void) { RUN(verifier_xdp); } void test_verifier_xdp_direct_packet_access(void) { RUN(verifier_xdp_direct_packet_access); } +void test_verifier_range(void) { RUN(verifier_range); } static int init_test_val_map(struct bpf_object *obj, char *map_name) { diff --git a/tools/testing/selftests/bpf/progs/verifier_range.c b/tools/testing/selftests/bpf/progs/verifier_range.c new file mode 100644 index 000000000000..affe09117b0f --- /dev/null +++ b/tools/testing/selftests/bpf/progs/verifier_range.c @@ -0,0 +1,29 @@ +#include <linux/bpf.h> +#include <bpf/bpf_helpers.h> +#include "bpf_misc.h" + +#if __clang_major__ >= 18 + +SEC("?tc") +__log_level(2) +int test_verifier_range(void) +{ + asm volatile ( + "r5 = 100; \ + r5 /= 3; \ + w5 >>= 7; \ + r5 &= -386969681; \ + r5 -= -884670597; \ + w0 = w5; \ + if w0 & 0x894b6a55 goto +2; \ + r2 = 1; \ + r2 = 1; \ + r0 = 0; \ + " + ); + return 0; +} + +char _license[] SEC("license") = "GPL"; + +#endif -- 2.25.1