diff mbox

Does anyone use Ada on Alpha?

Message ID 53C699E2.3060502@arm.com
State New
Headers show

Commit Message

Alan Lawrence July 16, 2014, 3:27 p.m. UTC
...as I've not managed to build such a gcc. If so, is there any chance you could 
please test check-ada with the following patch (in gcc/ directory), which rolls 
back r76965:


Many thanks if so!

--Alan

Comments

Alan Lawrence July 24, 2014, 4:53 p.m. UTC | #1
Well, I was lucky enough to gain access to an alpha pca56 for a day (I say
lucky, this may not be repeatable!). However I was not able to build the Ada
frontend, due (AFAICT) to the image being too big for relocations. (Moreover, my 
understanding is that the default memory model for Alpha, is the largest memory 
model.) I used pristine 4.9.1 sources, host compiler

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/alpha-linux-gnu/4.9/lto-wrapper
Target: alpha-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.9.1-1'
--with-bugurl=file:///usr/share/doc/gcc-4.9/README.Bugs
--enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr
--program-suffix=-4.9 --enable-shared --enable-linker-build-id
--libexecdir=/usr/lib --without-included-gettext --enable-threads=posix
--with-gxx-include-dir=/usr/include/c++/4.9 --libdir=/usr/lib --enable-nls
--with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug
--enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libssp
--disable-libmudflap --disable-libitm --disable-libsanitizer
--disable-libquadmath --enable-plugin --with-system-zlib
--disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo
--with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.9-alpha/jre --enable-java-home
--with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.9-alpha
--with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.9-alpha
--with-arch-directory=alpha --with-ecj-jar=/usr/share/java/eclipse-ecj.jar
--enable-objc-gc --enable-multiarch --with-long-double-128
--enable-checking=release --build=alpha-linux-gnu --host=alpha-linux-gnu
--target=alpha-linux-gnu
Thread model: posix
gcc version 4.9.1 (Debian 4.9.1-1)

