aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDale Johannesen <dalej@apple.com>2008-09-05 21:49:30 +0000
committerDale Johannesen <dalej@apple.com>2008-09-05 21:49:30 +0000
commit54d9f98a565d7ff2bb103b9ffc2278de844e47d0 (patch)
tree6c68ef5c215417da12a0724619858589869f0c62
parentc94fe21a56f9e4e5ebbe99252a25636c36392509 (diff)
Mark math lib intrinsics readonly, on the grounds
that they read the rounding mode. This is conservatively correct, which they weren't before. We can do more optimization on these if we actually model the rounding mode. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55860 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Intrinsics.td5
1 files changed, 4 insertions, 1 deletions
diff --git a/include/llvm/Intrinsics.td b/include/llvm/Intrinsics.td
index dc428460ff..5dd1d6116d 100644
--- a/include/llvm/Intrinsics.td
+++ b/include/llvm/Intrinsics.td
@@ -193,7 +193,10 @@ let Properties = [IntrWriteArgMem] in {
llvm_i64_ty, llvm_i32_ty]>;
}
-let Properties = [IntrNoMem] in {
+// These functions do not actually read memory, but they are sensitive to the
+// rounding mode. This needs to be modelled separately; in the meantime
+// declaring them as reading memory is conservatively correct.
+let Properties = [IntrReadMem] in {
def int_sqrt : Intrinsic<[llvm_anyfloat_ty, LLVMMatchType<0>]>;
def int_powi : Intrinsic<[llvm_anyfloat_ty, LLVMMatchType<0>, llvm_i32_ty]>;
def int_sin : Intrinsic<[llvm_anyfloat_ty, LLVMMatchType<0>]>;