diff options
author | Yonghong Song <yonghong.song@linux.dev> | 2025-01-18 22:20:34 +0300 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2025-01-20 20:47:14 +0300 |
commit | 14a627fe794a10cf507861e63cf9d46077699337 (patch) | |
tree | 9b3a227d026d6b2eb96fe789b792099353f03310 /tools/perf/scripts/python/export-to-sqlite.py | |
parent | 0c35ca252a7dea61f0731e99d695492176862e2c (diff) | |
download | linux-14a627fe794a10cf507861e63cf9d46077699337.tar.xz |
selftests/bpf: Add some tests related to 'may_goto 0' insns
Add both asm-based and C-based tests which have 'may_goto 0' insns.
For the following code in C-based test,
int i, tmp[3];
for (i = 0; i < 3 && can_loop; i++)
tmp[i] = 0;
The clang compiler (clang 19 and 20) generates
may_goto 2
may_goto 1
may_goto 0
r1 = 0
r2 = 0
r3 = 0
The above asm codes are due to llvm pass SROAPass. This ensures the
successful verification since tmp[0-2] are initialized. Otherwise,
the code without SROAPass like
may_goto 5
r1 = 0
may_goto 3
r2 = 0
may_goto 1
r3 = 0
will have verification failure.
Although from the source code C-based test should have verification
failure, clang compiler optimization generates code with successful
verification. If gcc generates different asm codes than clang, the
following code can be used for gcc:
int i, tmp[3];
for (i = 0; i < 3; i++)
tmp[i] = 0;
Acked-by: Eduard Zingerman <eddyz87@gmail.com>
Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
Link: https://lore.kernel.org/r/20250118192034.2124952-1-yonghong.song@linux.dev
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'tools/perf/scripts/python/export-to-sqlite.py')
0 files changed, 0 insertions, 0 deletions