digitalmars.D.bugs - invalid codegen with -O
- Kris (67/67) Nov 29 2005 There's a bug in the optimizer whereby it can fail to correctly execute
- Walter Bright (1/1) Dec 01 2005 I need a reproducible code example so I can fix it. -Walter
- Kris (7/9) Dec 01 2005 I did try to,Walter, but couldn't get a small self-contained example to
- Tom S (6/18) Dec 02 2005 I've also had problems with -O. My programs exhibit really weird
- Walter Bright (3/6) Dec 02 2005 I can't fix it without a reproducible sample.
- Tiago Gasiba (5/6) Dec 02 2005 This might help: digitalmars.D.bugs/5643
- Walter Bright (3/4) Dec 02 2005 And that's a bug report I can deal with! Thanks.
- Walter Bright (3/5) Dec 02 2005 The first thing to try is delete all the function bodies but the one in
There's a bug in the optimizer whereby it can fail to correctly execute loops like this: for (int i=1; --i) {} The problem appears to be in the code-scheduling, whereby the assignment to 'i' and the subsequent test for zero are seperated by instructions that alter the outcome of the assignment (the Z flag, in this instance). Here's a sample, with the important parts highlighted: 00402E64 push ebp 00402E65 mov ebp,esp 00402E67 mov edx,0Ah 00402E6C sub esp,1000h 00402E72 test dword ptr [esp],esp 00402E75 dec edx 00402E76 jne _Dmain+8 (00402e6c) 00402E78 sub esp,47Ch 00402E7E mov ecx,2710h 00402E83 mov eax,0FFFFFFFFh 27: char[40000] output; 00402E88 push ebx 00402E89 push esi 00402E8A push edi 22: { 23: //auto f = new Foo; 24: // f + new Bar(1); 25: 26: uint x; 00402E8B lea edi,[output] 00402E91 mov dword ptr [x],0 00402E9B rep stos dword ptr [edi] 28: wchar[1000] input = ' '; 00402E9D lea ecx,[input] 00402EA3 push 3E8h 00402EA8 push 20h 00402EAA push ecx 00402EAB call __memset16 (00408408) 29: ulong ms = System.getMillisecs(); 00402EB0 call _D5mango3sys6System6System12getMillisecsFZm (00405b1c) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 00402EB5 xor ebx,ebx ** assignment to i ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 00402EB7 mov dword ptr [ms],eax 00402EBA mov dword ptr [ebp-54h],edx 30: for (int i=1; --i;) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 00402EBD add esp,0Ch ** resets the Z flag! *BOGUS* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 00402EC0 je _Dmain+9Bh (00402eff) ** testing for ebx == 0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 31: Utf.toUtf8 (input, output, &x); 00402EC2 mov esi,9C40h 00402EC7 lea edx,[output] 00402ECD mov dword ptr [ebp-0A478h],esi 00402ED3 mov dword ptr [ebp-0A474h],edx 00402ED9 lea eax,[input] 00402EDF push eax 00402EE0 lea eax,[x] 00402EE6 push 3E8h 00402EEB push dword ptr [ebp-0A474h] 00402EF1 push dword ptr [ebp-0A478h] 00402EF7 call _D5mango7convert3Utf3Utf6toUtf8FAuAaPkZAa (00403498) 00402EFC dec ebx ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 00402EFD jne _Dmain+75h (00402ed9) ** unit.max iterations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This is very similar to a codegen problem reported last year. Is it the same one?
Nov 29 2005
I need a reproducible code example so I can fix it. -Walter
Dec 01 2005
I did try to,Walter, but couldn't get a small self-contained example to exhibit the bug. Having said that, you can see quite plainly there's a codegen issue there in the disassembly. The only example I have is using Mango and Ares ~ would you like that one? "Walter Bright" <newshound digitalmars.com> wrote in message news:dmohvf$34a$1 digitaldaemon.com...I need a reproducible code example so I can fix it. -Walter
Dec 01 2005
I've also had problems with -O. My programs exhibit really weird behaviour when compiled with -O. I guess in my case it might be related to tons of floating point calculations. Kris wrote:I did try to,Walter, but couldn't get a small self-contained example to exhibit the bug. Having said that, you can see quite plainly there's a codegen issue there in the disassembly. The only example I have is using Mango and Ares ~ would you like that one? "Walter Bright" <newshound digitalmars.com> wrote in message news:dmohvf$34a$1 digitaldaemon.com...-- Tomasz Stachowiak /+ a.k.a. h3r3tic +/I need a reproducible code example so I can fix it. -Walter
Dec 02 2005
"Tom S" <h3r3tic remove.mat.uni.torun.pl> wrote in message news:dmpr0v$1uh7$1 digitaldaemon.com...I've also had problems with -O. My programs exhibit really weird behaviour when compiled with -O. I guess in my case it might be related to tons of floating point calculations.I can't fix it without a reproducible sample.
Dec 02 2005
Walter Bright schrieb:I can't fix it without a reproducible sample.This might help: digitalmars.D.bugs/5643 -- Tiago Gasiba (M.Sc.) - http://www.gasiba.de Everything should be made as simple as possible, but not simpler.
Dec 02 2005
"Tiago Gasiba" <tiago.gasiba gmail.com> wrote in message news:dmpug5$245d$1 digitaldaemon.com...This might help: digitalmars.D.bugs/5643And that's a bug report I can deal with! Thanks.
Dec 02 2005
"Kris" <fu bar.com> wrote in message news:dmoru6$aqs$1 digitaldaemon.com...I did try to,Walter, but couldn't get a small self-contained example to exhibit the bug.The first thing to try is delete all the function bodies but the one in question, replacing them with declarations.
Dec 02 2005