| OLD | NEW |
| 1 //===- PNaClAllowedIntrinsics.h - Set of allowed intrinsics -----*- C++ -*-===// | 1 //===- PNaClAllowedIntrinsics.h - Set of allowed intrinsics -----*- C++ -*-===// |
| 2 // | 2 // |
| 3 // The LLVM Compiler Infrastructure | 3 // The LLVM Compiler Infrastructure |
| 4 // | 4 // |
| 5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
| 6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
| 7 // | 7 // |
| 8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
| 9 // | 9 // |
| 10 // Declares class that holds set of allowed PNaCl intrinsics. | 10 // Declares class that holds set of allowed PNaCl intrinsics. |
| 11 // | 11 // |
| 12 //===----------------------------------------------------------------------===// | 12 //===----------------------------------------------------------------------===// |
| 13 | 13 |
| 14 #ifndef LLVM_ANALYSIS_NACL_PNACLALLOWEDINTRINSICS_H | 14 #ifndef LLVM_ANALYSIS_NACL_PNACLALLOWEDINTRINSICS_H |
| 15 #define LLVM_ANALYSIS_NACL_PNACLALLOWEDINTRINSICS_H | 15 #define LLVM_ANALYSIS_NACL_PNACLALLOWEDINTRINSICS_H |
| 16 | 16 |
| 17 #include "llvm/ADT/StringMap.h" | 17 #include "llvm/ADT/StringMap.h" |
| 18 #include "llvm/IR/Intrinsics.h" | 18 #include "llvm/IR/Intrinsics.h" |
| 19 | 19 |
| 20 namespace llvm { | 20 namespace llvm { |
| 21 | 21 |
| 22 class LLVMContext; | 22 class LLVMContext; |
| 23 class Function; | 23 class Function; |
| 24 class FunctionType; | 24 class FunctionType; |
| 25 | 25 |
| 26 // Holds the set of allowed instrinsics. | 26 // Holds the set of allowed instrinsics. |
| 27 class PNaClAllowedIntrinsics { | 27 class PNaClAllowedIntrinsics { |
| 28 PNaClAllowedIntrinsics(const PNaClAllowedIntrinsics&) LLVM_DELETED_FUNCTION; | 28 PNaClAllowedIntrinsics(const PNaClAllowedIntrinsics&) = delete; |
| 29 void operator=(const PNaClAllowedIntrinsics&) LLVM_DELETED_FUNCTION; | 29 void operator=(const PNaClAllowedIntrinsics&) = delete; |
| 30 public: | 30 public: |
| 31 PNaClAllowedIntrinsics(LLVMContext *Context); | 31 PNaClAllowedIntrinsics(LLVMContext *Context); |
| 32 | 32 |
| 33 // Checks if there is an allowable PNaCl intrinsic function with the | 33 // Checks if there is an allowable PNaCl intrinsic function with the |
| 34 // given name and type signature. | 34 // given name and type signature. |
| 35 bool isAllowed(const std::string &FcnName, const FunctionType *FcnType) { | 35 bool isAllowed(const std::string &FcnName, const FunctionType *FcnType) { |
| 36 return isIntrinsicName(FcnName) && FcnType == getIntrinsicType(FcnName); | 36 return isIntrinsicName(FcnName) && FcnType == getIntrinsicType(FcnName); |
| 37 } | 37 } |
| 38 // Checks if Func is an allowed PNaCl intrinsic function. Note: | 38 // Checks if Func is an allowed PNaCl intrinsic function. Note: |
| 39 // This function also allows debugging intrinsics if | 39 // This function also allows debugging intrinsics if |
| 40 // PNaClABIAllowDebugMetadata is true. | 40 // PNaClABIAllowDebugMetadata is true. |
| 41 bool isAllowed(const Function *Func); | 41 bool isAllowed(const Function *Func); |
| 42 | 42 |
| 43 // Returns the type signature for the Name'd intrinsic, if entered | 43 // Returns the type signature for the Name'd intrinsic, if entered |
| 44 // via a call to AddIntrinsic. Returns 0 otherwise (implying we | 44 // via a call to AddIntrinsic. Returns 0 otherwise (implying we |
| 45 // don't know the expected type signature). | 45 // don't know the expected type signature). |
| 46 FunctionType *getIntrinsicType(const std::string &Name) { | 46 FunctionType *getIntrinsicType(const std::string &Name) { |
| 47 return isIntrinsicName(Name) ? TypeMap[Name] : 0; | 47 return isIntrinsicName(Name) ? TypeMap[Name] : 0; |
| 48 } | 48 } |
| 49 | 49 |
| 50 static bool isAllowedDebugInfoIntrinsic(unsigned IntrinsicID); |
| 51 |
| 50 private: | 52 private: |
| 51 LLVMContext *Context; | 53 LLVMContext *Context; |
| 52 // Maps from an allowed intrinsic's name to its type. | 54 // Maps from an allowed intrinsic's name to its type. |
| 53 StringMap<FunctionType *> TypeMap; | 55 StringMap<FunctionType *> TypeMap; |
| 54 | 56 |
| 55 // Tys is an array of type parameters for the intrinsic. This | 57 // Tys is an array of type parameters for the intrinsic. This |
| 56 // defaults to an empty array. | 58 // defaults to an empty array. |
| 57 void addIntrinsic(Intrinsic::ID ID, | 59 void addIntrinsic(Intrinsic::ID ID, |
| 58 ArrayRef<Type *> Tys = ArrayRef<Type*>()); | 60 ArrayRef<Type *> Tys = ArrayRef<Type*>()); |
| 59 | 61 |
| 60 // Returns true if a valid PNaCl intrinsic name. | 62 // Returns true if a valid PNaCl intrinsic name. |
| 61 bool isIntrinsicName(const std::string &Name) { | 63 bool isIntrinsicName(const std::string &Name) { |
| 62 return TypeMap.count(Name) == 1; | 64 return TypeMap.count(Name) == 1; |
| 63 } | 65 } |
| 64 | 66 |
| 65 // Returns true if intrinsic ID is allowed as a PNaCl intrinsic. | 67 // Returns true if intrinsic ID is allowed as a PNaCl intrinsic. |
| 66 bool isAllowedIntrinsicID(unsigned ID); | 68 bool isAllowedIntrinsicID(unsigned ID); |
| 67 }; | 69 }; |
| 68 | 70 |
| 69 } | 71 } |
| 70 | 72 |
| 71 #endif // LLVM_ANALYSIS_NACL_PNACLALLOWEDINTRINSICS_H | 73 #endif // LLVM_ANALYSIS_NACL_PNACLALLOWEDINTRINSICS_H |
| OLD | NEW |