- /// ContaintsRelocations - Return true if the constant value contains
- /// relocations which cannot be resolved at compile time.
- bool ContainsRelocations() const;
-
- // Specialize get/setOperand for Constant's as their operands are always
- // constants as well.
- Constant *getOperand(unsigned i) {
- return static_cast<Constant*>(User::getOperand(i));
- }
- const Constant *getOperand(unsigned i) const {
- return static_cast<const Constant*>(User::getOperand(i));
- }
- void setOperand(unsigned i, Constant *C) {
- User::setOperand(i, C);
- }
+ /// isConstantUsed - Return true if the constant has users other than constant
+ /// exprs and other dangling things.
+ bool isConstantUsed() const;
+
+ enum PossibleRelocationsTy {
+ NoRelocation = 0,
+ LocalRelocation = 1,
+ GlobalRelocations = 2
+ };
+
+ /// getRelocationInfo - This method classifies the entry according to
+ /// whether or not it may generate a relocation entry. This must be
+ /// conservative, so if it might codegen to a relocatable entry, it should say
+ /// so. The return values are:
+ ///
+ /// NoRelocation: This constant pool entry is guaranteed to never have a
+ /// relocation applied to it (because it holds a simple constant like
+ /// '4').
+ /// LocalRelocation: This entry has relocations, but the entries are
+ /// guaranteed to be resolvable by the static linker, so the dynamic
+ /// linker will never see them.
+ /// GlobalRelocations: This entry may have arbitrary relocations.
+ ///
+ /// FIXME: This really should not be in VMCore.
+ PossibleRelocationsTy getRelocationInfo() const;
+
+ /// getVectorElements - This method, which is only valid on constant of vector
+ /// type, returns the elements of the vector in the specified smallvector.
+ /// This handles breaking down a vector undef into undef elements, etc. For
+ /// constant exprs and other cases we can't handle, we return an empty vector.
+ void getVectorElements(SmallVectorImpl<Constant*> &Elts) const;