diff mbox

[1/2,v3] PR77822

Message ID 20161125082946.GB6343@linux.vnet.ibm.com
State New
Headers show

Commit Message

Dominik Vogt Nov. 25, 2016, 8:29 a.m. UTC
On Thu, Nov 24, 2016 at 08:33:32AM -0700, Jeff Law wrote:
> On 11/24/2016 02:59 AM, Dominik Vogt wrote:
> >On Wed, Nov 23, 2016 at 01:22:31PM -0700, Jeff Law wrote:
> >>>	PR target/77822
> >>>	* system.h (SIZE_POS_IN_RANGE): New.
> >>OK.  Though system.h seems like an unfortunate place.  Would rtl.h
> >>work better since this is really about verifying the arguments to
> >>things like {zero,sign}_extract which are RTL concepts.
> >
> >I was unsure whether it's better to give the macro a name not
> >related to *_extract and put it into system.h or make it specific
> >to extracts and put it in rtl.h.
> Yea.  What tends to tip the balance for me is that it's likely not
> reusable outside extraction argument testing.
> 
> >
> >It's probably not really reuseable elsewhere, so when moving it to
> >rtl.h I'll also rename it to EXTRACT_ARGS_IN_RANGE.  Okay?
> Yea, that sounds perfect.

Version 4 of the patch attached.  Bootstrapped and regression
tested on s390x biarch and s390.  Changes since the last version:

v4:
	Rename SIZE_POS_IN_RANGE to EXTRACT_ARGS_IN_RANGE and move
	it to rtl.h.

Ciao

Dominik ^_^  ^_^

Comments

Jeff Law Nov. 28, 2016, 10:29 p.m. UTC | #1
On 11/25/2016 01:29 AM, Dominik Vogt wrote:
> On Thu, Nov 24, 2016 at 08:33:32AM -0700, Jeff Law wrote:
>> On 11/24/2016 02:59 AM, Dominik Vogt wrote:
>>> On Wed, Nov 23, 2016 at 01:22:31PM -0700, Jeff Law wrote:
>>>>> 	PR target/77822
>>>>> 	* system.h (SIZE_POS_IN_RANGE): New.
>>>> OK.  Though system.h seems like an unfortunate place.  Would rtl.h
>>>> work better since this is really about verifying the arguments to
>>>> things like {zero,sign}_extract which are RTL concepts.
>>>
>>> I was unsure whether it's better to give the macro a name not
>>> related to *_extract and put it into system.h or make it specific
>>> to extracts and put it in rtl.h.
>> Yea.  What tends to tip the balance for me is that it's likely not
>> reusable outside extraction argument testing.
>>
>>>
>>> It's probably not really reuseable elsewhere, so when moving it to
>>> rtl.h I'll also rename it to EXTRACT_ARGS_IN_RANGE.  Okay?
>> Yea, that sounds perfect.
>
> Version 4 of the patch attached.  Bootstrapped and regression
> tested on s390x biarch and s390.  Changes since the last version:
>
> v4:
> 	Rename SIZE_POS_IN_RANGE to EXTRACT_ARGS_IN_RANGE and move
> 	it to rtl.h.
OK for the trunk -- just in case you were waiting on an explicit ack of V4.

jeff
Andreas Krebbel Dec. 2, 2016, 8:39 a.m. UTC | #2
On Fri, Nov 25, 2016 at 09:29:46AM +0100, Dominik Vogt wrote:
> gcc/ChangeLog
> 
> 	PR target/77822
> 	* rtl.h (EXTRACT_ARGS_IN_RANGE): New.

Applied.  Thanks!

-Andreas-
diff mbox

Patch

diff --git a/gcc/rtl.h b/gcc/rtl.h
index 660d381..1847bce 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -2694,6 +2694,16 @@  get_full_set_src_cost (rtx x, machine_mode mode, struct full_rtx_costs *c)
 }
 #endif
 
+/* A convenience macro to validate the arguments of a zero_extract
+   expression.  It determines whether SIZE lies inclusively within
+   [1, RANGE], POS lies inclusively within between [0, RANGE - 1]
+   and the sum lies inclusively within [1, RANGE].  RANGE must be
+   >= 1, but SIZE and POS may be negative.  */
+#define EXTRACT_ARGS_IN_RANGE(SIZE, POS, RANGE) \
+  (IN_RANGE ((POS), 0, (unsigned HOST_WIDE_INT) (RANGE) - 1) \
+   && IN_RANGE ((SIZE), 1, (unsigned HOST_WIDE_INT) (RANGE) \
+			   - (unsigned HOST_WIDE_INT)(POS)))
+
 /* In explow.c */
 extern HOST_WIDE_INT trunc_int_for_mode	(HOST_WIDE_INT, machine_mode);
 extern rtx plus_constant (machine_mode, rtx, HOST_WIDE_INT, bool = false);