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

Tree @release_34 (Download .tar.gz)

IntrinsicLowering.h @release_34

90a62c8
ea61c35
3f52c15
 
7ed47a1
 
ea61c35
3f52c15
ea61c35
3f52c15
 
b71fd78
3f52c15
 
 
90a62c8
 
3f52c15
0b8c9a8
f70e0c2
3f52c15
 
43c81f1
3574eca
ea61c35
148d206
3574eca
b41b5e0
6279cd8
 
148d206
3574eca
b41b5e0
3f52c15
43c81f1
 
 
b71fd78
43c81f1
e5da2c0
 
 
 
3f52c15
 
 
 
 
 
b71fd78
55d4200
 
 
 
 
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/IR/Intrinsics.h"

namespace llvm {
  class CallInst;
  class Module;
  class DataLayout;

  class IntrinsicLowering {
    const DataLayout& TD;

    
    bool Warned;
  public:
    explicit IntrinsicLowering(const DataLayout &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);

    /// LowerToByteSwap - Replace a call instruction into a call to bswap
    /// intrinsic. Return false if it has determined the call is not a
    /// simple integer bswap.
    static bool LowerToByteSwap(CallInst *CI);
  };
}

#endif