mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	[LoopAccesses] Add -analyze support
The LoopInfo in combination with depth_first is used to enumerate the loops. Right now -analyze is not yet complete. It only prints the result of the analysis, the report and the run-time checks. Printing the unsafe depedences will require a bit more reshuffling which I'd like to do in a follow-on to this patchset. Unsafe dependences are currently checked via -debug-only=loop-accesses in the new test. This is part of the patchset that converts LoopAccessAnalysis into an actual analysis pass. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229898 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
		| @@ -122,10 +122,16 @@ public: | ||||
|     void insert(ScalarEvolution *SE, Loop *Lp, Value *Ptr, bool WritePtr, | ||||
|                 unsigned DepSetId, unsigned ASId, ValueToValueMap &Strides); | ||||
|  | ||||
|     /// \brief No run-time memory checking is necessary. | ||||
|     bool empty() const { return Pointers.empty(); } | ||||
|  | ||||
|     /// \brief Decide whether we need to issue a run-time check for pointer at | ||||
|     /// index \p I and \p J to prove their independence. | ||||
|     bool needsChecking(unsigned I, unsigned J) const; | ||||
|  | ||||
|     /// \brief Print the list run-time memory checks necessary. | ||||
|     void print(raw_ostream &OS, unsigned Depth = 0) const; | ||||
|  | ||||
|     /// This flag indicates if we need to add the runtime check. | ||||
|     bool Need; | ||||
|     /// Holds the pointers that we need to check. | ||||
| @@ -176,6 +182,9 @@ public: | ||||
|   /// couldn't analyze the loop. | ||||
|   Optional<LoopAccessReport> &getReport() { return Report; } | ||||
|  | ||||
|   /// \brief Print the information about the memory accesses in the loop. | ||||
|   void print(raw_ostream &OS, unsigned Depth = 0) const; | ||||
|  | ||||
|   /// \brief Used to ensure that if the analysis was run with speculating the | ||||
|   /// value of symbolic strides, the client queries it with the same assumption. | ||||
|   /// Only used in DEBUG build but we don't want NDEBUG-depedent ABI. | ||||
| @@ -258,6 +267,9 @@ public: | ||||
|     LoopAccessInfoMap.clear(); | ||||
|   } | ||||
|  | ||||
|   /// \brief Print the result of the analysis when invoked with -analyze. | ||||
|   void print(raw_ostream &OS, const Module *M = nullptr) const override; | ||||
|  | ||||
| private: | ||||
|   /// \brief The cache. | ||||
|   DenseMap<Loop *, std::unique_ptr<LoopAccessInfo>> LoopAccessInfoMap; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user