aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis/NaCl
diff options
context:
space:
mode:
authorJan Voung <jvoung@chromium.org>2013-06-28 14:54:54 -0700
committerJan Voung <jvoung@chromium.org>2013-06-28 14:54:54 -0700
commitf2518db25a8d0cacebb82d2f8872b00014a03bc8 (patch)
tree776d74f210d2db1b8535d168d804390c0befd6db /lib/Analysis/NaCl
parent331ef6ecbef4e3f3afa8ae627ad5b3528a534e04 (diff)
Move stacksave/restore to allowed list, pow to disallowed.
The stacksave/restore intrinsics are covered by "run_vla_test", tests in GCC torture testsuite, and basic llvm lit tests (mostly related to debug info...). The pow intrinsic is no longer needed after Eli's change to Clang, and pow is done purely in libm (even with -fno-math-errno). BUG=http://code.google.com/p/nativeclient/issues/detail?id=3378 R=eliben@chromium.org, jfb@chromium.org, mseaborn@chromium.org Review URL: https://codereview.chromium.org/18180002
Diffstat (limited to 'lib/Analysis/NaCl')
-rw-r--r--lib/Analysis/NaCl/PNaClABIVerifyModule.cpp23
1 files changed, 12 insertions, 11 deletions
diff --git a/lib/Analysis/NaCl/PNaClABIVerifyModule.cpp b/lib/Analysis/NaCl/PNaClABIVerifyModule.cpp
index 7836484c2f..7922d84a51 100644
--- a/lib/Analysis/NaCl/PNaClABIVerifyModule.cpp
+++ b/lib/Analysis/NaCl/PNaClABIVerifyModule.cpp
@@ -204,6 +204,9 @@ bool PNaClABIVerifyModule::isWhitelistedIntrinsic(const Function *F,
case Intrinsic::nacl_read_tp:
case Intrinsic::nacl_setjmp:
case Intrinsic::nacl_longjmp:
+ // Stack save and restore are used to support C99 VLAs.
+ case Intrinsic::stackrestore:
+ case Intrinsic::stacksave:
case Intrinsic::trap:
return true;
@@ -253,13 +256,14 @@ bool PNaClABIVerifyModule::isWhitelistedIntrinsic(const Function *F,
case Intrinsic::invariant_end:
case Intrinsic::invariant_start:
// Some transcendental functions not needed yet.
- case Intrinsic::cos: // Rounding not defined: support with fast-math?
- case Intrinsic::exp: // Rounding not defined: support with fast-math?
- case Intrinsic::exp2: // Rounding not defined: support with fast-math?
- case Intrinsic::log: // Rounding not defined: support with fast-math?
- case Intrinsic::log2: // Rounding not defined: support with fast-math?
- case Intrinsic::log10: // Rounding not defined: support with fast-math?
- case Intrinsic::sin: // Rounding not defined: support with fast-math?
+ case Intrinsic::cos:
+ case Intrinsic::exp:
+ case Intrinsic::exp2:
+ case Intrinsic::log:
+ case Intrinsic::log2:
+ case Intrinsic::log10:
+ case Intrinsic::pow:
+ case Intrinsic::sin:
// We run -lower-expect to convert Intrinsic::expect into branch weights
// and consume in the middle-end. The backend just ignores llvm.expect.
case Intrinsic::expect:
@@ -274,12 +278,9 @@ bool PNaClABIVerifyModule::isWhitelistedIntrinsic(const Function *F,
case Intrinsic::dbg_value:
return PNaClABIAllowDevIntrinsics || PNaClABIAllowDebugMetadata;
case Intrinsic::nacl_target_arch: // Used by translator self-build.
- case Intrinsic::pow: // Rounding is supposed to be the same as libm.
case Intrinsic::powi: // Rounding not defined: support with fast-math?
- case Intrinsic::prefetch: // Could ignore if target doesn't support?
+ case Intrinsic::prefetch: // TODO(jfb): Use our own data-prefetch intrinsic instead.
case Intrinsic::sqrt: // Rounding is defined, but setting errno up to libm.
- case Intrinsic::stackrestore: // Used to support C99 VLAs.
- case Intrinsic::stacksave: // Used to support C99 VLAs.
return PNaClABIAllowDevIntrinsics;
}
}