LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
IntrinsicLowering.h
Go to the documentation of this file.
1 //===-- IntrinsicLowering.h - Intrinsic Function Lowering -------*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines the IntrinsicLowering interface. This interface allows
11 // addition of domain-specific or front-end specific intrinsics to LLVM without
12 // having to modify all of the C backend or interpreter.
13 //
14 //===----------------------------------------------------------------------===//
15 
16 #ifndef LLVM_CODEGEN_INTRINSICLOWERING_H
17 #define LLVM_CODEGEN_INTRINSICLOWERING_H
18 
19 #include "llvm/IR/Intrinsics.h"
20 
21 namespace llvm {
22  class CallInst;
23  class Module;
24  class DataLayout;
25 
27  const DataLayout& TD;
28 
29 
30  bool Warned;
31  public:
32  explicit IntrinsicLowering(const DataLayout &td) :
33  TD(td), Warned(false) {}
34 
35  /// AddPrototypes - This method, if called, causes all of the prototypes
36  /// that might be needed by an intrinsic lowering implementation to be
37  /// inserted into the module specified.
38  void AddPrototypes(Module &M);
39 
40  /// LowerIntrinsicCall - This method replaces a call with the LLVM function
41  /// which should be used to implement the specified intrinsic function call.
42  /// If an intrinsic function must be implemented by the code generator
43  /// (such as va_start), this function should print a message and abort.
44  ///
45  /// Otherwise, if an intrinsic function call can be lowered, the code to
46  /// implement it (often a call to a non-intrinsic function) is inserted
47  /// _after_ the call instruction and the call is deleted. The caller must
48  /// be capable of handling this kind of change.
49  ///
50  void LowerIntrinsicCall(CallInst *CI);
51 
52  /// LowerToByteSwap - Replace a call instruction into a call to bswap
53  /// intrinsic. Return false if it has determined the call is not a
54  /// simple integer bswap.
55  static bool LowerToByteSwap(CallInst *CI);
56  };
57 }
58 
59 #endif
The main container class for the LLVM Intermediate Representation.
Definition: Module.h:112
IntrinsicLowering(const DataLayout &td)
#define false
Definition: ConvertUTF.c:64
static bool LowerToByteSwap(CallInst *CI)
void LowerIntrinsicCall(CallInst *CI)