diff mbox

rs6000: Handle "d" output in the bd*z patterns (PR70098)

Message ID 20160313185213.GA10657@gate.crashing.org
State New
Headers show

Commit Message

Segher Boessenkool March 13, 2016, 6:52 p.m. UTC
On Sat, Mar 12, 2016 at 09:59:12AM -0500, David Edelsohn wrote:
> > 2016-03-12  Segher Boessenkool  <segher@kernel.crashing.org>
> >
> >         PR target/70098
> >         * config/rs6000/rs6000.md (*ctr<mode>_internal1, *ctr<mode>_internal2,
> >         *ctr<mode>_internal5, *ctr<mode>_internal6): Also allow "d" as output.
> >         (define_split for the GPR case): Use int_reg_operand instead of
> >         gpc_reg_operand for the output.
> >
> > gcc/testsuite/
> >         PR target/70098
> >         * g++.dg/pr70098.C: New testcase.
> 
> This is okay.
> 
> The testcase will need some XFAILs.

That wasn't so easy.  I came up with the following; okay as well?
(I'll fold it before committing).


Segher


gcc/testsuite/
	* lib/target-supports.exp (check_effective_target_powerpc64_no_dm):
	New function.

Comments

David Edelsohn March 13, 2016, 9:54 p.m. UTC | #1
On Sun, Mar 13, 2016 at 2:52 PM, Segher Boessenkool
<segher@kernel.crashing.org> wrote:
> On Sat, Mar 12, 2016 at 09:59:12AM -0500, David Edelsohn wrote:
>> > 2016-03-12  Segher Boessenkool  <segher@kernel.crashing.org>
>> >
>> >         PR target/70098
>> >         * config/rs6000/rs6000.md (*ctr<mode>_internal1, *ctr<mode>_internal2,
>> >         *ctr<mode>_internal5, *ctr<mode>_internal6): Also allow "d" as output.
>> >         (define_split for the GPR case): Use int_reg_operand instead of
>> >         gpc_reg_operand for the output.
>> >
>> > gcc/testsuite/
>> >         PR target/70098
>> >         * g++.dg/pr70098.C: New testcase.
>>
>> This is okay.
>>
>> The testcase will need some XFAILs.
>
> That wasn't so easy.  I came up with the following; okay as well?
> (I'll fold it before committing).
>
>
> Segher
>
>
> gcc/testsuite/
>         * lib/target-supports.exp (check_effective_target_powerpc64_no_dm):
>         New function.

This is okay with me.

Should the testcase go in g++.dg or gcc.target/powerpc?

Thanks, David
Segher Boessenkool March 13, 2016, 10:16 p.m. UTC | #2
On Sun, Mar 13, 2016 at 05:54:58PM -0400, David Edelsohn wrote:
> Should the testcase go in g++.dg or gcc.target/powerpc?

I think it is a good thing to test everywhere, not just on Power.
Once we get it to work properly there will be no target-specific
anything left in the testcase, either.


Segher
diff mbox

Patch

diff --git a/gcc/testsuite/g++.dg/pr70098.C b/gcc/testsuite/g++.dg/pr70098.C
index c7b4f63..f5eb48f 100644
--- a/gcc/testsuite/g++.dg/pr70098.C
+++ b/gcc/testsuite/g++.dg/pr70098.C
@@ -2,6 +2,8 @@ 
 // { dg-do compile }
 // { dg-options -O2 }
 // { dg-require-effective-target c++11 }
+// { dg-xfail-if "PR70098" { lp64 && powerpc64_no_dm } }
+// { dg-prune-output ".*internal compiler error.*" }
 
 template < typename > struct traits;
 template < typename, int _Rows, int _Cols, int = 0, int = _Rows,
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 5af139b..49b82c3 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -1629,6 +1629,19 @@  proc check_effective_target_avx_runtime { } {
     return 0
 }
 
+# Return 1 if we are compiling for 64-bit PowerPC but we do not use direct
+# move instructions for moves from GPR to FPR.
+
+proc check_effective_target_powerpc64_no_dm { } {
+    # The "mulld" checks if we are generating PowerPC64 code.  The "lfd"
+    # checks if we do not use direct moves, but use the old-fashioned
+    # slower move-via-the-stack.
+    return [check_no_messages_and_pattern powerpc64_no_dm \
+	{\mmulld\M.*\mlfd} assembly {
+	    double f(long long x) { return x*x; }
+	} {-O2}]
+}
+
 # Return 1 if the target supports executing power8 vector instructions, 0
 # otherwise.  Cache the result.