public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
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

  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).