[Mono-bugs] [Bug 61641][Wis] Changed - Bad register allocation with `if' statements
bugzilla-daemon@bugzilla.ximian.com
bugzilla-daemon@bugzilla.ximian.com
Thu, 15 Jul 2004 17:07:11 -0400 (EDT)
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 bmaurer@users.sf.net.
http://bugzilla.ximian.com/show_bug.cgi?id=61641
--- shadow/61641 2004-07-15 16:52:55.000000000 -0400
+++ shadow/61641.tmp.19044 2004-07-15 17:07:11.000000000 -0400
@@ -1,14 +1,14 @@
Bug#: 61641
Product: Mono: Runtime
Version: unspecified
-OS:
+OS: unknown
OS Details:
Status: NEW
Resolution:
-Severity:
+Severity: Unknown
Priority: Wishlist
Component: misc
AssignedTo: mono-bugs@ximian.com
ReportedBy: bmaurer@users.sf.net
QAContact: mono-bugs@ximian.com
TargetMilestone: ---
@@ -105,6 +105,448 @@
VAR 6 00180000 002fffff C43
VAR 7 001d0000 002effff C43
VAR 8 00220000 002dffff C43
VAR 9 00270000 002cffff C43
As you can see, the `x' variables all have overlapping live ranges.
+
+------- Additional Comments From bmaurer@users.sf.net 2004-07-15 17:07 -------
+It seems that ordering by DFN is not good for liveness. When ordered
+by DFN, the blocks are in the following order (this is after SSA
+translation):
+BB0 DFN0 (len: 0):
+ prev: succ: BB3
+ idom: BB-1
+ dominators: BB0
+ dfrontier:
+
+BB3 DFN1 (len: 0):
+ (stind.i4 local[1] iconst[0])
+ (stind.i4 local[2] iconst[0])
+ (stind.i4 local[3] iconst[0])
+ (stind.i4 local[4] iconst[0])
+ (stind.i4 local[5] iconst[0])
+ (stind.i4 local[6] iconst[0])
+ (stind.i4 local[7] iconst[0])
+ (stind.i4 local[8] iconst[0])
+ (stind.i4 local[9] iconst[0])
+ (stind.i4 local[10] iconst[0])
+ br[B4]
+ prev: BB0 succ: BB4
+ idom: BB0
+ dominators: [BB0] BB3
+ dfrontier:
+
+BB4 DFN2 (len: 11): IL_0144: ldloc.0 -> IL_014a: blt IL_0007
+ (stind.i4 local[11] phi[1 (10, 28)])
+ (blt[B37B54] (compare (ldind.i4 local[11]) iconst[10000]))
+ prev: BB3 BB53 succ: BB37 BB54
+ idom: BB3
+ dominators: BB0 [BB3] BB4
+ dfrontier: BB4
+
+BB37 DFN3 (len: 7): IL_0007: ldloc.0 -> IL_0009: bne.un IL_0015
+ (bne.un[B5B38] (compare (ldind.i4 local[11]) iconst[1]))
+ prev: BB4 succ: BB5 BB38
+ idom: BB4
+ dominators: BB0 BB3 [BB4] BB37
+ dfrontier: BB4
+
+BB5 DFN4 (len: 0): IL_0015: ldc.i4.2 -> IL_0016: stloc.1
+ (stind.i4 local[44] iconst[2])
+ prev: BB37 succ: BB6
+ idom: BB37
+ dominators: BB0 BB3 BB4 [BB37] BB5
+ dfrontier: BB7
+
+BB6 DFN5 (len: 5): IL_0017: br IL_0020 -> IL_0017: br
+IL_0020
+ br[B7]
+ prev: BB5 succ: BB7
+ idom: BB5
+ dominators: BB0 BB3 BB4 BB37 [BB5] BB6
+ dfrontier: BB7
+
+BB7 DFN6 (len: 11): IL_0020: ldloc.1 -> IL_0026: blt IL_001c
+ (stind.i4 local[13] phi[2 (44, 43, 12)])
+ (blt[B8B39] (compare (ldind.i4 local[13]) iconst[10000]))
+ prev: BB6 BB8 BB38 succ: BB8 BB39
+ idom: BB37
+ dominators: BB0 BB3 BB4 [BB37] BB7
+ dfrontier: BB4 BB7
+
+BB8 DFN7 (len: 0): IL_001c: ldloc.1 -> IL_001f: stloc.1
+ (stind.i4 local[43] (add (ldind.i4 local[13]) iconst[1]))
+ prev: BB7 succ: BB7
+ idom: BB7
+ dominators: BB0 BB3 BB4 BB37 [BB7] BB8
+ dfrontier: BB7
+
+BB39 DFN8 (len: 7): IL_002b: ldloc.0 -> IL_002d: bne.un IL_0039
+ (bne.un[B9B40] (compare (ldind.i4 local[11]) iconst[1]))
+ prev: BB7 succ: BB9 BB40
+ idom: BB7
+ dominators: BB0 BB3 BB4 BB37 [BB7] BB39
+ dfrontier: BB4
+
+BB9 DFN9 (len: 0): IL_0039: ldc.i4.2 -> IL_003a: stloc.2
+ (stind.i4 local[42] iconst[2])
+ prev: BB39 succ: BB10
+ idom: BB39
+ dominators: BB0 BB3 BB4 BB37 BB7 [BB39] BB9
+ dfrontier: BB11
+
+BB10 DFN10 (len: 5): IL_003b: br IL_0044 -> IL_003b: br
+IL_0044
+ br[B11]
+ prev: BB9 succ: BB11
+ idom: BB9
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 [BB9] BB10
+ dfrontier: BB11
+
+BB11 DFN11 (len: 11): IL_0044: ldloc.2 -> IL_004a: blt IL_0040
+ (stind.i4 local[15] phi[3 (42, 41, 14)])
+ (blt[B12B41] (compare (ldind.i4 local[15]) iconst[10000]))
+ prev: BB10 BB12 BB40 succ: BB12 BB41
+ idom: BB39
+ dominators: BB0 BB3 BB4 BB37 BB7 [BB39] BB11
+ dfrontier: BB4 BB11
+
+BB12 DFN12 (len: 0): IL_0040: ldloc.2 -> IL_0043: stloc.2
+ (stind.i4 local[41] (add (ldind.i4 local[15]) iconst[1]))
+ prev: BB11 succ: BB11
+ idom: BB11
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 [BB11] BB12
+ dfrontier: BB11
+
+BB41 DFN13 (len: 7): IL_004f: ldloc.0 -> IL_0051: bne.un IL_005d
+ (bne.un[B13B42] (compare (ldind.i4 local[11]) iconst[1]))
+ prev: BB11 succ: BB13 BB42
+ idom: BB11
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 [BB11] BB41
+ dfrontier: BB4
+
+BB13 DFN14 (len: 0): IL_005d: ldc.i4.2 -> IL_005e: stloc.3
+ (stind.i4 local[40] iconst[2])
+ prev: BB41 succ: BB14
+ idom: BB41
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 [BB41] BB13
+ dfrontier: BB15
+
+BB14 DFN15 (len: 5): IL_005f: br IL_0068 -> IL_005f: br
+IL_0068
+ br[B15]
+ prev: BB13 succ: BB15
+ idom: BB13
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 [BB13] BB14
+ dfrontier: BB15
+
+BB15 DFN16 (len: 11): IL_0068: ldloc.3 -> IL_006e: blt IL_0064
+ (stind.i4 local[17] phi[4 (40, 39, 16)])
+ (blt[B16B43] (compare (ldind.i4 local[17]) iconst[10000]))
+ prev: BB14 BB16 BB42 succ: BB16 BB43
+ idom: BB41
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 [BB41] BB15
+ dfrontier: BB4 BB15
+
+BB16 DFN17 (len: 0): IL_0064: ldloc.3 -> IL_0067: stloc.3
+ (stind.i4 local[39] (add (ldind.i4 local[17]) iconst[1]))
+ prev: BB15 succ: BB15
+ idom: BB15
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 [BB15] BB16
+ dfrontier: BB15
+
+BB43 DFN18 (len: 7): IL_0073: ldloc.0 -> IL_0075: bne.un IL_0082
+ (bne.un[B17B44] (compare (ldind.i4 local[11]) iconst[1]))
+ prev: BB15 succ: BB17 BB44
+ idom: BB15
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 [BB15] BB43
+ dfrontier: BB4
+
+BB17 DFN19 (len: 0): IL_0082: ldc.i4.2 -> IL_0083: stloc.s 4
+ (stind.i4 local[38] iconst[2])
+ prev: BB43 succ: BB18
+ idom: BB43
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 [BB43] BB17
+ dfrontier: BB19
+
+BB18 DFN20 (len: 5): IL_0085: br IL_0090 -> IL_0085: br
+IL_0090
+ br[B19]
+ prev: BB17 succ: BB19
+ idom: BB17
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 [BB17] BB18
+ dfrontier: BB19
+
+BB19 DFN21 (len: 12): IL_0090: ldloc.s 4 -> IL_0097: blt IL_008a
+ (stind.i4 local[19] phi[5 (38, 37, 18)])
+ (blt[B20B45] (compare (ldind.i4 local[19]) iconst[10000]))
+ prev: BB18 BB20 BB44 succ: BB20 BB45
+ idom: BB43
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 [BB43] BB19
+ dfrontier: BB4 BB19
+
+BB20 DFN22 (len: 0): IL_008a: ldloc.s 4 -> IL_008e: stloc.s 4
+ (stind.i4 local[37] (add (ldind.i4 local[19]) iconst[1]))
+ prev: BB19 succ: BB19
+ idom: BB19
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 [BB19] BB20
+ dfrontier: BB19
+
+BB45 DFN23 (len: 7): IL_009c: ldloc.0 -> IL_009e: bne.un IL_00ab
+ (bne.un[B21B46] (compare (ldind.i4 local[11]) iconst[1]))
+ prev: BB19 succ: BB21 BB46
+ idom: BB19
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 [BB19] BB45
+ dfrontier: BB4
+
+BB21 DFN24 (len: 0): IL_00ab: ldc.i4.2 -> IL_00ac: stloc.s 5
+ (stind.i4 local[36] iconst[2])
+ prev: BB45 succ: BB22
+ idom: BB45
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 [BB45]
+BB21
+ dfrontier: BB23
+
+BB22 DFN25 (len: 5): IL_00ae: br IL_00b9 -> IL_00ae: br
+IL_00b9
+ br[B23]
+ prev: BB21 succ: BB23
+ idom: BB21
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 BB45
+[BB21] BB22
+ dfrontier: BB23
+
+BB23 DFN26 (len: 12): IL_00b9: ldloc.s 5 -> IL_00c0: blt IL_00b3
+ (stind.i4 local[21] phi[6 (36, 35, 20)])
+ (blt[B24B47] (compare (ldind.i4 local[21]) iconst[10000]))
+ prev: BB22 BB24 BB46 succ: BB24 BB47
+ idom: BB45
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 [BB45]
+BB23
+ dfrontier: BB4 BB23
+
+BB24 DFN27 (len: 0): IL_00b3: ldloc.s 5 -> IL_00b7: stloc.s 5
+ (stind.i4 local[35] (add (ldind.i4 local[21]) iconst[1]))
+ prev: BB23 succ: BB23
+ idom: BB23
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 BB45
+[BB23] BB24
+ dfrontier: BB23
+
+BB47 DFN28 (len: 7): IL_00c5: ldloc.0 -> IL_00c7: bne.un IL_00d4
+ (bne.un[B25B48] (compare (ldind.i4 local[11]) iconst[1]))
+ prev: BB23 succ: BB25 BB48
+ idom: BB23
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 BB45
+[BB23] BB47
+ dfrontier: BB4
+
+BB25 DFN29 (len: 0): IL_00d4: ldc.i4.2 -> IL_00d5: stloc.s 6
+ (stind.i4 local[34] iconst[2])
+ prev: BB47 succ: BB26
+ idom: BB47
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 BB45
+BB23 [BB47] BB25
+ dfrontier: BB27
+
+BB26 DFN30 (len: 5): IL_00d7: br IL_00e2 -> IL_00d7: br
+IL_00e2
+ br[B27]
+ prev: BB25 succ: BB27
+ idom: BB25
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 BB45
+BB23 BB47 [BB25] BB26
+ dfrontier: BB27
+
+BB27 DFN31 (len: 12): IL_00e2: ldloc.s 6 -> IL_00e9: blt IL_00dc
+ (stind.i4 local[23] phi[7 (34, 33, 22)])
+ (blt[B28B49] (compare (ldind.i4 local[23]) iconst[10000]))
+ prev: BB26 BB28 BB48 succ: BB28 BB49
+ idom: BB47
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 BB45
+BB23 [BB47] BB27 BB28
+ dfrontier: BB4 BB27
+
+BB28 DFN32 (len: 0): IL_00dc: ldloc.s 6 -> IL_00e0: stloc.s 6
+ (stind.i4 local[33] (add (ldind.i4 local[23]) iconst[1]))
+ prev: BB27 succ: BB27
+ idom: BB27
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 BB45
+BB23 BB47 [BB27] BB28
+ dfrontier: BB27
+
+BB49 DFN33 (len: 7): IL_00ee: ldloc.0 -> IL_00f0: bne.un IL_00fd
+ (bne.un[B29B50] (compare (ldind.i4 local[11]) iconst[1]))
+ prev: BB27 succ: BB29 BB50
+ idom: BB27
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 BB45
+BB23 BB47 [BB27] BB28 BB49
+ dfrontier: BB4
+
+BB29 DFN34 (len: 0): IL_00fd: ldc.i4.2 -> IL_00fe: stloc.s 7
+ (stind.i4 local[32] iconst[2])
+ prev: BB49 succ: BB30
+ idom: BB49
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 BB45
+BB23 BB47 BB27 BB28 [BB49] BB29
+ dfrontier: BB31
+
+BB30 DFN35 (len: 5): IL_0100: br IL_010b -> IL_0100: br
+IL_010b
+ br[B31]
+ prev: BB29 succ: BB31
+ idom: BB29
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 BB45
+BB23 BB47 BB27 BB28 BB49 [BB29] BB30
+ dfrontier: BB31
+
+BB31 DFN36 (len: 12): IL_010b: ldloc.s 7 -> IL_0112: blt IL_0105
+ (stind.i4 local[25] phi[8 (32, 31, 24)])
+ (blt[B32B51] (compare (ldind.i4 local[25]) iconst[10000]))
+ prev: BB30 BB32 BB50 succ: BB32 BB51
+ idom: BB49
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 BB45
+BB23 BB47 BB27 BB28 [BB49] BB31
+ dfrontier: BB4 BB31
+
+BB32 DFN37 (len: 0): IL_0105: ldloc.s 7 -> IL_0109: stloc.s 7
+ (stind.i4 local[31] (add (ldind.i4 local[25]) iconst[1]))
+ prev: BB31 succ: BB31
+ idom: BB31
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 BB45
+BB23 BB47 BB27 BB28 BB49 [BB31] BB32
+ dfrontier: BB31
+
+BB51 DFN38 (len: 7): IL_0117: ldloc.0 -> IL_0119: bne.un IL_0126
+ (bne.un[B33B52] (compare (ldind.i4 local[11]) iconst[1]))
+ prev: BB31 succ: BB33 BB52
+ idom: BB31
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 BB45
+BB23 BB47 BB27 BB28 BB49 [BB31] BB51
+ dfrontier: BB4
+
+BB33 DFN39 (len: 0): IL_0126: ldc.i4.2 -> IL_0127: stloc.s 8
+ (stind.i4 local[30] iconst[2])
+ prev: BB51 succ: BB34
+ idom: BB51
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 BB45
+BB23 BB47 BB27 BB28 BB49 BB31 [BB51] BB33
+ dfrontier: BB35
+
+BB34 DFN40 (len: 5): IL_0129: br IL_0134 -> IL_0129: br
+IL_0134
+ br[B35]
+ prev: BB33 succ: BB35
+ idom: BB33
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 BB45
+BB23 BB47 BB27 BB28 BB49 BB31 BB51 [BB33] BB34
+ dfrontier: BB35
+
+BB35 DFN41 (len: 12): IL_0134: ldloc.s 8 -> IL_013b: blt IL_012e
+ (stind.i4 local[27] phi[9 (30, 29, 26)])
+ (blt[B36B53] (compare (ldind.i4 local[27]) iconst[10000]))
+ prev: BB34 BB36 BB52 succ: BB36 BB53
+ idom: BB51
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 BB45
+BB23 BB47 BB27 BB28 BB49 BB31 [BB51] BB35
+ dfrontier: BB4 BB35
+
+BB36 DFN42 (len: 0): IL_012e: ldloc.s 8 -> IL_0132: stloc.s 8
+ (stind.i4 local[29] (add (ldind.i4 local[27]) iconst[1]))
+ prev: BB35 succ: BB35
+ idom: BB35
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 BB45
+BB23 BB47 BB27 BB28 BB49 BB31 BB51 [BB35] BB36
+ dfrontier: BB35
+
+BB53 DFN43 (len: 0): IL_0140: ldloc.0 -> IL_0143: stloc.0
+ (stind.i4 local[28] (add (ldind.i4 local[11]) iconst[1]))
+ prev: BB35 succ: BB4
+ idom: BB35
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 BB45
+BB23 BB47 BB27 BB28 BB49 BB31 BB51 [BB35] BB53
+ dfrontier: BB4
+
+BB52 DFN44 (len: 8): IL_011e: ldc.i4.1 -> IL_0121: br IL_0129
+ (stind.i4 local[26] iconst[1])
+ br[B35]
+ prev: BB51 succ: BB35
+ idom: BB51
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 BB45
+BB23 BB47 BB27 BB28 BB49 BB31 [BB51] BB52
+ dfrontier: BB35
+
+BB50 DFN45 (len: 8): IL_00f5: ldc.i4.1 -> IL_00f8: br IL_0100
+ (stind.i4 local[24] iconst[1])
+ br[B31]
+ prev: BB49 succ: BB31
+ idom: BB49
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 BB45
+BB23 BB47 BB27 BB28 [BB49] BB50
+ dfrontier: BB31
+
+BB48 DFN46 (len: 8): IL_00cc: ldc.i4.1 -> IL_00cf: br IL_00d7
+ (stind.i4 local[22] iconst[1])
+ br[B27]
+ prev: BB47 succ: BB27
+ idom: BB47
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 BB45
+BB23 [BB47] BB48
+ dfrontier: BB27
+
+BB46 DFN47 (len: 8): IL_00a3: ldc.i4.1 -> IL_00a6: br IL_00ae
+ (stind.i4 local[20] iconst[1])
+ br[B23]
+ prev: BB45 succ: BB23
+ idom: BB45
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 BB43 BB19 [BB45]
+BB46
+ dfrontier: BB23
+
+BB44 DFN48 (len: 8): IL_007a: ldc.i4.1 -> IL_007d: br IL_0085
+ (stind.i4 local[18] iconst[1])
+ br[B19]
+ prev: BB43 succ: BB19
+ idom: BB43
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 BB41 BB15 [BB43] BB44
+ dfrontier: BB19
+
+BB42 DFN49 (len: 7): IL_0056: ldc.i4.1 -> IL_0058: br IL_005f
+ (stind.i4 local[16] iconst[1])
+ br[B15]
+ prev: BB41 succ: BB15
+ idom: BB41
+ dominators: BB0 BB3 BB4 BB37 BB7 BB39 BB11 [BB41] BB42
+ dfrontier: BB15
+
+BB40 DFN50 (len: 7): IL_0032: ldc.i4.1 -> IL_0034: br IL_003b
+ (stind.i4 local[14] iconst[1])
+ br[B11]
+ prev: BB39 succ: BB11
+ idom: BB39
+ dominators: BB0 BB3 BB4 BB37 BB7 [BB39] BB40
+ dfrontier: BB11
+
+BB38 DFN51 (len: 7): IL_000e: ldc.i4.1 -> IL_0010: br IL_0017
+ (stind.i4 local[12] iconst[1])
+ br[B7]
+ prev: BB37 succ: BB7
+ idom: BB37
+ dominators: BB0 BB3 BB4 [BB37] BB38
+ dfrontier: BB7
+
+BB54 DFN52 (len: 1): IL_014f: ret -> IL_014f: ret
+ nop
+ prev: BB4 succ: BB1
+ idom: BB4
+ dominators: BB0 BB3 [BB4] BB54
+ dfrontier:
+
+BB1 DFN53 (len: 0):
+ prev: BB54 succ:
+ idom: BB54
+ dominators: BB0 BB3 BB4 [BB54] BB1
+ dfrontier:
+
+Notice how all the x = 1 statements are at the end. This makes all the
+x variables have overlapping live ranges.