[llvm] r203037 - Change math intrinsic attributes from readonly to readnone. These
Eric Christopher
echristo at gmail.com
Wed Mar 5 16:44:52 PST 2014
Hi Raul,
This ended up breaking a clang codegen test: test/CodeGen/libcalls.c.
Can you take a look?
-eric
On Wed, Mar 5, 2014 at 4:18 PM, Raul E. Silvera <rsilvera at google.com> wrote:
> Author: rsilvera
> Date: Wed Mar 5 18:18:15 2014
> New Revision: 203037
>
> URL: http://llvm.org/viewvc/llvm-project?rev=203037&view=rev
> Log:
> Change math intrinsic attributes from readonly to readnone. These
> are operations that do not access memory but may be sensitive
> to floating-point environment changes. LLVM does not attempt
> to model FP environment changes, so this was unnecessarily conservative
> and was getting on the way of some optimizations, in particular
> SLP vectorization.
>
> Modified:
> llvm/trunk/include/llvm/IR/Intrinsics.td
> llvm/trunk/test/Feature/intrinsics.ll
> llvm/trunk/test/Transforms/BBVectorize/simple-int.ll
> llvm/trunk/test/Transforms/InstCombine/pow-1.ll
>
> Modified: llvm/trunk/include/llvm/IR/Intrinsics.td
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Intrinsics.td?rev=203037&r1=203036&r2=203037&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/IR/Intrinsics.td (original)
> +++ llvm/trunk/include/llvm/IR/Intrinsics.td Wed Mar 5 18:18:15 2014
> @@ -285,10 +285,17 @@ def int_memset : Intrinsic<[],
> llvm_i32_ty, llvm_i1_ty],
> [IntrReadWriteArgMem, NoCapture<0>]>;
>
> -// 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 {
> +let Properties = [IntrNoMem] in {
> + def int_fma : Intrinsic<[llvm_anyfloat_ty],
> + [LLVMMatchType<0>, LLVMMatchType<0>,
> + LLVMMatchType<0>]>;
> + def int_fmuladd : Intrinsic<[llvm_anyfloat_ty],
> + [LLVMMatchType<0>, LLVMMatchType<0>,
> + LLVMMatchType<0>]>;
> +
> + // These functions do not read memory, but are sensitive to the
> + // rounding mode. LLVM purposely does not model changes to the FP
> + // environment so they can be treated as readnone.
> 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>]>;
> @@ -311,16 +318,6 @@ let Properties = [IntrReadMem] in {
> def int_round : Intrinsic<[llvm_anyfloat_ty], [LLVMMatchType<0>]>;
> }
>
> -let Properties = [IntrNoMem] in {
> - def int_fma : Intrinsic<[llvm_anyfloat_ty],
> - [LLVMMatchType<0>, LLVMMatchType<0>,
> - LLVMMatchType<0>]>;
> -
> - def int_fmuladd : Intrinsic<[llvm_anyfloat_ty],
> - [LLVMMatchType<0>, LLVMMatchType<0>,
> - LLVMMatchType<0>]>;
> -}
> -
> // NOTE: these are internal interfaces.
> def int_setjmp : Intrinsic<[llvm_i32_ty], [llvm_ptr_ty]>;
> def int_longjmp : Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty], [IntrNoReturn]>;
>
> Modified: llvm/trunk/test/Feature/intrinsics.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Feature/intrinsics.ll?rev=203037&r1=203036&r2=203037&view=diff
> ==============================================================================
> --- llvm/trunk/test/Feature/intrinsics.ll (original)
> +++ llvm/trunk/test/Feature/intrinsics.ll Wed Mar 5 18:18:15 2014
> @@ -61,7 +61,7 @@ define void @libm() {
> ; FIXME: test ALL the intrinsics in this file.
>
> ; rdar://11542750
> -; CHECK: declare void @llvm.trap() #2
> +; CHECK: declare void @llvm.trap() #1
> declare void @llvm.trap()
>
> define void @trap() {
> @@ -70,5 +70,4 @@ define void @trap() {
> }
>
> ; CHECK: attributes #0 = { nounwind readnone }
> -; CHECK: attributes #1 = { nounwind readonly }
> -; CHECK: attributes #2 = { noreturn nounwind }
> +; CHECK: attributes #1 = { noreturn nounwind }
>
> Modified: llvm/trunk/test/Transforms/BBVectorize/simple-int.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/BBVectorize/simple-int.ll?rev=203037&r1=203036&r2=203037&view=diff
> ==============================================================================
> --- llvm/trunk/test/Transforms/BBVectorize/simple-int.ll (original)
> +++ llvm/trunk/test/Transforms/BBVectorize/simple-int.ll Wed Mar 5 18:18:15 2014
> @@ -126,8 +126,7 @@ define double @test4(double %A1, double
>
> ; CHECK: declare <2 x double> @llvm.fma.v2f64(<2 x double>, <2 x double>, <2 x double>) #0
> ; CHECK: declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #0
> -; CHECK: declare <2 x double> @llvm.cos.v2f64(<2 x double>) #1
> -; CHECK: declare <2 x double> @llvm.powi.v2f64(<2 x double>, i32) #1
> +; CHECK: declare <2 x double> @llvm.cos.v2f64(<2 x double>) #0
> +; CHECK: declare <2 x double> @llvm.powi.v2f64(<2 x double>, i32) #0
>
> ; CHECK: attributes #0 = { nounwind readnone }
> -; CHECK: attributes #1 = { nounwind readonly }
>
> Modified: llvm/trunk/test/Transforms/InstCombine/pow-1.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/pow-1.ll?rev=203037&r1=203036&r2=203037&view=diff
> ==============================================================================
> --- llvm/trunk/test/Transforms/InstCombine/pow-1.ll (original)
> +++ llvm/trunk/test/Transforms/InstCombine/pow-1.ll Wed Mar 5 18:18:15 2014
> @@ -160,8 +160,8 @@ declare double @llvm.pow.f64(double %Val
> define double @test_simplify17(double %x) {
> ; CHECK-LABEL: @test_simplify17(
> %retval = call double @llvm.pow.f64(double %x, double 0.5)
> -; CHECK-NEXT: [[SQRT:%[a-z0-9]+]] = call double @sqrt(double %x) [[NUW_RO]]
> -; CHECK-NEXT: [[FABS:%[a-z0-9]+]] = call double @fabs(double [[SQRT]]) [[NUW_RO]]
> +; CHECK-NEXT: [[SQRT:%[a-z0-9]+]] = call double @sqrt(double %x)
> +; CHECK-NEXT: [[FABS:%[a-z0-9]+]] = call double @fabs(double [[SQRT]])
> ; CHECK-NEXT: [[FCMP:%[a-z0-9]+]] = fcmp oeq double %x, 0xFFF0000000000000
> ; CHECK-NEXT: [[SELECT:%[a-z0-9]+]] = select i1 [[FCMP]], double 0x7FF0000000000000, double [[FABS]]
> ret double %retval
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list