From 63987ca445d31c4489f09881e3ff007294896ea2 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 21 Dec 2017 10:11:58 +0100 Subject: [PATCH] re PR rtl-optimization/82973 (ICE in output_constant_pool_2, at varasm.c:3896 on aarch64) PR rtl-optimization/82973 * emit-rtl.h (valid_for_const_vec_duplicate_p): Rename to ... (valid_for_const_vector_p): ... this. * emit-rtl.c (valid_for_const_vec_duplicate_p): Rename to ... (valid_for_const_vector_p): ... this. Adjust function comment. (gen_vec_duplicate): Adjust caller. * optabs.c (expand_vector_broadcast): Likewise. * simplify-rtx.c (simplify_const_unary_operation): Don't optimize into CONST_VECTOR if some element isn't simplified valid_for_const_vector_p constant. (simplify_const_binary_operation): Likewise. Use CONST_FIXED_P macro instead of GET_CODE == CONST_FIXED. (simplify_subreg): Use CONST_FIXED_P macro instead of GET_CODE == CONST_FIXED. * gfortran.dg/pr82973.f90: New test. From-SVN: r255939 --- gcc/testsuite/gfortran.dg/pr82973.f90 | 31 +++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/pr82973.f90 diff --git a/gcc/testsuite/gfortran.dg/pr82973.f90 b/gcc/testsuite/gfortran.dg/pr82973.f90 new file mode 100644 index 00000000000..add58ce0dd1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr82973.f90 @@ -0,0 +1,31 @@ +! PR rtl-optimization/82973 +! { dg-do compile } +! { dg-options "-Ofast -frounding-math" } + +program pr82973 + integer, parameter :: n=16 + real, dimension(n) :: ar, br, modulo_result, floor_result + integer, dimension(n) :: ai, bi , imodulo_result, ifloor_result + ai(1:4) = 5 + ai(5:8) = -5 + ai(9:12) = 1 + ai(13:16) = -1 + bi(1:4) = (/ 3,-3, 1, -1/) + bi(5:8) = bi(1:4) + bi(9:12) = bi(1:4) + bi(13:16) = bi(1:4) + ar = ai + br = bi + modulo_result = modulo(ar,br) + imodulo_result = modulo(ai,bi) + floor_result = ar-floor(ar/br)*br + ifloor_result = nint(real(ai-floor(real(ai)/real(bi))*bi)) + do i=1,n + if (modulo_result(i) /= floor_result(i)) then + call abort() + end if + if (imodulo_result(i) /= ifloor_result(i)) then + call abort () + end if + end do +end program pr82973 -- 2.30.2