and gnat-4.3 (as per http://archive.debian.net/lenny/alpha/gnat-4.3/download), 
and performed

$ ../gcc-4.9.1/configure --enable-languages=c,ada --disable-bootstrap
--enable-libada --prefix=/home/alan/install --disable-nls --disable-threads
--disable-tls

(config.log attached) then

$ make all-gcc

which after approx 8 hours, finally died with the error message below. Given 
no-one has responded to my previous message, I'm left wondering if Ada still 
builds on Alpha, and if not, then should we be worrying about code generation 
bugs in it? (even, dare I say it, hypothetical code generation bugs?)

--Alan


-----
g++ -g -O2 -DIN_GCC -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W
-Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wmissing-format-attribute
-pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings
-DHAVE_CONFIG_H -static-libstdc++ -static-libgcc  -o gnat1 ada/adadecode.o
ada/adaint.o ada/argv.o ada/cio.o ada/cstreams.o ada/env.o ada/init.o
ada/initialize.o ada/raise.o ada/seh_init.o ada/targext.o ada/cuintp.o
ada/decl.o ada/misc.o ada/utils.o ada/utils2.o ada/trans.o ada/targtyps.o
ada/a-charac.o ada/a-chlat1.o ada/a-elchha.o ada/a-except.o ada/a-ioexce.o
ada/ada.o ada/spark_xrefs.o ada/ali.o ada/alloc.o ada/aspects.o ada/atree.o
ada/butil.o ada/casing.o ada/checks.o ada/comperr.o ada/csets.o ada/cstand.o
ada/debug.o ada/debug_a.o ada/einfo.o ada/elists.o ada/err_vars.o ada/errout.o
ada/erroutc.o ada/eval_fat.o ada/exp_aggr.o ada/exp_spark.o ada/exp_atag.o
ada/exp_attr.o ada/exp_cg.o ada/exp_ch11.o ada/exp_ch12.o ada/exp_ch13.o
ada/exp_ch2.o ada/exp_ch3.o ada/exp_ch4.o ada/exp_ch5.o ada/exp_ch6.o
ada/exp_ch7.o ada/exp_ch8.o ada/exp_ch9.o ada/exp_code.o ada/exp_dbug.o
ada/exp_disp.o ada/exp_dist.o ada/exp_fixd.o ada/exp_imgv.o ada/exp_intr.o
ada/exp_pakd.o ada/exp_prag.o ada/exp_sel.o ada/exp_smem.o ada/exp_strm.o
ada/exp_tss.o ada/exp_util.o ada/exp_vfpt.o ada/expander.o ada/fmap.o
ada/fname-uf.o ada/fname.o ada/freeze.o ada/frontend.o ada/g-byorma.o
ada/g-hesora.o ada/g-htable.o ada/g-spchge.o ada/g-speche.o ada/g-u3spch.o
ada/get_spark_xrefs.o ada/get_targ.o ada/gnat.o ada/gnatvsn.o ada/hostparm.o
ada/impunit.o ada/inline.o ada/interfac.o ada/itypes.o ada/krunch.o ada/layout.o
ada/lib-load.o ada/lib-util.o ada/lib-writ.o ada/lib-xref.o ada/lib.o ada/live.o
ada/namet-sp.o ada/namet.o ada/nlists.o ada/nmake.o ada/opt.o ada/osint-c.o
ada/osint.o ada/output.o ada/par.o ada/par_sco.o ada/prep.o ada/prepcomp.o
ada/put_spark_xrefs.o ada/put_scos.o ada/repinfo.o ada/restrict.o ada/rident.o
ada/rtsfind.o ada/s-addope.o ada/s-assert.o ada/s-bitops.o ada/s-carun8.o
ada/s-casuti.o ada/s-conca2.o ada/s-conca3.o ada/s-conca4.o ada/s-conca5.o
ada/s-conca6.o ada/s-conca7.o ada/s-conca8.o ada/s-conca9.o ada/s-crc32.o
ada/s-crtl.o ada/s-excdeb.o ada/s-except.o ada/s-exctab.o ada/s-htable.o
ada/s-imenne.o ada/s-imgenu.o ada/s-mastop.o ada/s-memory.o ada/s-os_lib.o
ada/s-parame.o ada/s-purexc.o ada/s-restri.o ada/s-secsta.o ada/s-soflin.o
ada/s-sopco3.o ada/s-sopco4.o ada/s-sopco5.o ada/s-stache.o ada/s-stalib.o
ada/s-stoele.o ada/s-strcom.o ada/s-strhas.o ada/s-string.o ada/s-strops.o
ada/s-traent.o ada/s-unstyp.o ada/s-utf_32.o ada/s-valint.o ada/s-valuns.o
ada/s-valuti.o ada/s-wchcnv.o ada/s-wchcon.o ada/s-wchjis.o ada/scans.o
ada/scil_ll.o ada/scn.o ada/scng.o ada/scos.o ada/sdefault.o ada/sem.o
ada/sem_aggr.o ada/sem_attr.o ada/sem_aux.o ada/sem_case.o ada/sem_cat.o
ada/sem_ch10.o ada/sem_ch11.o ada/sem_ch12.o ada/sem_ch13.o ada/sem_ch2.o
ada/sem_ch3.o ada/sem_ch4.o ada/sem_ch5.o ada/sem_ch6.o ada/sem_ch7.o
ada/sem_ch8.o ada/sem_ch9.o ada/sem_dim.o ada/sem_disp.o ada/sem_dist.o
ada/sem_elab.o ada/sem_elim.o ada/sem_eval.o ada/sem_intr.o ada/sem_mech.o
ada/sem_prag.o ada/sem_res.o ada/sem_scil.o ada/sem_smem.o ada/sem_type.o
ada/sem_util.o ada/sem_vfpt.o ada/sem_warn.o ada/set_targ.o ada/sinfo-cn.o
ada/sinfo.o ada/sinput-d.o ada/sinput-l.o ada/sinput.o ada/snames.o ada/sprint.o
ada/stand.o ada/stringt.o ada/style.o ada/styleg.o ada/stylesw.o ada/switch-c.o
ada/switch.o ada/system.o ada/table.o ada/targparm.o ada/tbuild.o ada/tree_gen.o
ada/tree_in.o ada/tree_io.o ada/treepr.o ada/treeprs.o ada/ttypes.o ada/types.o
ada/uintp.o ada/uname.o ada/urealp.o ada/usage.o ada/validsw.o ada/warnsw.o
ada/widechar.o ada/back_end.o ada/gnat1drv.o ada/b_gnat1.o libbackend.a main.o
libcommon-target.a libcommon.a ../libcpp/libcpp.a ../libdecnumber/libdecnumber.a
attribs.o \
    libcommon-target.a libcommon.a ../libcpp/libcpp.a
../libbacktrace/.libs/libbacktrace.a ../libiberty/libiberty.a
../libdecnumber/libdecnumber.a   -L/home/alan/build/./cloog/.libs  -lcloog-isl
-L/home/alan/build/./isl/.libs  -lisl -L/home/alan/build/./gmp/.libs
-L/home/alan/build/./mpfr/.libs -L/home/alan/build/./mpc/src/.libs -lmpc -lmpfr
-lgmp -rdynamic -ldl  -L../zlib -lz -g -O2
/usr/lib/gcc/alpha-linux-gnu/4.9/libstdc++.a(locale.o): In function
`std::locale::name() const':
(.text._ZNKSt6locale4nameEv+0x41c): relocation truncated to fit: ELF_LITERAL
against `.text.unlikely._ZNSs4_Rep10_M_disposeERKSaIcE.part.3'
/usr/lib/gcc/alpha-linux-gnu/4.9/libstdc++.a(locale.o): In function
`std::locale::operator==(std::locale const&) const':
(.text._ZNKSt6localeeqERKS_+0x28c): relocation truncated to fit: ELF_LITERAL
against `.text.unlikely._ZNSs4_Rep10_M_disposeERKSaIcE.part.3'
/usr/lib/gcc/alpha-linux-gnu/4.9/libstdc++.a(compatibility-ldbl.o): In function
`std::money_get<wchar_t, std::istreambuf_iterator<wchar_t,
std::char_traits<wchar_t> > >::do_get(std::istreambuf_iterator<wchar_t,
std::char_traits<wchar_t> >, std::istreambuf_iterator<wchar_t,
std::char_traits<wchar_t> >, bool, std::ios_base&, std::_Ios_Iostate&, long
double&) const':
(.text._ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRe[_ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRe]+0x19c):
relocation truncated to fit: ELF_LITERAL against
`.text.unlikely._ZNSs4_Rep10_M_disposeERKSaIcE.part.14'
/usr/lib/gcc/alpha-linux-gnu/4.9/libstdc++.a(compatibility-ldbl.o): In function
`std::money_get<char, std::istreambuf_iterator<char, std::char_traits<char> >
  >::do_get(std::istreambuf_iterator<char, std::char_traits<char> >,
std::istreambuf_iterator<char, std::char_traits<char> >, bool, std::ios_base&,
std::_Ios_Iostate&, long double&) const':
(.text._ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRe[_ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRe]+0x19c):
relocation truncated to fit: ELF_LITERAL against
`.text.unlikely._ZNSs4_Rep10_M_disposeERKSaIcE.part.14'
/usr/lib/gcc/alpha-linux-gnu/4.9/libstdc++.a(compatibility-ldbl.o): In function
`std::money_get<wchar_t, std::istreambuf_iterator<wchar_t,
std::char_traits<wchar_t> > >::do_get(std::istreambuf_iterator<wchar_t,
std::char_traits<wchar_t> >, std::istreambuf_iterator<wchar_t,
std::char_traits<wchar_t> >, bool, std::ios_base&, std::_Ios_Iostate&,
std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>
  >&) const':
(.text._ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRSbIwS2_SaIwEE[_ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRSbIwS2_SaIwEE]+0x26c):
relocation truncated to fit: ELF_LITERAL against
`.text.unlikely._ZNSs4_Rep10_M_disposeERKSaIcE.part.14'
/usr/lib/gcc/alpha-linux-gnu/4.9/libstdc++.a(compatibility-ldbl.o): In function
`std::money_get<char, std::istreambuf_iterator<char, std::char_traits<char> >
  >::do_get(std::istreambuf_iterator<char, std::char_traits<char> >,
std::istreambuf_iterator<char, std::char_traits<char> >, bool, std::ios_base&,
std::_Ios_Iostate&, std::string&) const':
(.text._ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRSs[_ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRSs]+0x2dc):
relocation truncated to fit: ELF_LITERAL against
`.text.unlikely._ZNSs4_Rep10_M_disposeERKSaIcE.part.14'
/usr/lib/gcc/alpha-linux-gnu/4.9/libstdc++.a(compatibility-ldbl.o): In function
`std::money_put<char, std::ostreambuf_iterator<char, std::char_traits<char> >
  >::do_put(std::ostreambuf_iterator<char, std::char_traits<char> >, bool,
std::ios_base&, char, long double) const':
(.text._ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_bRSt8ios_basece[_ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_bRSt8ios_basece]+0x3ac):
relocation truncated to fit: ELF_LITERAL against
`.text.unlikely._ZNSs4_Rep10_M_disposeERKSaIcE.part.14'
/usr/lib/gcc/alpha-linux-gnu/4.9/libstdc++.a(compatibility-ldbl.o): In function
`std::num_get<char, std::istreambuf_iterator<char, std::char_traits<char> >
  >::_M_extract_float(std::istreambuf_iterator<char, std::char_traits<char> >,
std::istreambuf_iterator<char, std::char_traits<char> >, std::ios_base&,
std::_Ios_Iostate&, std::string&) const':
(.text._ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE16_M_extract_floatES3_S3_RSt8ios_baseRSt12_Ios_IostateRSs[_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE16_M_extract_floatES3_S3_RSt8ios_baseRSt12_Ios_IostateRSs]+0x1aa0):
relocation truncated to fit: ELF_LITERAL against
`.text.unlikely._ZNSs4_Rep10_M_disposeERKSaIcE.part.14'
/usr/lib/gcc/alpha-linux-gnu/4.9/libstdc++.a(compatibility-ldbl.o): In function
`std::num_get<char, std::istreambuf_iterator<char, std::char_traits<char> >
  >::do_get(std::istreambuf_iterator<char, std::char_traits<char> >,
std::istreambuf_iterator<char, std::char_traits<char> >, std::ios_base&,
std::_Ios_Iostate&, float&) const':
(.text._ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRf[_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRf]+0x2ac):
relocation truncated to fit: ELF_LITERAL against
`.text.unlikely._ZNSs4_Rep10_M_disposeERKSaIcE.part.14'
/usr/lib/gcc/alpha-linux-gnu/4.9/libstdc++.a(compatibility-ldbl.o): In function
`std::num_get<char, std::istreambuf_iterator<char, std::char_traits<char> >
  >::do_get(std::istreambuf_iterator<char, std::char_traits<char> >,
std::istreambuf_iterator<char, std::char_traits<char> >, std::ios_base&,
std::_Ios_Iostate&, double&) const':
(.text._ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd[_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd]+0x2ac):
relocation truncated to fit: ELF_LITERAL against
`.text.unlikely._ZNSs4_Rep10_M_disposeERKSaIcE.part.14'
/usr/lib/gcc/alpha-linux-gnu/4.9/libstdc++.a(compatibility-ldbl.o): In function
`std::num_get<char, std::istreambuf_iterator<char, std::char_traits<char> >
  >::do_get(std::istreambuf_iterator<char, std::char_traits<char> >,
std::istreambuf_iterator<char, std::char_traits<char> >, std::ios_base&,
std::_Ios_Iostate&, long double&) const':
(.text._ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRe[_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRe]+0x2ac):
additional relocation overflows omitted from the output
collect2: error: ld returned 1 exit status
../../gcc-4.9.1/gcc/ada/gcc-interface/Make-lang.in:596: recipe for target
'gnat1' faile

Alan Lawrence wrote:
> ...as I've not managed to build such a gcc. If so, is there any chance you could 
> please test check-ada with the following patch (in gcc/ directory), which rolls 
> back r76965:
> 
> Index: combine.c
> ===================================================================
> --- combine.c   (revision 212523)
> +++ combine.c   (working copy)
> @@ -10218,9 +10218,6 @@
>              if (CONST_INT_P (XEXP (varop, 1))
>                  /* We can't do this if we have (ashiftrt (xor))  and the
>                     constant has its sign bit set in shift_mode.  */
> -             && !(code == ASHIFTRT && GET_CODE (varop) == XOR
> -                  && 0 > trunc_int_for_mode (INTVAL (XEXP (varop, 1)),
> -                                             shift_mode))
>                  && (new_rtx = simplify_const_binary_operation
>                      (code, result_mode,
>                       gen_int_mode (INTVAL (XEXP (varop, 1)), result_mode),
> @@ -10237,10 +10234,7 @@
>                 logical expression, make a new logical expression, and apply
>                 the inverse distributive law.  This also can't be done
>                 for some (ashiftrt (xor)).  */
> -         if (CONST_INT_P (XEXP (varop, 1))
> -            && !(code == ASHIFTRT && GET_CODE (varop) == XOR
> -                 && 0 > trunc_int_for_mode (INTVAL (XEXP (varop, 1)),
> -                                            shift_mode)))
> +         if (CONST_INT_P (XEXP (varop, 1)))
>                {
>                  rtx lhs = simplify_shift_const (NULL_RTX, code, shift_mode,
>                                                  XEXP (varop, 0), count);
> 
> Many thanks if so!
> 
> --Alan
> 
> 
>
Alan Lawrence Aug. 19, 2014, 10:20 a.m. UTC | #2
Unfortunately the Alpha box I used last time is no longer available and so I've 
not been able to try the linker fix. I've not had any responses from anyone 
saying they use Ada on Alpha (let alone on VMS - where the original bug was 
reported - and Ada/VMS support has now been retired). If none of you folk are 
able to build+test the patch (below) for Ada on Alpha: is this really reason for 
us to want to hold this up?

--Alan

Alan Lawrence wrote:
> ...as I've not managed to build such a gcc. If so, is there any chance you could
> please test check-ada with the following patch (in gcc/ directory), which rolls
> back r76965:
>
> Index: combine.c
> ===================================================================
> --- combine.c   (revision 212523)
> +++ combine.c   (working copy)
> @@ -10218,9 +10218,6 @@
>              if (CONST_INT_P (XEXP (varop, 1))
>                  /* We can't do this if we have (ashiftrt (xor))  and the
>                     constant has its sign bit set in shift_mode.  */
> -             && !(code == ASHIFTRT && GET_CODE (varop) == XOR
> -                  && 0 > trunc_int_for_mode (INTVAL (XEXP (varop, 1)),
> -                                             shift_mode))
>                  && (new_rtx = simplify_const_binary_operation
>                      (code, result_mode,
>                       gen_int_mode (INTVAL (XEXP (varop, 1)), result_mode),
> @@ -10237,10 +10234,7 @@
>                 logical expression, make a new logical expression, and apply
>                 the inverse distributive law.  This also can't be done
>                 for some (ashiftrt (xor)).  */
> -         if (CONST_INT_P (XEXP (varop, 1))
> -            && !(code == ASHIFTRT && GET_CODE (varop) == XOR
> -                 && 0 > trunc_int_for_mode (INTVAL (XEXP (varop, 1)),
> -                                            shift_mode)))
> +         if (CONST_INT_P (XEXP (varop, 1)))
>                {
>                  rtx lhs = simplify_shift_const (NULL_RTX, code, shift_mode,
>                                                  XEXP (varop, 0), count);
>
> Many thanks if so!
>
> --Alan
Arnaud Charlet Aug. 19, 2014, 10:24 a.m. UTC | #3
> Unfortunately the Alpha box I used last time is no longer available
> and so I've not been able to try the linker fix. I've not had any
> responses from anyone saying they use Ada on Alpha (let alone on VMS
> - where the original bug was reported - and Ada/VMS support has now
> been retired). If none of you folk are able to build+test the patch
> (below) for Ada on Alpha: is this really reason for us to want to
> hold this up?

FWIW, AdaCore has stopped supporting/building/testing Ada on alpha several
years ago already, so no reason as far as we are concerned to worry about
this combination for GCC trunk, as long as your change doesn't break Ada
on other platforms.

Arno
diff mbox

Patch

Index: combine.c
===================================================================
--- combine.c   (revision 212523)
+++ combine.c   (working copy)
@@ -10218,9 +10218,6 @@ 
             if (CONST_INT_P (XEXP (varop, 1))
                 /* We can't do this if we have (ashiftrt (xor))  and the
                    constant has its sign bit set in shift_mode.  */
-             && !(code == ASHIFTRT && GET_CODE (varop) == XOR
-                  && 0 > trunc_int_for_mode (INTVAL (XEXP (varop, 1)),
-                                             shift_mode))
                 && (new_rtx = simplify_const_binary_operation
                     (code, result_mode,
                      gen_int_mode (INTVAL (XEXP (varop, 1)), result_mode),
@@ -10237,10 +10234,7 @@ 
                logical expression, make a new logical expression, and apply
                the inverse distributive law.  This also can't be done
                for some (ashiftrt (xor)).  */
-         if (CONST_INT_P (XEXP (varop, 1))
-            && !(code == ASHIFTRT && GET_CODE (varop) == XOR
-                 && 0 > trunc_int_for_mode (INTVAL (XEXP (varop, 1)),
-                                            shift_mode)))
+         if (CONST_INT_P (XEXP (varop, 1)))
               {
                 rtx lhs = simplify_shift_const (NULL_RTX, code, shift_mode,
                                                 XEXP (varop, 0), count);