[llvm-dev] [iovisor-dev] [PATCH, BPF 5/5] BPF: Add 32-bit and pattern

Alexei Starovoitov via llvm-dev llvm-dev at lists.llvm.org
Wed Jun 15 22:41:54 PDT 2016


On Wed, Jun 15, 2016 at 2:37 PM, Richard Henderson via iovisor-dev
<iovisor-dev at lists.iovisor.org> wrote:
> We can represent a 64-bit AND with unsigned immediate
> with a 32-bit AND opcode.
>
> Signed-off-by: Richard Henderson <rth at twiddle.net>
> ---
>  lib/Target/BPF/BPFInstrInfo.td | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
>
> diff --git a/lib/Target/BPF/BPFInstrInfo.td b/lib/Target/BPF/BPFInstrInfo.td
> index 33481b9..62c2dd8 100644
> --- a/lib/Target/BPF/BPFInstrInfo.td
> +++ b/lib/Target/BPF/BPFInstrInfo.td
> @@ -273,6 +273,21 @@ let isReMaterializable = 1, isAsCheapAsAMove = 1 in {
>    } // isMoveImm
>  }
>
> +let Constraints = "$dst = $srcd", isAsCheapAsAMove = 1, isCommutable = 1 in {
> +  def AND_ru
> +    : F_COF<4 /* BPF_ALU */, 0x5 /* BPF_AND */, 0 /* BPF_K */,
> +            (outs GPR:$dst), (ins GPR:$srcd, i64imm:$imm),
> +            "andwi\t$dst, $imm",
> +            [(set GPR:$dst, (and GPR:$srcd, i64immZExt32:$imm))]> {

nice!
Do you have further optimizations that take advantage of 32-bit
subregisters and zero extension?
Should it be added in more generic way instead of pattern match?


More information about the llvm-dev mailing list