#include "llvm/ADT/APInt.h"
#include "llvm/ADT/ArrayRef.h"
-#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SmallVector.h"
#include <string>
namespace llvm {
-class Value;
+
class ConstraintSystem {
/// Current linear constraints in the system.
/// An entry of the form c0, c1, ... cn represents the following constraint:
/// c0 >= v0 * c1 + .... + v{n-1} * cn
SmallVector<SmallVector<int64_t, 8>, 4> Constraints;
- /// a Map between variabled collected in ConstraintElimination and their
- /// corresponding index in the constraint system solver.
- DenseMap<Value *, unsigned> Value2Index;
-
/// Current greatest common divisor for all coefficients in the system.
uint32_t GCD = 1;
return true;
}
- DenseMap<Value *, unsigned> &getValue2Index() { return Value2Index; }
- const DenseMap<Value *, unsigned> &getValue2Index() const {
- return Value2Index;
- }
-
bool addVariableRowFill(ArrayRef<int64_t> R) {
// If all variable coefficients are 0, the constraint does not provide any
// usable information.
/// based on signed-ness, certain conditions can be transferred between the two
/// systems.
class ConstraintInfo {
+ DenseMap<Value *, unsigned> UnsignedValue2Index;
+ DenseMap<Value *, unsigned> SignedValue2Index;
ConstraintSystem UnsignedCS;
ConstraintSystem SignedCS;
ConstraintInfo(const DataLayout &DL) : DL(DL) {}
DenseMap<Value *, unsigned> &getValue2Index(bool Signed) {
- return Signed ? SignedCS.getValue2Index() : UnsignedCS.getValue2Index();
+ return Signed ? SignedValue2Index : UnsignedValue2Index;
}
const DenseMap<Value *, unsigned> &getValue2Index(bool Signed) const {
- return Signed ? SignedCS.getValue2Index() : UnsignedCS.getValue2Index();
+ return Signed ? SignedValue2Index : UnsignedValue2Index;
}
ConstraintSystem &getCS(bool Signed) {