Re: [PATCH] combine: Tweak change_zero_ext
On 30/11/16 10:02, Bin.Cheng wrote: On Tue, Nov 29, 2016 at 9:14 PM, Christophe Lyonwrote: On 29 November 2016 at 20:38, Uros Bizjak wrote: 2016-11-26 Segher Boessenkool * combine.c (change_zero_ext): Also handle extends from a subreg to a mode bigger than that of the operand of the subreg. This patch introduced: FAIL: gcc.target/i386/pr44578.c (internal compiler error) on i686 (or x86_64 32bit multi-lib). ./cc1 -O2 -mtune=athlon64 -m32 -quiet pr44578.c pr44578.c: In function ‘test’: pr44578.c:18:1: internal compiler error: in gen_rtx_SUBREG, at emit-rtl.c:908 } ^ 0x81493b gen_rtx_SUBREG(machine_mode, rtx_def*, int) /home/uros/gcc-svn/trunk/gcc/emit-rtl.c:908 0x122609f change_zero_ext /home/uros/gcc-svn/trunk/gcc/combine.c:11260 0x1226207 recog_for_combine /home/uros/gcc-svn/trunk/gcc/combine.c:11346 0x1236db3 try_combine /home/uros/gcc-svn/trunk/gcc/combine.c:3501 0x123a3e0 combine_instructions /home/uros/gcc-svn/trunk/gcc/combine.c:1265 0x123a3e0 rest_of_handle_combine /home/uros/gcc-svn/trunk/gcc/combine.c:14581 0x123a3e0 execute /home/uros/gcc-svn/trunk/gcc/combine.c:14626 Uros. Hi, I'm seeing a similar error on aarch64: FAIL: gcc.target/aarch64/advsimd-intrinsics/vduph_lane.c -O1 (internal compiler error) with the same backtrace. Hi, I also saw the same failure for below tests on aarch64. /tmp/.../src/gcc/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vget_lane.c: In function 'exec_vget_lane': /tmp/.../src/gcc/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vget_lane.c:136:1: internal compiler error: in gen_rtx_SUBREG, at emit-rtl.c:908 0x7d9cd1 gen_rtx_SUBREG(machine_mode, rtx_def*, int) /tmp/.../src/gcc/gcc/emit-rtl.c:908 0x7d9d25 gen_lowpart_SUBREG(machine_mode, rtx_def*) /tmp/.../src/gcc/gcc/emit-rtl.c:924 0x1112562 change_zero_ext /tmp/.../src/gcc/gcc/combine.c:11260 0x1112b47 recog_for_combine /tmp/.../src/gcc/gcc/combine.c:11346 This is PR 78590 and Segher fixed it today. Kyrill Thanks, bin Christophe
Re: [PATCH] combine: Tweak change_zero_ext
On Tue, Nov 29, 2016 at 9:14 PM, Christophe Lyonwrote: > On 29 November 2016 at 20:38, Uros Bizjak wrote: >>> 2016-11-26 Segher Boessenkool >>> >>> * combine.c (change_zero_ext): Also handle extends from a subreg >>> to a mode bigger than that of the operand of the subreg. >> >> This patch introduced: >> >> FAIL: gcc.target/i386/pr44578.c (internal compiler error) >> >> on i686 (or x86_64 32bit multi-lib). >> >> ./cc1 -O2 -mtune=athlon64 -m32 -quiet pr44578.c >> pr44578.c: In function ‘test’: >> pr44578.c:18:1: internal compiler error: in gen_rtx_SUBREG, at emit-rtl.c:908 >> } >> ^ >> 0x81493b gen_rtx_SUBREG(machine_mode, rtx_def*, int) >> /home/uros/gcc-svn/trunk/gcc/emit-rtl.c:908 >> 0x122609f change_zero_ext >> /home/uros/gcc-svn/trunk/gcc/combine.c:11260 >> 0x1226207 recog_for_combine >> /home/uros/gcc-svn/trunk/gcc/combine.c:11346 >> 0x1236db3 try_combine >> /home/uros/gcc-svn/trunk/gcc/combine.c:3501 >> 0x123a3e0 combine_instructions >> /home/uros/gcc-svn/trunk/gcc/combine.c:1265 >> 0x123a3e0 rest_of_handle_combine >> /home/uros/gcc-svn/trunk/gcc/combine.c:14581 >> 0x123a3e0 execute >> /home/uros/gcc-svn/trunk/gcc/combine.c:14626 >> >> Uros. > > Hi, > > I'm seeing a similar error on aarch64: > FAIL: gcc.target/aarch64/advsimd-intrinsics/vduph_lane.c -O1 > (internal compiler error) > with the same backtrace. Hi, I also saw the same failure for below tests on aarch64. /tmp/.../src/gcc/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vget_lane.c: In function 'exec_vget_lane': /tmp/.../src/gcc/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vget_lane.c:136:1: internal compiler error: in gen_rtx_SUBREG, at emit-rtl.c:908 0x7d9cd1 gen_rtx_SUBREG(machine_mode, rtx_def*, int) /tmp/.../src/gcc/gcc/emit-rtl.c:908 0x7d9d25 gen_lowpart_SUBREG(machine_mode, rtx_def*) /tmp/.../src/gcc/gcc/emit-rtl.c:924 0x1112562 change_zero_ext /tmp/.../src/gcc/gcc/combine.c:11260 0x1112b47 recog_for_combine /tmp/.../src/gcc/gcc/combine.c:11346 Thanks, bin > > Christophe
Re: [PATCH] combine: Tweak change_zero_ext
On 29 November 2016 at 20:38, Uros Bizjakwrote: >> 2016-11-26 Segher Boessenkool >> >> * combine.c (change_zero_ext): Also handle extends from a subreg >> to a mode bigger than that of the operand of the subreg. > > This patch introduced: > > FAIL: gcc.target/i386/pr44578.c (internal compiler error) > > on i686 (or x86_64 32bit multi-lib). > > ./cc1 -O2 -mtune=athlon64 -m32 -quiet pr44578.c > pr44578.c: In function ‘test’: > pr44578.c:18:1: internal compiler error: in gen_rtx_SUBREG, at emit-rtl.c:908 > } > ^ > 0x81493b gen_rtx_SUBREG(machine_mode, rtx_def*, int) > /home/uros/gcc-svn/trunk/gcc/emit-rtl.c:908 > 0x122609f change_zero_ext > /home/uros/gcc-svn/trunk/gcc/combine.c:11260 > 0x1226207 recog_for_combine > /home/uros/gcc-svn/trunk/gcc/combine.c:11346 > 0x1236db3 try_combine > /home/uros/gcc-svn/trunk/gcc/combine.c:3501 > 0x123a3e0 combine_instructions > /home/uros/gcc-svn/trunk/gcc/combine.c:1265 > 0x123a3e0 rest_of_handle_combine > /home/uros/gcc-svn/trunk/gcc/combine.c:14581 > 0x123a3e0 execute > /home/uros/gcc-svn/trunk/gcc/combine.c:14626 > > Uros. Hi, I'm seeing a similar error on aarch64: FAIL: gcc.target/aarch64/advsimd-intrinsics/vduph_lane.c -O1 (internal compiler error) with the same backtrace. Christophe
Re: [PATCH] combine: Tweak change_zero_ext
> 2016-11-26 Segher Boessenkool> > * combine.c (change_zero_ext): Also handle extends from a subreg > to a mode bigger than that of the operand of the subreg. This patch introduced: FAIL: gcc.target/i386/pr44578.c (internal compiler error) on i686 (or x86_64 32bit multi-lib). ./cc1 -O2 -mtune=athlon64 -m32 -quiet pr44578.c pr44578.c: In function ‘test’: pr44578.c:18:1: internal compiler error: in gen_rtx_SUBREG, at emit-rtl.c:908 } ^ 0x81493b gen_rtx_SUBREG(machine_mode, rtx_def*, int) /home/uros/gcc-svn/trunk/gcc/emit-rtl.c:908 0x122609f change_zero_ext /home/uros/gcc-svn/trunk/gcc/combine.c:11260 0x1226207 recog_for_combine /home/uros/gcc-svn/trunk/gcc/combine.c:11346 0x1236db3 try_combine /home/uros/gcc-svn/trunk/gcc/combine.c:3501 0x123a3e0 combine_instructions /home/uros/gcc-svn/trunk/gcc/combine.c:1265 0x123a3e0 rest_of_handle_combine /home/uros/gcc-svn/trunk/gcc/combine.c:14581 0x123a3e0 execute /home/uros/gcc-svn/trunk/gcc/combine.c:14626 Uros.
[PATCH] combine: Tweak change_zero_ext
change_zero_ext handles (zero_extend:M1 (subreg:M2 (reg:M1) ...)) already; this patch extends it to also deal with any (zero_extend:M1 (subreg:M2 (reg:M3) ...)) where the subreg is not paradoxical. Tested on powerpc64-linux. This is needed for some of the rlwimi testcases to be optimised properly. Segher 2016-11-26 Segher Boessenkool* combine.c (change_zero_ext): Also handle extends from a subreg to a mode bigger than that of the operand of the subreg. --- gcc/combine.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gcc/combine.c b/gcc/combine.c index 4b3496b..2c3bcf1 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -11275,11 +11275,13 @@ change_zero_ext (rtx pat) else if (GET_CODE (x) == ZERO_EXTEND && SCALAR_INT_MODE_P (mode) && GET_CODE (XEXP (x, 0)) == SUBREG - && GET_MODE (SUBREG_REG (XEXP (x, 0))) == mode + && !paradoxical_subreg_p (XEXP (x, 0)) && subreg_lowpart_p (XEXP (x, 0))) { size = GET_MODE_PRECISION (GET_MODE (XEXP (x, 0))); x = SUBREG_REG (XEXP (x, 0)); + if (GET_MODE (x) != mode) + x = gen_lowpart_SUBREG (mode, x); } else if (GET_CODE (x) == ZERO_EXTEND && SCALAR_INT_MODE_P (mode) -- 1.9.3