]> granicus.if.org Git - llvm/commitdiff
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>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@316469 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/BPF/BPFISelDAGToDAG.cpp

index 1f382f3e73f50d6d6e068ee5034b8db570283716..5c545603668069dd477cf0c12c7f78a7e92bf499 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;) {