Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Unified Diff: include/llvm/Analysis/NaCl/PNaClABIProps.h

Issue 939073008: Rebased PNaCl localmods in LLVM to 223109 (Closed)
Patch Set: undo localmod Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « include/llvm/Analysis/NaCl.h ('k') | include/llvm/Analysis/NaCl/PNaClABITypeChecker.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: include/llvm/Analysis/NaCl/PNaClABIProps.h
diff --git a/include/llvm/Analysis/NaCl/PNaClABIProps.h b/include/llvm/Analysis/NaCl/PNaClABIProps.h
new file mode 100644
index 0000000000000000000000000000000000000000..7f53445c0cf59d5febe4c54a51819a254886b462
--- /dev/null
+++ b/include/llvm/Analysis/NaCl/PNaClABIProps.h
@@ -0,0 +1,80 @@
+//===- PNaClABIProps.h - Verify PNaCl ABI Properties ----------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Verify PNaCl ABI properties.
+//
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_ANALYSIS_NACL_PNACLABIPROPS_H
+#define LLVM_ANALYSIS_NACL_PNACLABIPROPS_H
+
+#include "llvm/ADT/APInt.h"
+#include "llvm/IR/CallingConv.h"
+#include "llvm/IR/GlobalValue.h"
+#include "llvm/IR/Type.h"
+
+namespace llvm {
+
+class NamedMDNode;
+class DataLayout;
+
+// Checks properties needed to verify IR constructs. Unlike
+// PNaClABIVerifyFunctions and PNaClABIVerifyModule, this class is
+// pass-free, and checks individual elements within IR.
+class PNaClABIProps {
+ PNaClABIProps(const PNaClABIProps&) LLVM_DELETED_FUNCTION;
+ void operator=(const PNaClABIProps&) LLVM_DELETED_FUNCTION;
+public:
+ // Returns true if metadata kind MDKind is allowed.
+ static bool isWhitelistedMetadata(unsigned MDKind);
+ // Returns true if metadata is allowed.
+ static bool isWhitelistedMetadata(const NamedMDNode *MD);
+ // Returns true if integer constant Idx is in [0..NumElements).
+ static bool isVectorIndexSafe(const APInt &Idx,
+ unsigned NumElements) {
+ return Idx.ult(NumElements);
+ }
+ // Returns true if Alignment is allowed for type Ty, assuming DL.
+ static bool isAllowedAlignment(const DataLayout *DL, uint64_t Alignment,
+ const Type *Ty);
+
+ // Returns true if alloca type Ty is correct.
+ static bool isAllocaAllocatedType(const Type *Ty) {
+ return Ty->isIntegerTy(8);
+ }
+ // Returns true if the type associated with the size field in an alloca
+ // instruction is valid.
+ static bool isAllocaSizeType(const Type *Ty) {
+ return Ty->isIntegerTy(32);
+ }
+ // Returns string describing expected type for the size field in an
+ // alloca instruction.
+ static const char *ExpectedAllocaSizeType() {
+ return "alloca array size is not i32";
+ }
+ // Returns the name for the given calling convention.
+ static const char *CallingConvName(CallingConv::ID CallingConv);
+ // Returns true if CallingConv is valid.
+ static bool isValidCallingConv(CallingConv::ID CallingConv) {
+ return CallingConv == CallingConv::C;
+ }
+ // Returns the name for linkage type LT.
+ static const char *LinkageName(GlobalValue::LinkageTypes LT);
+ // Returns true if Linkage is valid.
+ static bool isValidGlobalLinkage(GlobalValue::LinkageTypes Linkage);
+ // Returns kind of global value name, based on IsFunction.
+ static const char *GVTypeName(bool IsFunction) {
+ return IsFunction ? "Function" : "Variable";
+ }
+};
+
+}
+
+#endif // LLVM_ANALYSIS_NACL_PNACLABIPROPS_H
« no previous file with comments | « include/llvm/Analysis/NaCl.h ('k') | include/llvm/Analysis/NaCl/PNaClABITypeChecker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698