From: Richard Sandiford <richard.sandiford@arm.com>
To: Mike Stump <mikestump@comcast.net>
Cc: Bernd Schmidt <bschmidt@redhat.com>,
Ulrich Weigand <uweigand@de.ibm.com>,
gcc-patches@gcc.gnu.org
Subject: Re: [ping] Fix PR debug/66728
Date: Mon, 02 Nov 2015 20:55:00 -0000 [thread overview]
Message-ID: <871tc8unnx.fsf@e105548-lin.cambridge.arm.com> (raw)
In-Reply-To: <D9850ADD-F2B9-4B3E-8DD9-DF8FEB2E9C36@comcast.net> (Mike Stump's message of "Mon, 2 Nov 2015 12:33:48 -0800")
Mike Stump <mikestump@comcast.net> writes:
> On Nov 2, 2015, at 8:29 AM, Richard Sandiford <richard.sandiford@arm.com> wrote:
>> switch (GET_CODE (rtl))
>> {
>> case CONST_INT:
>> - {
>> - HOST_WIDE_INT val = INTVAL (rtl);
>> + if (mode != BLKmode)
>
> This changes BLKmode for CONST_INT, but I didn’t see this discussed. I
> didn’t see a test case? I’d like to think that BLKmode things here
> would be fine. I think they would be use for 1024 bit things that are
> representable in 20 bits, for example.
This was:
... Sometimes structure decls
have BLKmode but are assigned an integer-mode rtl (e.g. when passing
3-byte structures by value to functions).
[...]
loc_descriptor refuses to use CONST_INT for BLKmode decls (which aren't
actually integers at the source level). That seems like the right
behaviour, so this patch does that for add_const_value_attribute too.
It asserts that the mode is otherwise sensible for both CONST_INT
and CONST_WIDE_INT. Asserting for CONST_INT isn't strictly necessary
but means that the assumption will get much more coverage than asserting
only for CONST_WIDE_INT does.
Integer types always have an integer mode, not BLKmode. E.g.
layout_type has:
case BOOLEAN_TYPE:
case INTEGER_TYPE:
case ENUMERAL_TYPE:
SET_TYPE_MODE (type,
smallest_mode_for_size (TYPE_PRECISION (type), MODE_INT));
where the smallest_mode_for_size is guaranteed to return something
that isn't BLKmode (or VOIDmode).
The BLKmodes are for non-integer things that nevertheless get passed
as integers. I don't think debuggers would be expecting an integer
DIE to be used for them. (loc_descriptor already punts in that case.)
> A value that is 1 (representable
> in 20 bits) can be trivially communicated the debugger. The existing
> add_AT_unsigned I think can represent them, no? Similarly for wide-int
> BLKmode support. I think the real problem is simply the precision 0
> part. In the CONST_INT and CONST_DOUBLE there is no code that handled
> precision 0, and there is no code in the wide-int case either. From
> wide-int.h:
>
> The precision and length of a wide_int are always greater than 0.
>
> If is was 0, then we have failed. When that bug is fixed, then the
> precision won’t be 0 and the existing code will work. Where is the 0
> first generated, and from what?
It's generated from:
case CONST_WIDE_INT:
add_AT_wide (die, DW_AT_const_value,
std::make_pair (rtl, GET_MODE (rtl)));
return true;
where the precision is evaluated as:
inline unsigned int
wi::int_traits <rtx_mode_t>::get_precision (const rtx_mode_t &x)
{
return GET_MODE_PRECISION (x.second);
}
GET_MODE (rtl) is always VOIDmode and the precision of VOIDmode is 0,
so the precision of the wide_int passed to add_AT_wide is always 0.
Like CONST_INT, the "real" mode of a CONST_WIDE_INT is determined by
context rather than being stored in the rtx itself. The point of the
patch is to use that mode instead of VOIDmode in the make_pair.
Thanks,
Richard
next prev parent reply other threads:[~2015-11-02 20:55 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-21 14:24 Richard Sandiford
2015-08-21 16:20 ` Jeff Law
2015-10-28 12:04 ` [ping] " Ulrich Weigand
2015-10-28 13:14 ` Richard Sandiford
2015-10-28 14:25 ` Bernd Schmidt
2015-10-28 14:58 ` Ulrich Weigand
2015-11-02 15:30 ` Richard Sandiford
2015-11-02 16:29 ` Richard Sandiford
2015-11-02 20:34 ` [ping] " Mike Stump
2015-11-02 20:55 ` Richard Sandiford [this message]
2015-11-02 23:29 ` Mike Stump
2015-11-03 8:46 ` Richard Sandiford
2015-11-03 21:59 ` Mike Stump
2015-11-04 9:43 ` Richard Biener
2015-11-04 11:58 ` Mike Stump
2015-11-04 12:15 ` Richard Biener
2015-11-04 19:36 ` Mike Stump
2015-11-04 20:51 ` Richard Sandiford
2015-11-04 23:45 ` Mike Stump
2015-11-05 12:32 ` Richard Biener
2015-11-06 1:35 ` Mike Stump
2015-11-06 13:06 ` Richard Biener
2015-11-09 18:47 ` Mike Stump
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=871tc8unnx.fsf@e105548-lin.cambridge.arm.com \
--to=richard.sandiford@arm.com \
--cc=bschmidt@redhat.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=mikestump@comcast.net \
--cc=uweigand@de.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).