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 1041e3f0a4a90264bfda43dc2799911dc3452ff0..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,11
+528,11
@@
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
both subscripts (i.e. Pair->Src and Pair->Dst) share the same
- ///
integer type by sign-extending one of them when
necessary.
+ /// 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
/// Sign-extending a subscript is safe because getelementptr assumes the
- /// array subscripts are signed.
- void unifySubscriptType(
Subscript *Pair
);
+ /// array subscripts are signed.
+ void unifySubscriptType(
ArrayRef<Subscript *> Pairs
);
/// removeMatchingExtensions - Examines a subscript pair.
/// If the source and destination are identically sign (or zero)
/// removeMatchingExtensions - Examines a subscript pair.
/// If the source and destination are identically sign (or zero)