llvm.org GIT mirror llvm / release_27 include / llvm / CodeGen / IntrinsicLowering.h
release_27

Tree @release_27 (Download .tar.gz)

IntrinsicLowering.h @release_27

90a62c8
ea61c35
3f52c15
 
7ed47a1
 
ea61c35
3f52c15
ea61c35
3f52c15
 
b71fd78
3f52c15
 
 
90a62c8
 
3f52c15
f70e0c2
 
3f52c15
 
43c81f1
36abe14
ea61c35
148d206
36abe14
b41b5e0
6279cd8
 
148d206
6279cd8
b41b5e0
3f52c15
43c81f1
 
 
b71fd78
43c81f1
e5da2c0
 
 
 
3f52c15
 
 
 
 
 
b71fd78
3f52c15
 
 
 
//===-- IntrinsicLowering.h - Intrinsic Function Lowering -------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file defines the IntrinsicLowering interface.  This interface allows
// addition of domain-specific or front-end specific intrinsics to LLVM without
// having to modify all of the C backend or interpreter.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CODEGEN_INTRINSICLOWERING_H
#define LLVM_CODEGEN_INTRINSICLOWERING_H

#include "llvm/Intrinsics.h"

namespace llvm {
  class CallInst;
  class Module;
  class TargetData;

  class IntrinsicLowering {
    const TargetData& TD;

    
    bool Warned;
  public:
    explicit IntrinsicLowering(const TargetData &td) :
      TD(td), Warned(false) {}

    /// AddPrototypes - This method, if called, causes all of the prototypes
    /// that might be needed by an intrinsic lowering implementation to be
    /// inserted into the module specified.
    void AddPrototypes(Module &M);

    /// LowerIntrinsicCall - This method replaces a call with the LLVM function
    /// which should be used to implement the specified intrinsic function call.
    /// If an intrinsic function must be implemented by the code generator 
    /// (such as va_start), this function should print a message and abort.
    ///
    /// Otherwise, if an intrinsic function call can be lowered, the code to
    /// implement it (often a call to a non-intrinsic function) is inserted
    /// _after_ the call instruction and the call is deleted.  The caller must
    /// be capable of handling this kind of change.
    ///
    void LowerIntrinsicCall(CallInst *CI);
  };
}

#endif