Mark math lib intrinsics readonly, on the grounds
authorDale Johannesen <dalej@apple.com>
Fri, 5 Sep 2008 21:49:30 +0000 (21:49 +0000)
committerDale Johannesen <dalej@apple.com>
Fri, 5 Sep 2008 21:49:30 +0000 (21:49 +0000)
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

include/llvm/Intrinsics.td

index dc428460ffdeae6ed7cabdceb863433f0e4880be..5dd1d6116df06bcd3becdf0b9ce94434cfd8e330 100644 (file)
@@ -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>]>;