diff mbox series

rs6000: Don't ICE when compiling the __builtin_vec_xst_trunc built-in [PR109178]

Message ID d09518ad-277a-b1b7-dda4-1b9782ac022c@linux.ibm.com
State New
Headers show
Series rs6000: Don't ICE when compiling the __builtin_vec_xst_trunc built-in [PR109178] | expand

Commit Message

Peter Bergner March 17, 2023, 10:35 p.m. UTC
When we expand the __builtin_vec_xst_trunc built-in, we use the wrong mode
for the MEM operand which causes an unrecognizable insn ICE.  The solution
is to use the correct TMODE mode.

Is this ok for trunk and gcc12 assuming my bootstraps and regtests show
no regressions?

Peter


gcc/
	PR target/109178
	* config/rs6000/rs6000-builtin.cc (stv_expand_builtin): Use tmode.

gcc/testsuite/
	PR target/109178
	* gcc.target/powerpc/pr109178.c: New test.

Comments

Peter Bergner March 18, 2023, 12:17 a.m. UTC | #1
On 3/17/23 5:35 PM, Peter Bergner wrote:
> When we expand the __builtin_vec_xst_trunc built-in, we use the wrong mode
> for the MEM operand which causes an unrecognizable insn ICE.  The solution
> is to use the correct TMODE mode.
> 
> Is this ok for trunk and gcc12 assuming my bootstraps and regtests show
> no regressions?

The trunk bootstrap and regtests were clean.  I'm still waiting on the
backport testing to finish.

Peter
Peter Bergner March 18, 2023, 2:30 a.m. UTC | #2
On 3/17/23 7:17 PM, Peter Bergner wrote:
> On 3/17/23 5:35 PM, Peter Bergner wrote:
>> When we expand the __builtin_vec_xst_trunc built-in, we use the wrong mode
>> for the MEM operand which causes an unrecognizable insn ICE.  The solution
>> is to use the correct TMODE mode.
>>
>> Is this ok for trunk and gcc12 assuming my bootstraps and regtests show
>> no regressions?
> 
> The trunk bootstrap and regtests were clean.  I'm still waiting on the
> backport testing to finish.
...and the gcc12 backported bootstrap and regtest were clean too.

Peter
Kewen.Lin March 20, 2023, 3:20 a.m. UTC | #3
Hi Peter,

on 2023/3/18 10:30, Peter Bergner wrote:
> On 3/17/23 7:17 PM, Peter Bergner wrote:
>> On 3/17/23 5:35 PM, Peter Bergner wrote:
>>> When we expand the __builtin_vec_xst_trunc built-in, we use the wrong mode
>>> for the MEM operand which causes an unrecognizable insn ICE.  The solution
>>> is to use the correct TMODE mode.
>>>
>>> Is this ok for trunk and gcc12 assuming my bootstraps and regtests show
>>> no regressions?
>>
>> The trunk bootstrap and regtests were clean.  I'm still waiting on the
>> backport testing to finish.
> ...and the gcc12 backported bootstrap and regtest were clean too.
> 

Nice, OK for trunk and gcc12 branch, thanks!

BR,
Kewen
Peter Bergner March 21, 2023, 2:24 a.m. UTC | #4
On 3/19/23 10:20 PM, Kewen.Lin via Gcc-patches wrote:
> Nice, OK for trunk and gcc12 branch, thanks!

Pushed to trunk and the GCC 12 release branch.  Thanks.

Peter
diff mbox series

Patch

diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc
index 737a5c42bfb..83c28cd8af3 100644
--- a/gcc/config/rs6000/rs6000-builtin.cc
+++ b/gcc/config/rs6000/rs6000-builtin.cc
@@ -2933,7 +2933,7 @@  stv_expand_builtin (insn_code icode, rtx *op,
 
       rtx addr;
       if (op[1] == const0_rtx)
-	addr = gen_rtx_MEM (Pmode, op[2]);
+	addr = gen_rtx_MEM (tmode, op[2]);
       else
 	{
 	  op[1] = copy_to_mode_reg (Pmode, op[1]);
diff --git a/gcc/testsuite/gcc.target/powerpc/pr109178.c b/gcc/testsuite/gcc.target/powerpc/pr109178.c
new file mode 100644
index 00000000000..0f6e2d6b2eb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr109178.c
@@ -0,0 +1,13 @@ 
+/* PR target/109178 */
+/* { dg-require-effective-target int128 } */
+/* { dg-options "-O2 -mdejagnu-cpu=power10" } */
+
+/* Verify we do not ICE on the following.  */
+
+typedef __attribute__ ((altivec (vector__))) signed __int128 v1ti_t;
+
+void
+foo (signed int *dst, v1ti_t src)
+{
+  __builtin_vec_xst_trunc(src, 0, dst);
+}