On Fri, Sep 21, 2012 at 4:57 PM, Eric Botcazou <ebotca...@adacore.com> wrote: >> Prepare_cmp_insn in optabs.c expands BLKmode compares using either >> cmp{mem,str,strn}_optab, or through emit_library_call_value to integer >> result register, and follows with the expansion of the compare of the >> result with zero. However, the code blindly assumes that the target is >> able to compare resulting SImode value, which is not true in case of >> alpha. Due to missing SImode compare pattern, the above assert is >> triggered in emit_cmp_and_jump_1. >> >> The patch fixes this oversight by simply expanding the comparison of >> the result through generic comparison expansion code that conveniently >> follows BLKmode compare expansion. >> >> 2012-09-18 Uros Bizjak <ubiz...@gmail.com> >> >> * optabs.c (prepare_cmp_insn): Expand comparison of the result >> of memory block compare through generic comparison expansion code. > > I don't think that the first hunk is necessary since result_mode is taken from > the comparison pattern itself; the second hunk alone seems to be sufficient.
Although the testcase doesn't trip on this part, the result_mode is taken from the operand mode of cmp{mem,str,strn}_optab. As in the second case, there is no guarantee that compare that compares the result of cmp{mem,str,stn}_optab can handle output mode of this optab. >> Patch was bootstrapped and regression tested on alphaev68-pc-linux-gnu >> and x86_64-pc-linux-gnu {,-m32}. >> >> OK for mainline and release branches? > > Is that a regression on release branches? If no, that's not worth the risk. The testcase does not fail on release branches, but simply due to the fact that BLKmode compares are not adequately tested. Otherwise, BLKmode compares would always fail on alpha. Uros.