rs6000: Don't ICE when compiling the __builtin_vec_xst_trunc built-in [PR109178]
Commit Message
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
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
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
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
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
@@ -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]);
new file mode 100644
@@ -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);
+}