Updated dependence analyzer. Fixed numerous bugs. Same stage scheduling, etc.

llvm-svn: 21444
diff --git a/llvm/lib/Target/SparcV9/ModuloScheduling/DependenceAnalyzer.h b/llvm/lib/Target/SparcV9/ModuloScheduling/DependenceAnalyzer.h
index 6223fb7..2440ea9 100644
--- a/llvm/lib/Target/SparcV9/ModuloScheduling/DependenceAnalyzer.h
+++ b/llvm/lib/Target/SparcV9/ModuloScheduling/DependenceAnalyzer.h
@@ -17,10 +17,12 @@
 #include "llvm/Function.h"
 #include "llvm/Pass.h"
 #include "llvm/Analysis/AliasAnalysis.h"
+#include "llvm/Analysis/ScalarEvolutionExpressions.h"
 #include "llvm/Target/TargetData.h"
 #include <vector>
 
 namespace llvm {
+  
 
   //class to represent a dependence
   struct Dependence {
@@ -47,11 +49,25 @@
 
 
   class DependenceAnalyzer : public FunctionPass {
+ 
+
     AliasAnalysis *AA;
     TargetData *TD;
+    ScalarEvolution *SE;
+
+    void advancedDepAnalysis(GetElementPtrInst *gp1, GetElementPtrInst *gp2, 
+			     bool valLoad, bool val2Load,
+			     std::vector<Dependence> &deps, bool srcBeforeDest);
+
+    void AnalyzeDeps(Value *val, Value *val2, bool val1Load, bool val2Load, 
+		     std::vector<Dependence> &deps, BasicBlock *BB, 
+		     bool srcBeforeDest);
+    
+    void createDep(std::vector<Dependence> &deps, bool valLoad, bool val2Load, 
+		   bool srcBeforeDest, int diff = 0);
 
   public:
-    DependenceAnalyzer() { AA = 0; TD = 0; }
+    DependenceAnalyzer() { AA = 0; TD = 0; SE = 0; }
     virtual bool runOnFunction(Function &F);
     virtual const char* getPassName() const { return "DependenceAnalyzer"; }
 
@@ -59,10 +75,13 @@
     virtual void getAnalysisUsage(AnalysisUsage &AU) const {
       AU.addRequired<AliasAnalysis>();
       AU.addRequired<TargetData>();
+      AU.addRequired<ScalarEvolution>();
+      AU.setPreservesAll();
     }
 
     //get dependence info
-    DependenceResult getDependenceInfo(Instruction *inst1, Instruction *inst2);
+    DependenceResult getDependenceInfo(Instruction *inst1, Instruction *inst2, 
+				       bool srcBeforeDest);
 
   };