projects
/
oota-llvm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix a GCC buildbot that seemed to be having trouble producing the implicit move ctor
[oota-llvm.git]
/
include
/
llvm
/
Analysis
/
DependenceAnalysis.h
diff --git
a/include/llvm/Analysis/DependenceAnalysis.h
b/include/llvm/Analysis/DependenceAnalysis.h
index a52d6a8ef2d8e6a07160e326a345509ba6078a0c..791305dbfbb9c1b5f8184fa2d5e2ae646977950a 100644
(file)
--- a/
include/llvm/Analysis/DependenceAnalysis.h
+++ b/
include/llvm/Analysis/DependenceAnalysis.h
@@
-41,6
+41,7
@@
#define LLVM_ANALYSIS_DEPENDENCEANALYSIS_H
#include "llvm/ADT/SmallBitVector.h"
#define LLVM_ANALYSIS_DEPENDENCEANALYSIS_H
#include "llvm/ADT/SmallBitVector.h"
+#include "llvm/ADT/ArrayRef.h"
#include "llvm/IR/Instructions.h"
#include "llvm/Pass.h"
#include "llvm/IR/Instructions.h"
#include "llvm/Pass.h"
@@
-68,6
+69,9
@@
namespace llvm {
/// as singly-linked lists, with the "next" fields stored in the dependence
/// itelf.
class Dependence {
/// as singly-linked lists, with the "next" fields stored in the dependence
/// itelf.
class Dependence {
+ protected:
+ Dependence(const Dependence &) = default;
+
public:
Dependence(Instruction *Source,
Instruction *Destination) :
public:
Dependence(Instruction *Source,
Instruction *Destination) :
@@
-215,15
+219,15
@@
namespace llvm {
/// (for output, flow, and anti dependences), the dependence implies an
/// ordering, where the source must precede the destination; in contrast,
/// input dependences are unordered.
/// (for output, flow, and anti dependences), the dependence implies an
/// ordering, where the source must precede the destination; in contrast,
/// input dependences are unordered.
- class FullDependence : public Dependence {
+ class FullDependence
final
: public Dependence {
public:
public:
- FullDependence(Instruction *Src,
- Instruction *Dst,
- bool LoopIndependent,
+ FullDependence(Instruction *Src, Instruction *Dst, bool LoopIndependent,
unsigned Levels);
unsigned Levels);
- ~FullDependence() {
- delete[] DV;
- }
+
+ FullDependence(FullDependence &&RHS)
+ : Dependence(RHS), Levels(RHS.Levels),
+ LoopIndependent(RHS.LoopIndependent), Consistent(RHS.Consistent),
+ DV(std::move(RHS.DV)) {}
/// isLoopIndependent - Returns true if this is a loop-independent
/// dependence.
/// isLoopIndependent - Returns true if this is a loop-independent
/// dependence.
@@
-266,11
+270,12
@@
namespace llvm {
/// if no subscript in the source or destination mention the induction
/// variable associated with the loop at this level.
bool isScalar(unsigned Level) const override;
/// if no subscript in the source or destination mention the induction
/// variable associated with the loop at this level.
bool isScalar(unsigned Level) const override;
+
private:
unsigned short Levels;
bool LoopIndependent;
bool Consistent; // Init to true, then refine.
private:
unsigned short Levels;
bool LoopIndependent;
bool Consistent; // Init to true, then refine.
-
DVEntry *
DV;
+
std::unique_ptr<DVEntry[]>
DV;
friend class DependenceAnalysis;
};
friend class DependenceAnalysis;
};
@@
-278,8
+283,8
@@
namespace llvm {
/// DependenceAnalysis - This class is the main dependence-analysis driver.
///
class DependenceAnalysis : public FunctionPass {
/// DependenceAnalysis - This class is the main dependence-analysis driver.
///
class DependenceAnalysis : public FunctionPass {
- void operator=(const DependenceAnalysis &)
LLVM_DELETED_FUNCTION
;
- DependenceAnalysis(const DependenceAnalysis &)
LLVM_DELETED_FUNCTION
;
+ void operator=(const DependenceAnalysis &)
= delete
;
+ DependenceAnalysis(const DependenceAnalysis &)
= delete
;
public:
/// depends - Tests for a dependence between the Src and Dst instructions.
/// Returns NULL if no dependence; otherwise, returns a Dependence (or a
public:
/// depends - Tests for a dependence between the Src and Dst instructions.
/// Returns NULL if no dependence; otherwise, returns a Dependence (or a
@@
-523,6
+528,12
@@
namespace llvm {
/// in LoopNest.
bool isLoopInvariant(const SCEV *Expression, const Loop *LoopNest) const;
/// in LoopNest.
bool isLoopInvariant(const SCEV *Expression, const Loop *LoopNest) const;
+ /// Makes sure all subscript pairs share the same integer type by
+ /// sign-extending as necessary.
+ /// Sign-extending a subscript is safe because getelementptr assumes the
+ /// array subscripts are signed.
+ void unifySubscriptType(ArrayRef<Subscript *> Pairs);
+
/// removeMatchingExtensions - Examines a subscript pair.
/// If the source and destination are identically sign (or zero)
/// extended, it strips off the extension in an effort to
/// removeMatchingExtensions - Examines a subscript pair.
/// If the source and destination are identically sign (or zero)
/// extended, it strips off the extension in an effort to
@@
-911,7
+922,7
@@
namespace llvm {
bool tryDelinearize(const SCEV *SrcSCEV, const SCEV *DstSCEV,
SmallVectorImpl<Subscript> &Pair,
bool tryDelinearize(const SCEV *SrcSCEV, const SCEV *DstSCEV,
SmallVectorImpl<Subscript> &Pair,
- const SCEV *ElementSize)
const
;
+ const SCEV *ElementSize);
public:
static char ID; // Class identification, replacement for typeinfo
public:
static char ID; // Class identification, replacement for typeinfo