[all-commits] [llvm/llvm-project] a260ae: BPF: Implement TTI.IntImmCost() properly
yonghong-song via All-commits
all-commits at lists.llvm.org
Thu Feb 11 08:36:06 PST 2021
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: a260ae716030d5d2644a2af649501277d326bb21
https://github.com/llvm/llvm-project/commit/a260ae716030d5d2644a2af649501277d326bb21
Author: Yonghong Song <yhs at fb.com>
Date: 2021-02-11 (Thu, 11 Feb 2021)
Changed paths:
M llvm/lib/Target/BPF/BPFTargetMachine.cpp
M llvm/lib/Target/BPF/BPFTargetMachine.h
A llvm/lib/Target/BPF/BPFTargetTransformInfo.h
Log Message:
-----------
BPF: Implement TTI.IntImmCost() properly
This patch implemented TTI.IntImmCost() properly.
Each BPF insn has 32bit immediate space, so for any immediate
which can be represented as 32bit signed int, the cost
is technically free. If an int cannot be presented as
a 32bit signed int, a ld_imm64 instruction is needed
and a TCC_Basic is returned.
This change is motivated when we observed that
several bpf selftests failed with latest llvm trunk, e.g.,
#10/16 strobemeta.o:FAIL
#10/17 strobemeta_nounroll1.o:FAIL
#10/18 strobemeta_nounroll2.o:FAIL
#10/19 strobemeta_subprogs.o:FAIL
#96 snprintf_btf:FAIL
The reason of the failure is due to that
SpeculateAroundPHIsPass did aggressive transformation
which alters control flow for which currently verifer
cannot handle well. In llvm12, SpeculateAroundPHIsPass
is not called.
SpeculateAroundPHIsPass relied on TTI.getIntImmCost()
and TTI.getIntImmCostInst() for profitability
analysis. This patch implemented TTI.getIntImmCost()
properly for BPF backend which also prevented
transformation which caused the above test failures.
Differential Revision: https://reviews.llvm.org/D96448
More information about the All-commits
mailing list