Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by [EMAIL PROTECTED]

http://bugzilla.ximian.com/show_bug.cgi?id=78642

--- shadow/78642        2006-06-16 09:14:02.000000000 -0400
+++ shadow/78642.tmp.23882      2006-06-18 16:33:11.000000000 -0400
@@ -348,6 +348,46 @@
 Some optimizations which can be performed but we don't do it are:
 - conversion of division by / 8 into a right shift when the
   value to be divided is known to be positive ('i' in the inner loop)
 - array bound check removal on the array accesses in the inner loop.
 
 
+
+------- Additional Comments From [EMAIL PROTECTED]  2006-06-18 16:33 -------
+The assembly code generated here is unusually bad:
+
+  90:  b9 08 00 00 00          mov    ecx,0x8
+  95:  8b c6                   mov    eax,esi
+  97:  99                      cdq    
+  98:  f7 f9                   idiv   ecx
+  9a:  39 47 0c                cmp    DWORD PTR [edi+12],eax
+  9d:  0f 86 cd 00 00 00       jbe    170 <PerformanceTest_Main+0x170>
+  a3:  8d 44 07 10             lea    eax,[edi+eax+16]
+  a7:  0f b6 00                movzx  eax,BYTE PTR [eax]
+  aa:  89 45 b0                mov    DWORD PTR [ebp-80],eax
+  ad:  b8 01 00 00 00          mov    eax,0x1
+  b2:  89 45 ac                mov    DWORD PTR [ebp-84],eax
+  b5:  b8 07 00 00 00          mov    eax,0x7
+  ba:  89 45 a8                mov    DWORD PTR [ebp-88],eax
+  bd:  b9 08 00 00 00          mov    ecx,0x8
+  c2:  8b c3                   mov    eax,ebx
+  c4:  99                      cdq    
+  c5:  f7 f9                   idiv   ecx
+  c7:  8b c2                   mov    eax,edx
+  c9:  8b 55 ac                mov    edx,DWORD PTR [ebp-84]
+  cc:  8b 4d a8                mov    ecx,DWORD PTR [ebp-88]
+  cf:  2b c8                   sub    ecx,eax
+  d1:  8b 45 b0                mov    eax,DWORD PTR [ebp-80]
+  d4:  83 e1 1f                and    ecx,0x1f
+  d7:  d3 e2                   shl    edx,cl
+  d9:  8b ca                   mov    ecx,edx
+  db:  23 c1                   and    eax,ecx
+  dd:  89 45 f0                mov    DWORD PTR [ebp-16],eax
+  e0:  43                      inc    ebx
+
+The segment from ad to ba is especially bad, constants being spilled
+into the stack and then later loaded into registers.
+
+-O=all gets it to about 0m2.674s (vs 0m4.191s) for me (you have to
+write k to the console, otherwise it *really* eliminates dead code :-)
+
+Changing stuff to uint also got much better performance. 
_______________________________________________
mono-bugs maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-bugs

Reply via email to