Hi Mike,
This patch has been committed to trunk. Can I backport it to
GCC 16 branch as well?
On 23/06/26 10:57 am, Michael Meissner wrote:
> On Thu, Jun 11, 2026 at 02:33:57PM +0530, jeevitha wrote:
>> Hi All,
>>
>> The following changes have been bootstrapped and regression tested on
>> powerpc64le-linux. Is this okay for trunk?
>
> This is ok, with a nit that you can fix before checkin. However, there
> might be an issue in the tests down the road.
>
>> @@ -421,6 +421,9 @@
>> (and (eq_attr "isa" "p10")
>> (match_test "TARGET_POWER10"))
>> (const_int 1)
>> + (and (eq_attr "isa" "future")
>> + (match_test "TARGET_FUTURE"))
>> + (const_int 1)
>> ] (const_int 0)))
>>
>
> All of the other tests for setting "enabled" in rs6000.md have a blank
> line before the (and (eq_attr ..). This makes it a little easier to
> read. I.e. after the patch it should be:
>
> (and (eq_attr "isa" "p9tf")
> (match_test "FLOAT128_VECTOR_P (TFmode)"))
> (const_int 1)
>
> (and (eq_attr "isa" "p10")
> (match_test "TARGET_POWER10"))
> (const_int 1)
>
> (and (eq_attr "isa" "future")
> (match_test "TARGET_FUTURE"))
> (const_int 1)
>
> One note, that isn't an issue at the moment, given you ordered the
> xvadduwm, etc. code in the alternatives before the vadduwm pattern.
> But if we ever re-order the alternatives to prefer the altivec
> instruction first, these tests will fail.
>
> The way I've dealt with this in the past is to use __asm__ to tell the
> register allocator that it should move the value to a traditional
> floating point register. I.e. code like:
>
> /* { dg-do compile } */
> /* { dg-options "-mdejagnu-cpu=future -O2" } */
> /* { dg-require-effective-target powerpc_future_compile_ok } */
>
> #include <altivec.h>
>
> typedef vector signed int v4si_t;
> typedef vector signed short v8hi_t;
> typedef vector signed long long v2di_t;
>
> v4si_t int_add (v4si_t x, v4si_t y)
> {
> /* force x & y into FPRs to prefer xvadduwm over vadduwm. */
> __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
>
> return vec_add (x, y); /* xvadduwm */
> }
>
> Another minor note for +, -, and multiply, you might want to also
> verify that the vector arithmetic overloading generates the appropriate
> instructions, probably as a separate test. It should generate the
> correct code, but it doesn't hurt to have another test, just in case. Note,
> mulh can't be done:
>
>
> /* { dg-do compile } */
> /* { dg-options "-mdejagnu-cpu=future -O2" } */
> /* { dg-require-effective-target powerpc_future_compile_ok } */
>
> #include <altivec.h>
>
> typedef vector signed int v4si_t;
> typedef vector signed short v8hi_t;
> typedef vector signed long long v2di_t;
>
> v4si_t int_add (v4si_t x, v4si_t y)
> {
> /* force x & y into FPRs to prefer xvadduwm over vadduwm. */
> __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
>
> return x + y; /* xvadduwm */
> }
>
> Finally in the tests with the options -mcpu=future -mno-vsx, please put
> a comment in the test to say that the -mno-vsx option turns off
> generation of the VSX instructions (like xvadduwm) in favor of the
> traditional Altivec instructions (like vadduwm).
>
> I don't see that these changes to the tests requires another patch
> review cycle.
>