[all-commits] [llvm/llvm-project] 1ff84a: BPF: fix incorrect DAG2DAG load optimization
yonghong-song via All-commits
all-commits at lists.llvm.org
Fri Oct 30 21:02:08 PDT 2020
Branch: refs/heads/release/11.x
Home: https://github.com/llvm/llvm-project
Commit: 1ff84a04aebcafc65e43dfe13d6f2aa352f72637
https://github.com/llvm/llvm-project/commit/1ff84a04aebcafc65e43dfe13d6f2aa352f72637
Author: Yonghong Song <yhs at fb.com>
Date: 2020-10-31 (Sat, 31 Oct 2020)
Changed paths:
M llvm/lib/Target/BPF/BPFISelDAGToDAG.cpp
A llvm/test/CodeGen/BPF/rodata_6.ll
A llvm/test/CodeGen/BPF/rodata_7.ll
Log Message:
-----------
BPF: fix incorrect DAG2DAG load optimization
Currently, bpf backend Instruction section DAG2DAG phase has
an optimization to replace loading constant struct memeber
or array element with direct values. The reason is that these
locally defined struct or array variables may have their
initial values stored in a readonly section and early bpf
ecosystem is not able to handle such cases.
Bpf ecosystem now can not only handle readonly sections,
but also global variables. global variable can also have
initialized data and global variable may or may not be constant,
i.e., global variable data can be put in .data section or .rodata
section. This exposed a bug in DAG2DAG Load optimization
as it did not check whether the global variable is constant
or not.
This patch fixed the bug by checking whether global variable,
representing the initial data, is constant or not and will not
do optimization if it is not a constant.
Another bug is also fixed in this patch to check whether
the load is simple (not volatile/atomic) or not. If it is
not simple, we will not do optimization. To summary for
globals:
- struct t var = { ... } ; // no load optimization
- const struct t var = { ... }; // load optimization is possible
- volatile const struct t var = { ... }; // no load optimization
Differential Revision: https://reviews.llvm.org/D89021
(cherry picked from commit 31611721686760fe59c91a84b025e4dee94d1662)
More information about the All-commits
mailing list