HomePhabricator

bpf: fix incorrect SELECT_CC lowering

Description

bpf: fix incorrect SELECT_CC lowering

Commit 37962a331c77 ("bpf: Improve expanding logic in LowerSELECT_CC")
intended to improve code quality for certain jmp conditions. The
commit, however, has a couple of issues:

(1). In code, just swap is not enough, ConditionalCode CC
     should also be swapped, otherwise incorrect code will
     be generated.
(2). The ConditionalCode swap should be subject to
     getHasJmpExt(). If getHasJmpExt() is False, certain
     conditional codes will not be supported and swap
     may generate incorrect code.

The original goal for this patch is to optimize jmp operations
which does not have JmpExt turned on. If JmpExt is on,
better code could be generated. For example, the test
select_ri.ll is introduced to demonstrate the optimization.
The same result can be achieved with -mcpu=v2 flag.

Signed-off-by: Yonghong Song <yhs@fb.com>
Acked-by: Alexei Starovoitov <ast@kernel.org>

Details

Committed
yhsApr 2 2018, 8:56 PM
Parents
rL329042: peel loops with runtime small trip counts
Branches
Unknown
Tags
Unknown