bpf: fix a bug in bpf-isel trunc-op optimization
authorYonghong Song <yhs@fb.com>
Tue, 24 Oct 2017 17:29:03 +0000 (17:29 +0000)
committerYonghong Song <yhs@fb.com>
Tue, 24 Oct 2017 17:29:03 +0000 (17:29 +0000)
In BPF backend, we try to optimize away redundant
trunc operations so that kernel verifier rewrite
remains valid. Previous implementation only works
for a single function.

This patch fixed the issue for multiple functions.
It clears internal map data structure before
performing optimization for each function.

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

llvm/lib/Target/BPF/BPFISelDAGToDAG.cpp

index 1f382f3..5c54560 100644 (file)
@@ -329,6 +329,11 @@ void BPFDAGToDAGISel::PreprocessISelDAG() {
   //    are 32-bit registers, but later on, kernel verifier will rewrite
   //    it with 64-bit value. Therefore, truncating the value after the
   //    load will result in incorrect code.
+
+  // clear the load_to_vreg_ map so that we have a clean start
+  // for this function.
+  load_to_vreg_.clear();
+
   for (SelectionDAG::allnodes_iterator I = CurDAG->allnodes_begin(),
                                        E = CurDAG->allnodes_end();
        I != E;) {