Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1278651 > unrolled thread
| Started by | Rasmus Villemoes <linux@rasmusvillemoes.dk> |
|---|---|
| First post | 2015-11-27 10:00 +0100 |
| Last post | 2015-11-27 12:50 +0100 |
| Articles | 5 — 5 participants |
Back to article view | Back to linux.kernel
no-op delay loops Rasmus Villemoes <linux@rasmusvillemoes.dk> - 2015-11-27 10:00 +0100
Re: no-op delay loops yalin wang <yalin.wang2010@gmail.com> - 2015-11-27 10:10 +0100
Re: no-op delay loops Andy Shevchenko <andy.shevchenko@gmail.com> - 2015-11-27 10:30 +0100
Re: no-op delay loops Arnd Bergmann <arnd@arndb.de> - 2015-11-27 12:20 +0100
Re: no-op delay loops Ralf Baechle <ralf@linux-mips.org> - 2015-11-27 12:50 +0100
| From | Rasmus Villemoes <linux@rasmusvillemoes.dk> |
|---|---|
| Date | 2015-11-27 10:00 +0100 |
| Subject | no-op delay loops |
| Message-ID | <qzn2P-yf-23@gated-at.bofh.it> |
Hi, It seems that gcc happily compiles for (i = 0; i < 1000000000; ++i) ; into simply i = 1000000000; (which is then usually eliminated as a dead store). At least at -O2, and when i is not declared volatile. So it would seem that the loops at arch/mips/pci/pci-rt2880.c:235 arch/mips/pmcs-msp71xx/msp_setup.c:80 arch/mips/sni/reset.c:35 actually don't do anything. (In the middle one, i is 'register', but that doesn't change anything.) Is mips compiled with some special flags that would make gcc actually emit code for the above? Rasmus -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [next] | [standalone]
| From | yalin wang <yalin.wang2010@gmail.com> |
|---|---|
| Date | 2015-11-27 10:10 +0100 |
| Message-ID | <qzncv-Rf-15@gated-at.bofh.it> |
| In reply to | #1278651 |
> On Nov 27, 2015, at 16:53, Rasmus Villemoes <linux@rasmusvillemoes.dk> wrote: > > Hi, > > It seems that gcc happily compiles > > for (i = 0; i < 1000000000; ++i) ; > > into simply > > i = 1000000000; > > (which is then usually eliminated as a dead store). At least at -O2, and > when i is not declared volatile. So it would seem that the loops at > > arch/mips/pci/pci-rt2880.c:235 > arch/mips/pmcs-msp71xx/msp_setup.c:80 > arch/mips/sni/reset.c:35 > > actually don't do anything. (In the middle one, i is 'register', but > that doesn't change anything.) Is mips compiled with some special flags > that would make gcc actually emit code for the above? > you can try to declare i as volatile int i; may gcc will not optimize it . Thanks -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Andy Shevchenko <andy.shevchenko@gmail.com> |
|---|---|
| Date | 2015-11-27 10:30 +0100 |
| Message-ID | <qznvR-Y3-19@gated-at.bofh.it> |
| In reply to | #1278659 |
On Fri, Nov 27, 2015 at 11:04 AM, yalin wang <yalin.wang2010@gmail.com> wrote: >> On Nov 27, 2015, at 16:53, Rasmus Villemoes <linux@rasmusvillemoes.dk> wrote: >> It seems that gcc happily compiles >> >> for (i = 0; i < 1000000000; ++i) ; >> >> into simply >> >> i = 1000000000; >> >> (which is then usually eliminated as a dead store). At least at -O2, and >> when i is not declared volatile. So it would seem that the loops at >> >> arch/mips/pci/pci-rt2880.c:235 >> arch/mips/pmcs-msp71xx/msp_setup.c:80 >> arch/mips/sni/reset.c:35 >> >> actually don't do anything. (In the middle one, i is 'register', but >> that doesn't change anything.) Is mips compiled with some special flags >> that would make gcc actually emit code for the above? >> > you can try to declare i as volatile int i; > may gcc will not optimize it . Might be, but Rasmus as I can see asked about *existing* code. -- With Best Regards, Andy Shevchenko -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Arnd Bergmann <arnd@arndb.de> |
|---|---|
| Date | 2015-11-27 12:20 +0100 |
| Message-ID | <qzpei-27s-23@gated-at.bofh.it> |
| In reply to | #1278651 |
On Friday 27 November 2015 09:53:50 Rasmus Villemoes wrote: > > It seems that gcc happily compiles > > for (i = 0; i < 1000000000; ++i) ; > > into simply > > i = 1000000000; > > (which is then usually eliminated as a dead store). At least at -O2, and > when i is not declared volatile. So it would seem that the loops at > > arch/mips/pci/pci-rt2880.c:235 > arch/mips/pmcs-msp71xx/msp_setup.c:80 > arch/mips/sni/reset.c:35 > > actually don't do anything. (In the middle one, i is 'register', but > that doesn't change anything.) Is mips compiled with some special flags > that would make gcc actually emit code for the above? > I remember that gcc used to not optimize code that looked like a delay loop such as the above, and my tests show that this was still the case in gcc-4.0.3, but starting with gcc-4.1 it opimtized away that loop. Arnd -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Ralf Baechle <ralf@linux-mips.org> |
|---|---|
| Date | 2015-11-27 12:50 +0100 |
| Message-ID | <qzpHk-2hM-9@gated-at.bofh.it> |
| In reply to | #1278651 |
On Fri, Nov 27, 2015 at 09:53:50AM +0100, Rasmus Villemoes wrote: > It seems that gcc happily compiles > > for (i = 0; i < 1000000000; ++i) ; > > into simply > > i = 1000000000; > > (which is then usually eliminated as a dead store). At least at -O2, and > when i is not declared volatile. So it would seem that the loops at > > arch/mips/pci/pci-rt2880.c:235 > arch/mips/pmcs-msp71xx/msp_setup.c:80 > arch/mips/sni/reset.c:35 > > actually don't do anything. (In the middle one, i is 'register', but > that doesn't change anything.) Is mips compiled with some special flags > that would make gcc actually emit code for the above? Thanks for reporting! GCC used to intentionally not eleminate empty loops. This has changed a while ago. Using volatile for the loop variable will result in atrocious code so should be avoided. One problem of these open coded loops is that it's not obvious how much delay was actually intended so when fixing this I will have to do a bit of precission guessing ;-) Ralf -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web