[llvm] r203037 - Change math intrinsic attributes from readonly to readnone. These
Raul Silvera
rsilvera at google.com
Wed Mar 5 16:50:01 PST 2014
Yes, I'm investigating. Thanks
On Wed, Mar 5, 2014 at 4:44 PM, Eric Christopher <echristo at gmail.com> wrote:
> 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
>
--
Raúl E. Silvera
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140305/4552d6a6/attachment.html>
More information about the llvm-commits
mailing list