From: Joseph Myers <joseph@codesourcery.com>
To: Martin Jambor <mjambor@suse.cz>
Cc: Tejas Joshi <tejasjoshi9673@gmail.com>, <gcc@gcc.gnu.org>
Subject: Re: About GSOC.
Date: Tue, 23 Oct 2018 16:51:00 -0000 [thread overview]
Message-ID: <alpine.DEB.2.21.1810231631010.17157@digraph.polyomino.org.uk> (raw)
In-Reply-To: <ri6k1m9q6rm.fsf@suse.cz>
On Tue, 23 Oct 2018, Martin Jambor wrote:
> Hi Joseph,
>
> this seems related to your proposal GSoC proposal in the beginning
> of this year. Do you have any comments about Tejas's idea? Do you
My proposal was designed so that it would be possible to do some small
piece, that is useful by itself, and so learn about some parts of the
compiler, and then go onto another piece, and so learn about other parts
of the compiler - as there are lots of separate pieces that are related,
but each useful by itself as a contribution to GCC. The parts Tejas
refers to are good pieces to be looking at for one such piece (roundeven
folding for constant arguments) (along with e.g. builtins.def to define
the built-in functions).
> think this would be a good (part of) a GSoC project next year?
If a suitable mentor is available for it next year.
> > It does tell that roundeven rounds its argument to nearest integral
> > ties to even (least significant bit 0) returning integral value
> > provided that the resulting value is exact.
> > So, for the start, I'd be implementing this functionality for roundeven.
> > As ita said in earlier mails that, similar functions like
> > real_ceil are implemented
> > in real.c and are used in fold-const-call.c.
> > Roundeven might be implemented in similar way. Is it built-in
> > (internal) function means not to be exposed to end-user?
> > Studying some functions like real_ceil, there are call checks
> > (flag_errno_math) so I believe similar would be needed for roundeven.
The expectation for this part of the project would be that calls to both
__builtin_roundeven and roundeven (and similar functions with f, l, f128
etc. suffixes) would be folded when the arguments are constants (both
direct calls with constants such as roundeven (2.5), and cases where
GIMPLE optimization passes propagate a constant into the call, such as
"double d = 2.5; return roundeven (d);"). This of course involves various
internal functions in the compiler to implement that.
If you compile code such as
double
f (void)
{
double d = 2.5;
return ceil (d);
}
with -O2 -S -fdump-tree-all, you can look at the generated dump files to
see which optimization pass the folding into constant 3.0 occurs in.
Looking at such dumps is an important way of finding your way around the
optimization passes in the compiler.
> > In real.c where real_ceil is implemented, there are function calls
> > (and implementations) like do_fix_trunc which also then call functions
> > like decimal_do_dix_trunc (maybe the main functionality of
> > do_fix_trunc?, other are just checks, like NaN or qNaN). I did not
You can ignore any cases for decimal floating-point values (do gcc_assert
(!r->decimal)), given that the project does not involve adding any decimal
floating-point built-in functions. That means you should instead
understand REAL_EXP and the significands of floating-point values, and
what functions such as clear_significand_below and test_significand_bit
do, because you'll need to write your own logic like that in do_fix_trunc,
with appropriate cases for whether the bits with values 0.5 and below form
part of the significand.
> > understand these functions really and what do they do. Also I did not
> > understand the structure of REAL_VALUE_TYPE (r->cl and etc?)
I suggest looking more closely at the definition of cl in real.h. It's
true that it doesn't have a comment specifying its semantics directly, but
the /* ENUM_BITFIELD (real_value_class) */ should give a strong hint,
along with the values that are stored in that field. By looking at how
all the fields in real_value are used, you should be able to deduce their
semantics, and then send a GCC patch that adds a comment to each field
with a more detailed description of its semantics, which would be a useful
contribution by itself to help people reading real.c code in future.
(struct real_format has more detailed comments on some of the fields. I
suggest using those as a model for the comments that ought to be written
for the fields of struct real_value.)
> > Also when does the real.c and fold-const-call.c comes in picture in
> > the flow of GCC (Is it for GIMPLE level instruction selection (gimple
> > stmnt to corresponding rtl instruction))?
The code you're looking at is used in GIMPLE optimizations, and possibly
folding before GIMPLE.
Converting roundeven calls with non-constant arguments to appropriate
instructions (for processors that have them, e.g. x86 with SSE 4.1 and
later) is also useful, and will involve changes to optabs.def,
internal-fn.def and target .md files. But I'd advise doing one
self-contained piece first (such as the folding for constant arguments)
before moving on to others (such as generating appropriate instructions
for the case of non-constant arguments).
--
Joseph S. Myers
joseph@codesourcery.com
next prev parent reply other threads:[~2018-10-23 16:51 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CACMrGjCeaZ7EoYqjLYiAJXjOtOfpJNo9zcbWhfarfkiLMN8YYA@mail.gmail.com>
2018-10-13 4:43 ` Tejas Joshi
2018-10-23 10:47 ` Martin Jambor
2018-10-23 16:51 ` Joseph Myers [this message]
2018-11-16 16:50 ` Tejas Joshi
2018-11-16 19:00 ` Joseph Myers
2019-01-21 19:13 ` Tejas Joshi
2019-01-21 23:03 ` Joseph Myers
2019-01-23 2:55 ` Tejas Joshi
2019-01-23 4:00 ` Tejas Joshi
2019-01-23 17:37 ` Joseph Myers
2019-01-25 19:52 ` Tejas Joshi
2019-01-25 21:32 ` Joseph Myers
2019-01-28 17:00 ` Tejas Joshi
2019-02-04 14:39 ` Tejas Joshi
2019-02-04 15:06 ` Prathamesh Kulkarni
2019-02-04 15:56 ` Tejas Joshi
2019-02-04 16:44 ` Prathamesh Kulkarni
2019-02-04 17:22 ` Tejas Joshi
2019-02-24 12:05 ` Tejas Joshi
2019-03-30 11:24 ` Tejas Joshi
2019-04-01 19:53 ` Joseph Myers
2019-04-04 13:04 ` Tejas Joshi
2019-05-04 11:20 ` Tejas Joshi
2019-05-07 17:18 ` Joseph Myers
2019-05-07 19:38 ` Tejas Joshi
2019-05-07 21:01 ` Joseph Myers
2019-05-08 3:27 ` Tejas Joshi
2019-05-08 7:30 ` Tejas Joshi
2019-05-08 14:21 ` Tejas Joshi
2019-05-09 17:01 ` Joseph Myers
2019-05-09 16:55 ` Joseph Myers
2019-05-20 15:49 ` Martin Jambor
2019-05-20 21:48 ` Joseph Myers
2019-05-29 11:21 ` Tejas Joshi
2019-05-29 18:45 ` Tejas Joshi
2019-05-30 17:08 ` Martin Jambor
2019-05-30 21:38 ` Segher Boessenkool
2019-05-31 10:11 ` Martin Jambor
2019-05-31 10:28 ` Tejas Joshi
2019-06-03 16:38 ` Joseph Myers
2019-06-04 7:03 ` Tejas Joshi
2019-06-05 12:19 ` Tejas Joshi
2019-06-06 16:43 ` Joseph Myers
2019-06-09 4:48 ` Tejas Joshi
2019-06-10 20:26 ` Joseph Myers
2019-06-12 18:52 ` Tejas Joshi
2019-06-13 12:33 ` Tejas Joshi
2019-06-13 17:19 ` Expanding roundeven (Was: Re: About GSOC.) Martin Jambor
2019-06-13 21:16 ` Joseph Myers
2019-06-14 12:49 ` Tejas Joshi
2019-06-14 17:32 ` Martin Jambor
2019-06-17 7:50 ` Tejas Joshi
2019-06-17 17:15 ` Joseph Myers
2019-06-19 13:32 ` Tejas Joshi
2019-06-22 17:11 ` Tejas Joshi
2019-06-22 17:37 ` Jan Hubicka
2019-06-17 17:10 ` Joseph Myers
2019-05-31 11:13 ` About GSOC Segher Boessenkool
2019-05-31 11:16 ` Nathan Sidwell
2019-05-31 13:30 ` Eric Gallager
2019-06-03 9:37 ` Tejas Joshi
2019-06-06 16:56 ` Committing patches and other conventions (Was: Re: About GSOC) Martin Jambor
2019-06-09 4:57 ` Tejas Joshi
2019-06-12 13:48 ` Tejas Joshi
2019-06-13 17:02 ` Martin Jambor
2024-03-04 6:57 About gsoc mokshagnareddyc
2024-03-04 10:06 ` Jonathan Wakely
2024-03-05 2:02 ` Dave Blanchard
2024-03-05 9:31 ` Jonathan Wakely
2024-03-05 9:32 ` Jonathan Wakely
2024-03-11 1:17 ` Dave Blanchard
2024-03-11 9:08 ` Mark Wielaard
2024-03-07 12:26 ` Martin Jambor
2024-03-11 12:41 Julian Waters
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=alpine.DEB.2.21.1810231631010.17157@digraph.polyomino.org.uk \
--to=joseph@codesourcery.com \
--cc=gcc@gcc.gnu.org \
--cc=mjambor@suse.cz \
--cc=tejasjoshi9673@gmail.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).