public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug rtl-optimization/49936] New: [4.7 regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7
@ 2011-08-01 19:37 sandra at codesourcery dot com
  2011-08-01 19:44 ` [Bug rtl-optimization/49936] " sandra at codesourcery dot com
                   ` (12 more replies)
  0 siblings, 13 replies; 14+ messages in thread
From: sandra at codesourcery dot com @ 2011-08-01 19:37 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49936

           Summary: [4.7 regression] IRA handles CANNOT_CHANGE_MODE_CLASS
                    poorly, + spills to memory on 4.7
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: rtl-optimization
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: sandra@codesourcery.com
                CC: vmakarov@redhat.com


Created attachment 24885
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=24885
test case abstest.c

Consider the attached test case, compiled for MIPS with

mipsisa32r2-sde-elf-gcc -O3 -fno-inline -fno-unroll-loops -march=74kf1_1 -S
abstest.c 

On MIPS, the hardware floating-point abs and neg instructions aren't usable by
default because they do the wrong thing with NaNs.  And, the sign-bit-twiddling
used by the optabs.c expansions can't be performed in a floating-point register
because of CANNOT_CHANGE_MODE_CLASS.  

With a GCC 4.6 compiler, this snippet of code from the test1 function

  for (i=0; i<n; i++) { accum -= a[i]; }
  accum = fabs (accum);
  return accum;

produces

...
.L3:
    mtc1    $3,$f2
    ldc1    $f0,0($5)
    addiu    $5,$5,8
    mtc1    $2,$f3
    sub.d    $f2,$f2,$f0
    mfc1    $3,$f2
    bne    $5,$4,.L3
    mfc1    $2,$f3

    ext    $5,$2,0,31
    move    $4,$3
.L2:
    mtc1    $4,$f0
    j    $31
    mtc1    $5,$f1
...

Because it thinks it cannot use a floating-point register, IRA has decided to
put accum in a general-purpose register pair $2/$3, and is shuffling it back
and forth to $f2/$f3 on every iteration of the loop.

On 4.7 mainline trunk, it's now deciding accum must live in memory instead of a
register:

.L3:
    ldc1    $f0,0($2)
    addiu    $2,$2,8
    sub.d    $f2,$f2,$f0
    bne    $2,$3,.L3
    sdc1    $f2,0($sp)

    lw    $2,0($sp)
    ext    $3,$2,0,31
    lw    $2,4($sp)
.L2:
    sw    $2,4($sp)
    sw    $3,0($sp)
    lw    $3,4($sp)
    lw    $2,0($sp)
    addiu    $sp,$sp,8
    mtc1    $3,$f0
    j    $31
    mtc1    $2,$f1

I think a big part of the problem here is the code in ira-costs.c that refuses
to consider the FP regs at all in computing the costs for where to put the
accum variable.  Better that it should just add in the move costs for reloading
to some other register class, much as it would to satisfy normal insn register
constraints.

Naively commenting out all the #ifdef CANNOT_CHANGE_MODE_CLASS....#endif
instances in ira-costs.c gave this code in 4.6:

.L3:
    ldc1    $f2,0($2)
    addiu    $2,$2,8
    bne    $2,$4,.L3
    sub.d    $f0,$f0,$f2

    mfc1    $2,$f0
    mfc1    $3,$f0
    ext    $5,$2,0,31
    move    $4,$3
.L2:
    mtc1    $4,$f0
    j    $31
    mtc1    $5,$f1

However, same change on 4.7 didn't help; it's still preferring to spill to
memory.  I think there must be some other bug lurking here that's responsible
for these additional memory spills on 4.7.  I also saw them when experimenting
with a patch to the MIPS backend to attack this problem in a target-specific
way.

Also, while splitting live ranges might help with the code in the test1
function where the fabs call appears outside the loop, the code for the test2
function (fabs in the body of the loop) suffers from the same problem and is
spilling to memory on 4.7.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug rtl-optimization/49936] [4.7 regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7
  2011-08-01 19:37 [Bug rtl-optimization/49936] New: [4.7 regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7 sandra at codesourcery dot com
@ 2011-08-01 19:44 ` sandra at codesourcery dot com
  2011-08-02  9:49 ` [Bug rtl-optimization/49936] [4.7 Regression] " rguenth at gcc dot gnu.org
                   ` (11 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: sandra at codesourcery dot com @ 2011-08-01 19:44 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49936

--- Comment #1 from Sandra Loosemore <sandra at codesourcery dot com> 2011-08-01 19:44:34 UTC ---
Created attachment 24886
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=24886
WIP patch to MIPS backend

Here is the WIP patch I referred to earlier.  This patch (which handles abs
only) produced pretty good code on 4.6 by adding MIPS-specific expansions of
abs with explicit register constraints, but didn't fix the memory spills on
4.7.  Since this is pretty complicated, I think it would be better to fix IRA
to deal better with CANNOT_CHANGE_MODE_CLASS in a target-inspecific way than
continue farther down this route.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug rtl-optimization/49936] [4.7 Regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7
  2011-08-01 19:37 [Bug rtl-optimization/49936] New: [4.7 regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7 sandra at codesourcery dot com
  2011-08-01 19:44 ` [Bug rtl-optimization/49936] " sandra at codesourcery dot com
@ 2011-08-02  9:49 ` rguenth at gcc dot gnu.org
  2011-08-16  2:10 ` vmakarov at redhat dot com
                   ` (10 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: rguenth at gcc dot gnu.org @ 2011-08-02  9:49 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49936

Richard Guenther <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|---                         |4.7.0
            Summary|[4.7 regression] IRA        |[4.7 Regression] IRA
                   |handles                     |handles
                   |CANNOT_CHANGE_MODE_CLASS    |CANNOT_CHANGE_MODE_CLASS
                   |poorly, + spills to memory  |poorly, + spills to memory
                   |on 4.7                      |on 4.7


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug rtl-optimization/49936] [4.7 Regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7
  2011-08-01 19:37 [Bug rtl-optimization/49936] New: [4.7 regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7 sandra at codesourcery dot com
  2011-08-01 19:44 ` [Bug rtl-optimization/49936] " sandra at codesourcery dot com
  2011-08-02  9:49 ` [Bug rtl-optimization/49936] [4.7 Regression] " rguenth at gcc dot gnu.org
@ 2011-08-16  2:10 ` vmakarov at redhat dot com
  2011-08-16  6:56 ` sandra at codesourcery dot com
                   ` (9 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: vmakarov at redhat dot com @ 2011-08-16  2:10 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49936

--- Comment #2 from Vladimir Makarov <vmakarov at redhat dot com> 2011-08-16 02:05:02 UTC ---
After thorough investigation of the problem I came to a conclusion that fixing
it in IRA requires to form regions on pseudo mode usage too (besides just
register pressure).  Allocnos for the pseudo in question should get a different
classes (FP class inside loop and INT outside).

The problem is that IRA were written on assumption that register class of all
allocnos for a pseudo is the same.  It needs a lot of changes besides a new
code for forming regions on the mode base.

I'll try to do this but it will take long time.

If it does not work, I could try to restore 4.6 behaviour (assigning INT class
instead of memory).


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug rtl-optimization/49936] [4.7 Regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7
  2011-08-01 19:37 [Bug rtl-optimization/49936] New: [4.7 regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7 sandra at codesourcery dot com
                   ` (2 preceding siblings ...)
  2011-08-16  2:10 ` vmakarov at redhat dot com
@ 2011-08-16  6:56 ` sandra at codesourcery dot com
  2011-08-16 18:42 ` vmakarov at redhat dot com
                   ` (8 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: sandra at codesourcery dot com @ 2011-08-16  6:56 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49936

--- Comment #3 from Sandra Loosemore <sandra at codesourcery dot com> 2011-08-16 04:13:02 UTC ---
Hmmm.  Is it possible to make the INT/memory/whatever decision based on move
costs?  Or use a target hook to supply a hint about what to do?


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug rtl-optimization/49936] [4.7 Regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7
  2011-08-01 19:37 [Bug rtl-optimization/49936] New: [4.7 regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7 sandra at codesourcery dot com
                   ` (3 preceding siblings ...)
  2011-08-16  6:56 ` sandra at codesourcery dot com
@ 2011-08-16 18:42 ` vmakarov at redhat dot com
  2011-08-19 22:22 ` vmakarov at gcc dot gnu.org
                   ` (7 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: vmakarov at redhat dot com @ 2011-08-16 18:42 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49936

--- Comment #4 from Vladimir Makarov <vmakarov at redhat dot com> 2011-08-16 17:27:12 UTC ---
(In reply to comment #3)
> Hmmm.  Is it possible to make the INT/memory/whatever decision based on move
> costs?  Or use a target hook to supply a hint about what to do?

I think I can restore the 4.6 behaviour by assigning GR_REGS for accum.  I'll
try to do a patch this week.  Such patches needs a lot of testing.  So I hope
it will be on the trunk next week.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug rtl-optimization/49936] [4.7 Regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7
  2011-08-01 19:37 [Bug rtl-optimization/49936] New: [4.7 regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7 sandra at codesourcery dot com
                   ` (4 preceding siblings ...)
  2011-08-16 18:42 ` vmakarov at redhat dot com
@ 2011-08-19 22:22 ` vmakarov at gcc dot gnu.org
  2011-10-10 12:14 ` rguenth at gcc dot gnu.org
                   ` (6 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: vmakarov at gcc dot gnu.org @ 2011-08-19 22:22 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49936

--- Comment #5 from Vladimir Makarov <vmakarov at gcc dot gnu.org> 2011-08-19 22:17:29 UTC ---
Author: vmakarov
Date: Fri Aug 19 22:17:26 2011
New Revision: 177916

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=177916
Log:
2011-08-19  Vladimir Makarov  <vmakarov@redhat.com>

    PR rtl-optimization/49936
    * ira.c (ira_init_register_move_cost): Ignore too small subclasses
    for calculation of max register move costs.


Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/ira.c


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug rtl-optimization/49936] [4.7 Regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7
  2011-08-01 19:37 [Bug rtl-optimization/49936] New: [4.7 regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7 sandra at codesourcery dot com
                   ` (5 preceding siblings ...)
  2011-08-19 22:22 ` vmakarov at gcc dot gnu.org
@ 2011-10-10 12:14 ` rguenth at gcc dot gnu.org
  2011-10-10 14:35 ` sandra at codesourcery dot com
                   ` (5 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: rguenth at gcc dot gnu.org @ 2011-10-10 12:14 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49936

Richard Guenther <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Target|                            |mipsisa32r2-elf
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |FIXED

--- Comment #6 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-10-10 12:02:39 UTC ---
I suppose fixed.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug rtl-optimization/49936] [4.7 Regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7
  2011-08-01 19:37 [Bug rtl-optimization/49936] New: [4.7 regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7 sandra at codesourcery dot com
                   ` (6 preceding siblings ...)
  2011-10-10 12:14 ` rguenth at gcc dot gnu.org
@ 2011-10-10 14:35 ` sandra at codesourcery dot com
  2011-10-27  9:56 ` rguenth at gcc dot gnu.org
                   ` (4 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: sandra at codesourcery dot com @ 2011-10-10 14:35 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49936

Sandra Loosemore <sandra at codesourcery dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |UNCONFIRMED
         Resolution|FIXED                       |

--- Comment #7 from Sandra Loosemore <sandra at codesourcery dot com> 2011-10-10 14:34:11 UTC ---
The additional spills to memory on 4.7 compared to 4.6 were fixed (at least the
last time I checked), but there is still a real problem with poor RA decisions
resulting from CANNOT_CHANGE_MODE_CLASS.  So, let's please not mark this issue
resolved.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug rtl-optimization/49936] [4.7 Regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7
  2011-08-01 19:37 [Bug rtl-optimization/49936] New: [4.7 regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7 sandra at codesourcery dot com
                   ` (7 preceding siblings ...)
  2011-10-10 14:35 ` sandra at codesourcery dot com
@ 2011-10-27  9:56 ` rguenth at gcc dot gnu.org
  2012-01-05 17:19 ` jakub at gcc dot gnu.org
                   ` (3 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: rguenth at gcc dot gnu.org @ 2011-10-27  9:56 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49936

Richard Guenther <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |WAITING
   Last reconfirmed|                            |2011-10-27
     Ever Confirmed|0                           |1

--- Comment #8 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-10-27 09:56:30 UTC ---
But is that part a regression?


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug rtl-optimization/49936] [4.7 Regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7
  2011-08-01 19:37 [Bug rtl-optimization/49936] New: [4.7 regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7 sandra at codesourcery dot com
                   ` (8 preceding siblings ...)
  2011-10-27  9:56 ` rguenth at gcc dot gnu.org
@ 2012-01-05 17:19 ` jakub at gcc dot gnu.org
  2012-01-05 17:31 ` sandra at codesourcery dot com
                   ` (2 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: jakub at gcc dot gnu.org @ 2012-01-05 17:19 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49936

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #9 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-01-05 17:17:44 UTC ---
Sandra, ping re: #c8?


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug rtl-optimization/49936] [4.7 Regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7
  2011-08-01 19:37 [Bug rtl-optimization/49936] New: [4.7 regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7 sandra at codesourcery dot com
                   ` (9 preceding siblings ...)
  2012-01-05 17:19 ` jakub at gcc dot gnu.org
@ 2012-01-05 17:31 ` sandra at codesourcery dot com
  2012-01-19 12:43 ` [Bug rtl-optimization/49936] " rguenth at gcc dot gnu.org
  2012-02-22 13:42 ` xiaoyuanbo at yeah dot net
  12 siblings, 0 replies; 14+ messages in thread
From: sandra at codesourcery dot com @ 2012-01-05 17:31 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49936

--- Comment #10 from Sandra Loosemore <sandra at codesourcery dot com> 2012-01-05 17:31:39 UTC ---
My notes are that the unnecessary register moves in the loop have been present
since at least GCC 4.3, so it is not a 4.6->4.7 regression, at least.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug rtl-optimization/49936] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7
  2011-08-01 19:37 [Bug rtl-optimization/49936] New: [4.7 regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7 sandra at codesourcery dot com
                   ` (10 preceding siblings ...)
  2012-01-05 17:31 ` sandra at codesourcery dot com
@ 2012-01-19 12:43 ` rguenth at gcc dot gnu.org
  2012-02-22 13:42 ` xiaoyuanbo at yeah dot net
  12 siblings, 0 replies; 14+ messages in thread
From: rguenth at gcc dot gnu.org @ 2012-01-19 12:43 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49936

Richard Guenther <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|WAITING                     |NEW
   Target Milestone|4.7.0                       |---

--- Comment #11 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-01-19 12:22:25 UTC ---
Whatever.  Would have been nice to have a separate bugreport for this.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug rtl-optimization/49936] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7
  2011-08-01 19:37 [Bug rtl-optimization/49936] New: [4.7 regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7 sandra at codesourcery dot com
                   ` (11 preceding siblings ...)
  2012-01-19 12:43 ` [Bug rtl-optimization/49936] " rguenth at gcc dot gnu.org
@ 2012-02-22 13:42 ` xiaoyuanbo at yeah dot net
  12 siblings, 0 replies; 14+ messages in thread
From: xiaoyuanbo at yeah dot net @ 2012-02-22 13:42 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49936

xiaoyuanbo <xiaoyuanbo at yeah dot net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |xiaoyuanbo at yeah dot net

--- Comment #12 from xiaoyuanbo <xiaoyuanbo at yeah dot net> 2012-02-22 12:55:01 UTC ---
long pointer for file system


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2012-02-22 13:41 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-08-01 19:37 [Bug rtl-optimization/49936] New: [4.7 regression] IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills to memory on 4.7 sandra at codesourcery dot com
2011-08-01 19:44 ` [Bug rtl-optimization/49936] " sandra at codesourcery dot com
2011-08-02  9:49 ` [Bug rtl-optimization/49936] [4.7 Regression] " rguenth at gcc dot gnu.org
2011-08-16  2:10 ` vmakarov at redhat dot com
2011-08-16  6:56 ` sandra at codesourcery dot com
2011-08-16 18:42 ` vmakarov at redhat dot com
2011-08-19 22:22 ` vmakarov at gcc dot gnu.org
2011-10-10 12:14 ` rguenth at gcc dot gnu.org
2011-10-10 14:35 ` sandra at codesourcery dot com
2011-10-27  9:56 ` rguenth at gcc dot gnu.org
2012-01-05 17:19 ` jakub at gcc dot gnu.org
2012-01-05 17:31 ` sandra at codesourcery dot com
2012-01-19 12:43 ` [Bug rtl-optimization/49936] " rguenth at gcc dot gnu.org
2012-02-22 13:42 ` xiaoyuanbo at yeah dot net

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