#include <ostream>
#include <set>
#include <string>
#include <unordered_set>
#include <utility>
#include <vector>
#include "source/opt/basic_block.h"
#include "source/opt/instruction.h"
#include "source/opt/loop_dependence.h"
#include "source/opt/scalar_analysis_nodes.h"
namespace spvtools {
namespace opt {
bool LoopDependenceAnalysis::IsZIV(
const std::pair<SENode*, SENode*>& subscript_pair) { … }
bool LoopDependenceAnalysis::IsSIV(
const std::pair<SENode*, SENode*>& subscript_pair) { … }
bool LoopDependenceAnalysis::IsMIV(
const std::pair<SENode*, SENode*>& subscript_pair) { … }
SENode* LoopDependenceAnalysis::GetLowerBound(const Loop* loop) { … }
SENode* LoopDependenceAnalysis::GetUpperBound(const Loop* loop) { … }
bool LoopDependenceAnalysis::IsWithinBounds(int64_t value, int64_t bound_one,
int64_t bound_two) { … }
bool LoopDependenceAnalysis::IsProvablyOutsideOfLoopBounds(
const Loop* loop, SENode* distance, SENode* coefficient) { … }
const Loop* LoopDependenceAnalysis::GetLoopForSubscriptPair(
const std::pair<SENode*, SENode*>& subscript_pair) { … }
DistanceEntry* LoopDependenceAnalysis::GetDistanceEntryForLoop(
const Loop* loop, DistanceVector* distance_vector) { … }
DistanceEntry* LoopDependenceAnalysis::GetDistanceEntryForSubscriptPair(
const std::pair<SENode*, SENode*>& subscript_pair,
DistanceVector* distance_vector) { … }
SENode* LoopDependenceAnalysis::GetTripCount(const Loop* loop) { … }
SENode* LoopDependenceAnalysis::GetFirstTripInductionNode(const Loop* loop) { … }
SENode* LoopDependenceAnalysis::GetFinalTripInductionNode(
const Loop* loop, SENode* induction_coefficient) { … }
std::set<const Loop*> LoopDependenceAnalysis::CollectLoops(
const std::vector<SERecurrentNode*>& recurrent_nodes) { … }
int64_t LoopDependenceAnalysis::CountInductionVariables(SENode* node) { … }
std::set<const Loop*> LoopDependenceAnalysis::CollectLoops(
SENode* source, SENode* destination) { … }
int64_t LoopDependenceAnalysis::CountInductionVariables(SENode* source,
SENode* destination) { … }
Instruction* LoopDependenceAnalysis::GetOperandDefinition(
const Instruction* instruction, int id) { … }
std::vector<Instruction*> LoopDependenceAnalysis::GetSubscripts(
const Instruction* instruction) { … }
SENode* LoopDependenceAnalysis::GetConstantTerm(const Loop* loop,
SERecurrentNode* induction) { … }
bool LoopDependenceAnalysis::CheckSupportedLoops(
std::vector<const Loop*> loops) { … }
void LoopDependenceAnalysis::MarkUnsusedDistanceEntriesAsIrrelevant(
const Instruction* source, const Instruction* destination,
DistanceVector* distance_vector) { … }
bool LoopDependenceAnalysis::IsSupportedLoop(const Loop* loop) { … }
void LoopDependenceAnalysis::PrintDebug(std::string debug_msg) { … }
bool Constraint::operator==(const Constraint& other) const { … }
bool Constraint::operator!=(const Constraint& other) const { … }
}
}