aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/Constants.h
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2009-06-15 22:12:54 +0000
committerDan Gohman <gohman@apple.com>2009-06-15 22:12:54 +0000
commit6de29f8d960505421d61c80cdb738e16720b6c0e (patch)
treee4e4bc5a3d8d9bca1c5f1cb6221d92707a655f21 /include/llvm/Constants.h
parent0d492bdf4d07db79e240c3c21c5321416f1463d1 (diff)
downloadexternal_llvm-6de29f8d960505421d61c80cdb738e16720b6c0e.zip
external_llvm-6de29f8d960505421d61c80cdb738e16720b6c0e.tar.gz
external_llvm-6de29f8d960505421d61c80cdb738e16720b6c0e.tar.bz2
Support vector casts in more places, fixing a variety of assertion
failures. To support this, add some utility functions to Type to help support vector/scalar-independent code. Change ConstantInt::get and ConstantFP::get to support vector types, and add an overload to ConstantInt::get that uses a static IntegerType type, for convenience. Introduce a new getConstant method for ScalarEvolution, to simplify common use cases. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73431 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Constants.h')
-rw-r--r--include/llvm/Constants.h15
1 files changed, 12 insertions, 3 deletions
diff --git a/include/llvm/Constants.h b/include/llvm/Constants.h
index ed0fe27..75164ff 100644
--- a/include/llvm/Constants.h
+++ b/include/llvm/Constants.h
@@ -107,14 +107,19 @@ public:
/// either getSExtValue() or getZExtValue() will yield a correctly sized and
/// signed value for the type Ty.
/// @brief Get a ConstantInt for a specific value.
- static ConstantInt *get(const Type *Ty, uint64_t V, bool isSigned = false);
+ static ConstantInt *get(const IntegerType *Ty,
+ uint64_t V, bool isSigned = false);
+ static Constant *get(const Type *Ty, uint64_t V, bool isSigned = false);
/// Return a ConstantInt with the specified value for the specified type. The
/// value V will be canonicalized to a an unsigned APInt. Accessing it with
/// either getSExtValue() or getZExtValue() will yield a correctly sized and
/// signed value for the type Ty.
/// @brief Get a ConstantInt for a specific signed value.
- static ConstantInt *getSigned(const Type *Ty, int64_t V) {
+ static ConstantInt *getSigned(const IntegerType *Ty, int64_t V) {
+ return get(Ty, V, true);
+ }
+ static Constant *getSigned(const Type *Ty, int64_t V) {
return get(Ty, V, true);
}
@@ -122,6 +127,10 @@ public:
/// type is the integer type that corresponds to the bit width of the value.
static ConstantInt *get(const APInt &V);
+ /// If Ty is a vector type, return a Constant with a splat of the given
+ /// value. Otherwise return a ConstantInt for the given value.
+ static Constant *get(const Type *Ty, const APInt &V);
+
/// getType - Specialize the getType() method to always return an IntegerType,
/// which reduces the amount of casting needed in parts of the compiler.
///
@@ -251,7 +260,7 @@ public:
/// get() - This returns a constant fp for the specified value in the
/// specified type. This should only be used for simple constant values like
/// 2.0/1.0 etc, that are known-valid both as double and as the target format.
- static ConstantFP *get(const Type *Ty, double V);
+ static Constant *get(const Type *Ty, double V);
/// isValueValidForType - return true if Ty is big enough to represent V.
static bool isValueValidForType(const Type *Ty, const APFloat& V);