https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104256
Bug ID: 104256 Summary: ICE in validate_condition_mode, at config/rs6000/rs6000.cc:11354 Product: gcc Version: 12.0 Status: UNCONFIRMED Keywords: ice-on-valid-code Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: asolokha at gmx dot com Target Milestone: --- Target: powerpc-*-linux-gnu gfortran 12.0.1 20220123 snapshot (g:2da90ad39bf8fa9ee287e040d1f4411cb7a2e7ed) ICEs when compiling the following testcase, extracted from gcc/testsuite/gfortran.dg/maxloc_2.f90, w/ -mcpu=power9 -O1 -fnon-call-exceptions: real :: a(2), nan real, allocatable :: c(:) integer :: ia(1) nan = 0.0 nan = 0.0/nan a(:) = nan ia = maxloc (a) if (ia(1).ne.1) STOP 1 allocate (c(1)) c(:) = nan deallocate (c) end % powerpc-e300c3-linux-gnu-gfortran-12.0.1 -mcpu=power9 -O1 -fnon-call-exceptions -c juc3hqi9.f90 during RTL pass: ce2 juc3hqi9.f90:15:3: 15 | end | ^ internal compiler error: in validate_condition_mode, at config/rs6000/rs6000.cc:11354 0x75420d validate_condition_mode(rtx_code, machine_mode) /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.1_p20220123/work/gcc-12-20220123/gcc/config/rs6000/rs6000.cc:11354 0x12b9b9c rs6000_generate_compare /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.1_p20220123/work/gcc-12-20220123/gcc/config/rs6000/rs6000.cc:15153 0x12becb1 rs6000_emit_int_cmove(rtx_def*, rtx_def*, rtx_def*, rtx_def*) /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.1_p20220123/work/gcc-12-20220123/gcc/config/rs6000/rs6000.cc:16320 0x174b33c gen_movsicc(rtx_def*, rtx_def*, rtx_def*, rtx_def*) /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.1_p20220123/work/gcc-12-20220123/gcc/config/rs6000/rs6000.md:5360 0xdfc3a8 maybe_expand_insn(insn_code, unsigned int, expand_operand*) /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.1_p20220123/work/gcc-12-20220123/gcc/optabs.cc:7997 0xdfcb88 emit_conditional_move_1 /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.1_p20220123/work/gcc-12-20220123/gcc/optabs.cc:5034 0xdfcb88 emit_conditional_move_1 /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.1_p20220123/work/gcc-12-20220123/gcc/optabs.cc:4995 0xdfcc64 emit_conditional_move(rtx_def*, rtx_def*, rtx_def*, rtx_def*, rtx_def*, machine_mode) /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.1_p20220123/work/gcc-12-20220123/gcc/optabs.cc:4984 0x1962646 noce_emit_cmove /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.1_p20220123/work/gcc-12-20220123/gcc/ifcvt.cc:1759 0x19633e8 try_emit_cmove_seq /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.1_p20220123/work/gcc-12-20220123/gcc/ifcvt.cc:3185 0x19650f9 noce_convert_multiple_sets_1 /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.1_p20220123/work/gcc-12-20220123/gcc/ifcvt.cc:3527 0x196b2c8 noce_convert_multiple_sets /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.1_p20220123/work/gcc-12-20220123/gcc/ifcvt.cc:3281 0x196d68d noce_process_if_block /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.1_p20220123/work/gcc-12-20220123/gcc/ifcvt.cc:3688 0x196d68d noce_find_if_block /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.1_p20220123/work/gcc-12-20220123/gcc/ifcvt.cc:4442 0x196d68d find_if_header /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.1_p20220123/work/gcc-12-20220123/gcc/ifcvt.cc:4647 0x196d68d if_convert /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.1_p20220123/work/gcc-12-20220123/gcc/ifcvt.cc:5788 0x196eb5d execute /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.1_p20220123/work/gcc-12-20220123/gcc/ifcvt.cc:5941