bpf: fix a bug in trunc-op optimization

Previous implementation for per-function scope
is incorrect and too conservative.

Signed-off-by: Yonghong Song <yhs@fb.com>
llvm-svn: 316481
This commit is contained in:
Yonghong Song 2017-10-24 18:21:10 +00:00
parent ab1d119154
commit ee68d8e41f
1 changed files with 8 additions and 1 deletions

View File

@ -85,6 +85,8 @@ private:
std::map<const void *, val_vec_type> cs_vals_;
// Mapping from vreg to load memory opcode
std::map<unsigned, unsigned> load_to_vreg_;
// Current function
const Function *curr_func_;
};
} // namespace
@ -332,7 +334,12 @@ void BPFDAGToDAGISel::PreprocessISelDAG() {
// clear the load_to_vreg_ map so that we have a clean start
// for this function.
load_to_vreg_.clear();
if (!curr_func_) {
curr_func_ = FuncInfo->Fn;
} else if (curr_func_ != FuncInfo->Fn) {
load_to_vreg_.clear();
curr_func_ = FuncInfo->Fn;
}
for (SelectionDAG::allnodes_iterator I = CurDAG->allnodes_begin(),
E = CurDAG->allnodes_end();