diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2011-07-17 15:36:56 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2011-07-17 15:36:56 +0000 | 
| commit | 411bd29eea3c360d5b48a18a17b5e87f5671af0e (patch) | |
| tree | c8086addb211fa670a9d2b1038d8c2e453229755 /include/llvm/Transforms/Utils/ValueMapper.h | |
| parent | 56fe8f14099930935e3870e3e823c322a85c1c89 (diff) | |
Notes
Diffstat (limited to 'include/llvm/Transforms/Utils/ValueMapper.h')
| -rw-r--r-- | include/llvm/Transforms/Utils/ValueMapper.h | 34 | 
1 files changed, 32 insertions, 2 deletions
| diff --git a/include/llvm/Transforms/Utils/ValueMapper.h b/include/llvm/Transforms/Utils/ValueMapper.h index d612213a8717..2194373c45b3 100644 --- a/include/llvm/Transforms/Utils/ValueMapper.h +++ b/include/llvm/Transforms/Utils/ValueMapper.h @@ -22,6 +22,18 @@ namespace llvm {    class Instruction;    typedef ValueMap<const Value *, TrackingVH<Value> > ValueToValueMapTy; +  /// ValueMapTypeRemapper - This is a class that can be implemented by clients +  /// to remap types when cloning constants and instructions. +  class ValueMapTypeRemapper { +    virtual void Anchor();  // Out of line method. +  public: +    virtual ~ValueMapTypeRemapper() {} +     +    /// remapType - The client should implement this method if they want to +    /// remap types while mapping values. +    virtual Type *remapType(Type *SrcTy) = 0; +  }; +      /// RemapFlags - These are flags that the value mapping APIs allow.    enum RemapFlags {      RF_None = 0, @@ -42,9 +54,27 @@ namespace llvm {    }    Value *MapValue(const Value *V, ValueToValueMapTy &VM, -                  RemapFlags Flags = RF_None); +                  RemapFlags Flags = RF_None, +                  ValueMapTypeRemapper *TypeMapper = 0); +    void RemapInstruction(Instruction *I, ValueToValueMapTy &VM, -                        RemapFlags Flags = RF_None); +                        RemapFlags Flags = RF_None, +                        ValueMapTypeRemapper *TypeMapper = 0); +   +  /// MapValue - provide versions that preserve type safety for MDNode and +  /// Constants. +  inline MDNode *MapValue(const MDNode *V, ValueToValueMapTy &VM, +                          RemapFlags Flags = RF_None, +                          ValueMapTypeRemapper *TypeMapper = 0) { +    return (MDNode*)MapValue((const Value*)V, VM, Flags, TypeMapper); +  } +  inline Constant *MapValue(const Constant *V, ValueToValueMapTy &VM, +                            RemapFlags Flags = RF_None, +                            ValueMapTypeRemapper *TypeMapper = 0) { +    return (Constant*)MapValue((const Value*)V, VM, Flags, TypeMapper); +  } +   +  } // End llvm namespace  #endif | 
