This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Fix aarch64 bootstrap (pr69416)
- From: "Richard Earnshaw (lists)" <Richard dot Earnshaw at arm dot com>
- To: Richard Henderson <rth at redhat dot com>, gcc-patches at gcc dot gnu dot org
- Cc: Marcus Shawcroft <marcus dot shawcroft at arm dot com>, Segher Boessenkool <segher at kernel dot crashing dot org>
- Date: Fri, 22 Jan 2016 17:11:05 +0000
- Subject: Re: [PATCH] Fix aarch64 bootstrap (pr69416)
- Authentication-results: sourceware.org; auth=none
- References: <56A261E3 dot 5020901 at redhat dot com>
On 22/01/16 17:07, Richard Henderson wrote:
> The bare CONST_INT inside the CCmode IF_THEN_ELSE is causing combine to
> make incorrect simplifications. At this stage it feels safer to wrap
> the CONST_INT inside of an UNSPEC than make more generic changes to
> combine.
>
> But we should definitely investigate combine's CCmode issues for gcc7.
>
Agreed.
>
> Ok?
>
OK.
R.
>
> r~
>
> d-69416
>
>
> * config/aarch64/aarch64.md (UNSPEC_NZCV): New.
> (ccmp<mode>, fccmp<mode>, fccmpe<mode>): Use it.
>
> diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
> index 2f543aa..71fc514 100644
> --- a/gcc/config/aarch64/aarch64.md
> +++ b/gcc/config/aarch64/aarch64.md
> @@ -129,6 +129,7 @@
> UNSPEC_RSQRT
> UNSPEC_RSQRTE
> UNSPEC_RSQRTS
> + UNSPEC_NZCV
> ])
>
> (define_c_enum "unspecv" [
> @@ -280,7 +281,7 @@
> (compare:CC
> (match_operand:GPI 2 "register_operand" "r,r,r")
> (match_operand:GPI 3 "aarch64_ccmp_operand" "r,Uss,Usn"))
> - (match_operand 5 "immediate_operand")))]
> + (unspec:CC [(match_operand 5 "immediate_operand")] UNSPEC_NZCV)))]
> ""
> "@
> ccmp\\t%<w>2, %<w>3, %k5, %m4
> @@ -298,7 +299,7 @@
> (compare:CCFP
> (match_operand:GPF 2 "register_operand" "w")
> (match_operand:GPF 3 "register_operand" "w"))
> - (match_operand 5 "immediate_operand")))]
> + (unspec:CCFP [(match_operand 5 "immediate_operand")] UNSPEC_NZCV)))]
> "TARGET_FLOAT"
> "fccmp\\t%<s>2, %<s>3, %k5, %m4"
> [(set_attr "type" "fcmp<s>")]
> @@ -313,7 +314,7 @@
> (compare:CCFPE
> (match_operand:GPF 2 "register_operand" "w")
> (match_operand:GPF 3 "register_operand" "w"))
> - (match_operand 5 "immediate_operand")))]
> + (unspec:CCFPE [(match_operand 5 "immediate_operand")] UNSPEC_NZCV)))]
> "TARGET_FLOAT"
> "fccmpe\\t%<s>2, %<s>3, %k5, %m4"
> [(set_attr "type" "fcmp<s>")]
>