Print this page
new smatch

@@ -5,10 +5,11 @@
  * Copyright (C) 2004 Linus Torvalds
  */
 
 #include <assert.h>
 
+#include "liveness.h"
 #include "parse.h"
 #include "expression.h"
 #include "linearize.h"
 #include "flow.h"
 

@@ -51,30 +52,29 @@
         #define USES(x)         use(bb, insn->x)
         #define DEFINES(x)      def(bb, insn->x)
 
         switch (insn->opcode) {
         case OP_RET:
+        case OP_COMPUTEDGOTO:
                 USES(src);
                 break;
 
         case OP_CBR:
         case OP_SWITCH:
                 USES(cond);
                 break;
 
-        case OP_COMPUTEDGOTO:
-                USES(target);
-                break;
-        
         /* Binary */
         case OP_BINARY ... OP_BINARY_END:
+        case OP_FPCMP ... OP_FPCMP_END:
         case OP_BINCMP ... OP_BINCMP_END:
                 USES(src1); USES(src2); DEFINES(target);
                 break;
 
         /* Uni */
-        case OP_NOT: case OP_NEG:
+        case OP_UNOP ... OP_UNOP_END:
+        case OP_SYMADDR:
                 USES(src1); DEFINES(target);
                 break;
 
         case OP_SEL:
                 USES(src1); USES(src2); USES(src3); DEFINES(target);

@@ -88,17 +88,14 @@
         case OP_STORE:
                 USES(src); USES(target);
                 break;
 
         case OP_SETVAL:
+        case OP_SETFVAL:
                 DEFINES(target);
                 break;
 
-        case OP_SYMADDR:
-                USES(symbol); DEFINES(target);
-                break;
-
         /* Other */
         case OP_PHI:
                 /* Phi-nodes are "backwards" nodes. Their def doesn't matter */
                 phi_defines(insn, insn->target, def);
                 break;

@@ -109,17 +106,10 @@
                  * up and expanded by the OP_PHI
                  */
                 USES(phi_src);
                 break;
 
-        case OP_CAST:
-        case OP_SCAST:
-        case OP_FPCAST:
-        case OP_PTRCAST:
-                USES(src); DEFINES(target);
-                break;
-
         case OP_CALL:
                 USES(func);
                 if (insn->target != VOID)
                         DEFINES(target);
                 FOR_EACH_PTR(insn->arguments, pseudo) {

@@ -138,35 +128,16 @@
         case OP_RANGE:
                 USES(src1); USES(src2); USES(src3);
                 break;
 
         case OP_BADOP:
-        case OP_INVOKE:
-        case OP_UNWIND:
-        case OP_MALLOC:
-        case OP_FREE:
-        case OP_ALLOCA:
-        case OP_GET_ELEMENT_PTR:
-        case OP_VANEXT:
-        case OP_VAARG:
-        case OP_SNOP:
-        case OP_LNOP:
         case OP_NOP:
         case OP_CONTEXT:
                 break;
         }
 }
 
-int pseudo_in_list(struct pseudo_list *list, pseudo_t pseudo)
-{
-        pseudo_t old;
-        FOR_EACH_PTR(list,old) {
-                if (old == pseudo)
-                        return 1;
-        } END_FOR_EACH_PTR(old);   
-        return 0;
-}
 
 static int liveness_changed;
 
 static void add_pseudo_exclusive(struct pseudo_list **list, pseudo_t pseudo)
 {

@@ -274,11 +245,11 @@
         FOR_EACH_PTR(src, pseudo) {
                 add_pseudo_exclusive(dest, pseudo);
         } END_FOR_EACH_PTR(pseudo);
 }
 
-void track_phi_uses(struct instruction *insn)
+static void track_phi_uses(struct instruction *insn)
 {
         pseudo_t phi;
         FOR_EACH_PTR(insn->phi_list, phi) {
                 struct instruction *def;
                 if (phi == VOID || !phi->def)