[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