| Index: lib/Analysis/NaCl/PNaClABIVerifyModule.cpp
|
| diff --git a/lib/Analysis/NaCl/PNaClABIVerifyModule.cpp b/lib/Analysis/NaCl/PNaClABIVerifyModule.cpp
|
| index 7836484c2f868e02590d9507e11c6dd72c69ac33..8f272e35df97e65dc71ad655f7319472959cd9c8 100644
|
| --- a/lib/Analysis/NaCl/PNaClABIVerifyModule.cpp
|
| +++ b/lib/Analysis/NaCl/PNaClABIVerifyModule.cpp
|
| @@ -13,13 +13,14 @@
|
| //
|
| //===----------------------------------------------------------------------===//
|
|
|
| -#include "llvm/Pass.h"
|
| #include "llvm/ADT/Twine.h"
|
| #include "llvm/Analysis/NaCl.h"
|
| #include "llvm/IR/Constants.h"
|
| #include "llvm/IR/DerivedTypes.h"
|
| +#include "llvm/IR/Instructions.h"
|
| #include "llvm/IR/Intrinsics.h"
|
| #include "llvm/IR/Module.h"
|
| +#include "llvm/Pass.h"
|
| #include "llvm/Support/Debug.h"
|
| #include "llvm/Support/raw_ostream.h"
|
|
|
| @@ -184,8 +185,8 @@ static bool isWhitelistedCountBits(const Function *F, unsigned num_params) {
|
| bool PNaClABIVerifyModule::isWhitelistedIntrinsic(const Function *F,
|
| unsigned ID) {
|
| // Keep 3 categories of intrinsics for now.
|
| - // (1) Allowed always
|
| - // (2) Never allowed
|
| + // (1) Allowed.
|
| + // (2) Never allowed.
|
| // (3) "Dev" intrinsics, which may or may not be allowed.
|
| // "Dev" intrinsics are controlled by the PNaClABIAllowDevIntrinsics flag.
|
| // Please keep these sorted or grouped in a sensible way, within
|
| @@ -193,19 +194,23 @@ bool PNaClABIVerifyModule::isWhitelistedIntrinsic(const Function *F,
|
| switch(ID) {
|
| // Disallow by default.
|
| default: return false;
|
| - // (1) Always allowed.
|
| - case Intrinsic::bswap: return isWhitelistedBswap(F);
|
| - case Intrinsic::ctlz:
|
| - case Intrinsic::cttz: return isWhitelistedCountBits(F, 2);
|
| - case Intrinsic::ctpop: return isWhitelistedCountBits(F, 1);
|
| + // (1) Allowed.
|
| case Intrinsic::memcpy:
|
| case Intrinsic::memmove:
|
| case Intrinsic::memset:
|
| - case Intrinsic::nacl_read_tp:
|
| + case Intrinsic::nacl_atomic_8:
|
| + case Intrinsic::nacl_atomic_16:
|
| + case Intrinsic::nacl_atomic_32:
|
| + case Intrinsic::nacl_atomic_64:
|
| case Intrinsic::nacl_setjmp:
|
| case Intrinsic::nacl_longjmp:
|
| + case Intrinsic::nacl_read_tp:
|
| case Intrinsic::trap:
|
| return true;
|
| + case Intrinsic::bswap: return isWhitelistedBswap(F);
|
| + case Intrinsic::ctlz:
|
| + case Intrinsic::cttz: return isWhitelistedCountBits(F, 2);
|
| + case Intrinsic::ctpop: return isWhitelistedCountBits(F, 1);
|
|
|
| // (2) Known to be never allowed.
|
| case Intrinsic::not_intrinsic:
|
|
|