- // MIR for `subexpression_elimination` before GVN + // MIR for `subexpression_elimination` after GVN fn subexpression_elimination(_1: u64, _2: u64, _3: u64) -> () { debug x => _1; debug y => _2; debug z => _3; let mut _0: (); let _4: (); let mut _5: u64; let mut _6: u64; let mut _7: u64; let _8: (); let mut _9: u64; let mut _10: u64; let mut _11: u64; let _12: (); let mut _13: u64; let mut _14: u64; let mut _15: u64; let _16: (); let mut _17: u64; let mut _18: u64; let mut _19: u64; let mut _20: bool; let _21: (); let mut _22: u64; let mut _23: u64; let mut _24: u64; let mut _25: bool; let _26: (); let mut _27: u64; let mut _28: u64; let mut _29: u64; let _30: (); let mut _31: u64; let mut _32: u64; let mut _33: u64; let _34: (); let mut _35: u64; let mut _36: u64; let mut _37: u64; let _38: (); let mut _39: u64; let mut _40: u64; let mut _41: u64; let _42: (); let mut _43: u64; let mut _44: u64; let mut _45: u64; let _46: (); let mut _47: u32; let mut _48: u64; let _49: (); let mut _50: f32; let mut _51: u64; let _52: (); let mut _53: S; let mut _54: u64; let _55: (); let mut _56: u64; let mut _57: S; let mut _58: u64; let _59: (); let mut _60: u64; let mut _61: u64; let mut _62: u64; let mut _63: u64; let mut _64: u64; let _65: (); let mut _66: u64; let mut _67: u64; let mut _68: u64; let mut _69: u64; let mut _70: u64; let _71: (); let mut _72: u64; let mut _73: u64; let mut _74: u64; let mut _75: u64; let mut _76: u64; let _77: (); let mut _78: u64; let mut _79: u64; let mut _80: u64; let mut _81: u64; let mut _82: bool; let mut _83: u64; let _84: (); let mut _85: u64; let mut _86: u64; let mut _87: u64; let mut _88: u64; let mut _89: bool; let mut _90: u64; let _91: (); let mut _92: u64; let mut _93: u64; let mut _94: u64; let mut _95: u64; let mut _96: u64; let _97: (); let mut _98: u64; let mut _99: u64; let mut _100: u64; let mut _101: u64; let mut _102: u64; let _103: (); let mut _104: u64; let mut _105: u64; let mut _106: u64; let mut _107: u64; let mut _108: u64; let _109: (); let mut _110: u64; let mut _111: u64; let mut _112: u64; let mut _113: u64; let mut _114: u64; let _115: (); let mut _116: u64; let mut _117: u64; let mut _118: u64; let mut _119: u64; let mut _120: u64; let _121: (); let mut _122: S; let mut _123: u64; let _124: (); let mut _125: u64; let mut _126: S; let mut _127: u64; let _128: &u64; let _129: (); let mut _130: u64; let mut _131: u64; let mut _132: u64; let _133: (); let mut _134: u64; let mut _135: u64; let mut _136: u64; let _138: (); let mut _139: u64; let mut _140: u64; let mut _141: u64; let _142: (); let mut _143: u64; let mut _144: u64; let mut _145: u64; let _146: (); let _148: (); let mut _149: u64; let mut _150: u64; let mut _151: u64; let _152: (); let mut _153: u64; let mut _154: u64; let mut _155: u64; let _157: (); let mut _158: u64; let mut _159: u64; let mut _160: u64; let _161: (); let mut _162: u64; let mut _163: u64; let mut _164: u64; let _166: (); let mut _167: u64; let mut _168: u64; let mut _169: u64; let _170: (); let mut _171: u64; let mut _172: u64; let mut _173: u64; scope 1 { debug a => _128; let _137: &mut u64; scope 2 { debug b => _137; let _165: &u64; scope 3 { let _147: *const u64; scope 4 { debug c => _147; let _156: *mut u64; scope 5 { debug d => _156; } } } scope 6 { debug e => _165; } } } bb0: { StorageLive(_4); - StorageLive(_5); - StorageLive(_6); - _6 = _1; - StorageLive(_7); - _7 = _2; - _5 = Add(move _6, move _7); - StorageDead(_7); - StorageDead(_6); - _4 = opaque::(move _5) -> [return: bb1, unwind continue]; + _5 = Add(_1, _2); + _4 = opaque::(_5) -> [return: bb1, unwind continue]; } bb1: { - StorageDead(_5); StorageDead(_4); StorageLive(_8); - StorageLive(_9); - StorageLive(_10); - _10 = _1; - StorageLive(_11); - _11 = _2; - _9 = Mul(move _10, move _11); - StorageDead(_11); - StorageDead(_10); - _8 = opaque::(move _9) -> [return: bb2, unwind continue]; + _9 = Mul(_1, _2); + _8 = opaque::(_9) -> [return: bb2, unwind continue]; } bb2: { - StorageDead(_9); StorageDead(_8); StorageLive(_12); - StorageLive(_13); - StorageLive(_14); - _14 = _1; - StorageLive(_15); - _15 = _2; - _13 = Sub(move _14, move _15); - StorageDead(_15); - StorageDead(_14); - _12 = opaque::(move _13) -> [return: bb3, unwind continue]; + _13 = Sub(_1, _2); + _12 = opaque::(_13) -> [return: bb3, unwind continue]; } bb3: { - StorageDead(_13); StorageDead(_12); StorageLive(_16); - StorageLive(_17); - StorageLive(_18); - _18 = _1; - StorageLive(_19); - _19 = _2; - _20 = Eq(_19, const 0_u64); - assert(!move _20, "attempt to divide `{}` by zero", _18) -> [success: bb4, unwind continue]; + _20 = Eq(_2, const 0_u64); + assert(!_20, "attempt to divide `{}` by zero", _1) -> [success: bb4, unwind continue]; } bb4: { - _17 = Div(move _18, move _19); - StorageDead(_19); - StorageDead(_18); - _16 = opaque::(move _17) -> [return: bb5, unwind continue]; + _17 = Div(_1, _2); + _16 = opaque::(_17) -> [return: bb5, unwind continue]; } bb5: { - StorageDead(_17); StorageDead(_16); StorageLive(_21); - StorageLive(_22); - StorageLive(_23); - _23 = _1; - StorageLive(_24); - _24 = _2; - _25 = Eq(_24, const 0_u64); - assert(!move _25, "attempt to calculate the remainder of `{}` with a divisor of zero", _23) -> [success: bb6, unwind continue]; + assert(!_20, "attempt to calculate the remainder of `{}` with a divisor of zero", _1) -> [success: bb6, unwind continue]; } bb6: { - _22 = Rem(move _23, move _24); - StorageDead(_24); - StorageDead(_23); - _21 = opaque::(move _22) -> [return: bb7, unwind continue]; + _22 = Rem(_1, _2); + _21 = opaque::(_22) -> [return: bb7, unwind continue]; } bb7: { - StorageDead(_22); StorageDead(_21); StorageLive(_26); - StorageLive(_27); - StorageLive(_28); - _28 = _1; - StorageLive(_29); - _29 = _2; - _27 = BitAnd(move _28, move _29); - StorageDead(_29); - StorageDead(_28); - _26 = opaque::(move _27) -> [return: bb8, unwind continue]; + _27 = BitAnd(_1, _2); + _26 = opaque::(_27) -> [return: bb8, unwind continue]; } bb8: { - StorageDead(_27); StorageDead(_26); StorageLive(_30); - StorageLive(_31); - StorageLive(_32); - _32 = _1; - StorageLive(_33); - _33 = _2; - _31 = BitOr(move _32, move _33); - StorageDead(_33); - StorageDead(_32); - _30 = opaque::(move _31) -> [return: bb9, unwind continue]; + _31 = BitOr(_1, _2); + _30 = opaque::(_31) -> [return: bb9, unwind continue]; } bb9: { - StorageDead(_31); StorageDead(_30); StorageLive(_34); - StorageLive(_35); - StorageLive(_36); - _36 = _1; - StorageLive(_37); - _37 = _2; - _35 = BitXor(move _36, move _37); - StorageDead(_37); - StorageDead(_36); - _34 = opaque::(move _35) -> [return: bb10, unwind continue]; + _35 = BitXor(_1, _2); + _34 = opaque::(_35) -> [return: bb10, unwind continue]; } bb10: { - StorageDead(_35); StorageDead(_34); StorageLive(_38); - StorageLive(_39); - StorageLive(_40); - _40 = _1; - StorageLive(_41); - _41 = _2; - _39 = Shl(move _40, move _41); - StorageDead(_41); - StorageDead(_40); - _38 = opaque::(move _39) -> [return: bb11, unwind continue]; + _39 = Shl(_1, _2); + _38 = opaque::(_39) -> [return: bb11, unwind continue]; } bb11: { - StorageDead(_39); StorageDead(_38); StorageLive(_42); - StorageLive(_43); - StorageLive(_44); - _44 = _1; - StorageLive(_45); - _45 = _2; - _43 = Shr(move _44, move _45); - StorageDead(_45); - StorageDead(_44); - _42 = opaque::(move _43) -> [return: bb12, unwind continue]; + _43 = Shr(_1, _2); + _42 = opaque::(_43) -> [return: bb12, unwind continue]; } bb12: { - StorageDead(_43); StorageDead(_42); StorageLive(_46); StorageLive(_47); - StorageLive(_48); - _48 = _1; - _47 = move _48 as u32 (IntToInt); - StorageDead(_48); + _47 = _1 as u32 (IntToInt); _46 = opaque::(move _47) -> [return: bb13, unwind continue]; } bb13: { StorageDead(_47); StorageDead(_46); StorageLive(_49); StorageLive(_50); - StorageLive(_51); - _51 = _1; - _50 = move _51 as f32 (IntToFloat); - StorageDead(_51); + _50 = _1 as f32 (IntToFloat); _49 = opaque::(move _50) -> [return: bb14, unwind continue]; } bb14: { StorageDead(_50); StorageDead(_49); StorageLive(_52); - StorageLive(_53); - StorageLive(_54); - _54 = _1; - _53 = S::(move _54); - StorageDead(_54); - _52 = opaque::>(move _53) -> [return: bb15, unwind continue]; + _53 = S::(_1); + _52 = opaque::>(_53) -> [return: bb15, unwind continue]; } bb15: { - StorageDead(_53); StorageDead(_52); StorageLive(_55); - StorageLive(_56); - StorageLive(_57); - StorageLive(_58); - _58 = _1; - _57 = S::(move _58); - StorageDead(_58); - _56 = (_57.0: u64); - _55 = opaque::(move _56) -> [return: bb16, unwind continue]; + _56 = (_53.0: u64); + _55 = opaque::(_56) -> [return: bb16, unwind continue]; } bb16: { - StorageDead(_56); - StorageDead(_57); StorageDead(_55); StorageLive(_59); StorageLive(_60); - StorageLive(_61); - StorageLive(_62); - _62 = _1; - StorageLive(_63); - _63 = _2; - _61 = Add(move _62, move _63); - StorageDead(_63); - StorageDead(_62); StorageLive(_64); _64 = _3; - _60 = Add(move _61, move _64); + _60 = Add(_5, move _64); StorageDead(_64); - StorageDead(_61); _59 = opaque::(move _60) -> [return: bb17, unwind continue]; } bb17: { StorageDead(_60); StorageDead(_59); StorageLive(_65); StorageLive(_66); - StorageLive(_67); - StorageLive(_68); - _68 = _1; - StorageLive(_69); - _69 = _2; - _67 = Mul(move _68, move _69); - StorageDead(_69); - StorageDead(_68); StorageLive(_70); _70 = _3; - _66 = Add(move _67, move _70); + _66 = Add(_9, move _70); StorageDead(_70); - StorageDead(_67); _65 = opaque::(move _66) -> [return: bb18, unwind continue]; } bb18: { StorageDead(_66); StorageDead(_65); StorageLive(_71); StorageLive(_72); - StorageLive(_73); - StorageLive(_74); - _74 = _1; - StorageLive(_75); - _75 = _2; - _73 = Sub(move _74, move _75); - StorageDead(_75); - StorageDead(_74); StorageLive(_76); _76 = _3; - _72 = Add(move _73, move _76); + _72 = Add(_13, move _76); StorageDead(_76); - StorageDead(_73); _71 = opaque::(move _72) -> [return: bb19, unwind continue]; } bb19: { StorageDead(_72); StorageDead(_71); StorageLive(_77); StorageLive(_78); - StorageLive(_79); - StorageLive(_80); - _80 = _1; - StorageLive(_81); - _81 = _2; - _82 = Eq(_81, const 0_u64); - assert(!move _82, "attempt to divide `{}` by zero", _80) -> [success: bb20, unwind continue]; + assert(!_20, "attempt to divide `{}` by zero", _1) -> [success: bb20, unwind continue]; } bb20: { - _79 = Div(move _80, move _81); - StorageDead(_81); - StorageDead(_80); StorageLive(_83); _83 = _3; - _78 = Add(move _79, move _83); + _78 = Add(_17, move _83); StorageDead(_83); - StorageDead(_79); _77 = opaque::(move _78) -> [return: bb21, unwind continue]; } bb21: { StorageDead(_78); StorageDead(_77); StorageLive(_84); StorageLive(_85); - StorageLive(_86); - StorageLive(_87); - _87 = _1; - StorageLive(_88); - _88 = _2; - _89 = Eq(_88, const 0_u64); - assert(!move _89, "attempt to calculate the remainder of `{}` with a divisor of zero", _87) -> [success: bb22, unwind continue]; + assert(!_20, "attempt to calculate the remainder of `{}` with a divisor of zero", _1) -> [success: bb22, unwind continue]; } bb22: { - _86 = Rem(move _87, move _88); - StorageDead(_88); - StorageDead(_87); StorageLive(_90); _90 = _3; - _85 = Add(move _86, move _90); + _85 = Add(_22, move _90); StorageDead(_90); - StorageDead(_86); _84 = opaque::(move _85) -> [return: bb23, unwind continue]; } bb23: { StorageDead(_85); StorageDead(_84); StorageLive(_91); StorageLive(_92); - StorageLive(_93); - StorageLive(_94); - _94 = _1; - StorageLive(_95); - _95 = _2; - _93 = BitAnd(move _94, move _95); - StorageDead(_95); - StorageDead(_94); StorageLive(_96); _96 = _3; - _92 = Add(move _93, move _96); + _92 = Add(_27, move _96); StorageDead(_96); - StorageDead(_93); _91 = opaque::(move _92) -> [return: bb24, unwind continue]; } bb24: { StorageDead(_92); StorageDead(_91); StorageLive(_97); StorageLive(_98); - StorageLive(_99); - StorageLive(_100); - _100 = _1; - StorageLive(_101); - _101 = _2; - _99 = BitOr(move _100, move _101); - StorageDead(_101); - StorageDead(_100); StorageLive(_102); _102 = _3; - _98 = Add(move _99, move _102); + _98 = Add(_31, move _102); StorageDead(_102); - StorageDead(_99); _97 = opaque::(move _98) -> [return: bb25, unwind continue]; } bb25: { StorageDead(_98); StorageDead(_97); StorageLive(_103); StorageLive(_104); - StorageLive(_105); - StorageLive(_106); - _106 = _1; - StorageLive(_107); - _107 = _2; - _105 = BitXor(move _106, move _107); - StorageDead(_107); - StorageDead(_106); StorageLive(_108); _108 = _3; - _104 = Add(move _105, move _108); + _104 = Add(_35, move _108); StorageDead(_108); - StorageDead(_105); _103 = opaque::(move _104) -> [return: bb26, unwind continue]; } bb26: { StorageDead(_104); StorageDead(_103); StorageLive(_109); StorageLive(_110); - StorageLive(_111); - StorageLive(_112); - _112 = _1; - StorageLive(_113); - _113 = _2; - _111 = Shl(move _112, move _113); - StorageDead(_113); - StorageDead(_112); StorageLive(_114); _114 = _3; - _110 = Add(move _111, move _114); + _110 = Add(_39, move _114); StorageDead(_114); - StorageDead(_111); _109 = opaque::(move _110) -> [return: bb27, unwind continue]; } bb27: { StorageDead(_110); StorageDead(_109); StorageLive(_115); StorageLive(_116); - StorageLive(_117); - StorageLive(_118); - _118 = _1; - StorageLive(_119); - _119 = _2; - _117 = Shr(move _118, move _119); - StorageDead(_119); - StorageDead(_118); StorageLive(_120); _120 = _3; - _116 = Add(move _117, move _120); + _116 = Add(_43, move _120); StorageDead(_120); - StorageDead(_117); _115 = opaque::(move _116) -> [return: bb28, unwind continue]; } bb28: { StorageDead(_116); StorageDead(_115); StorageLive(_121); - StorageLive(_122); - StorageLive(_123); - _123 = _1; - _122 = S::(move _123); - StorageDead(_123); - _121 = opaque::>(move _122) -> [return: bb29, unwind continue]; + _121 = opaque::>(_53) -> [return: bb29, unwind continue]; } bb29: { - StorageDead(_122); StorageDead(_121); StorageLive(_124); - StorageLive(_125); - StorageLive(_126); - StorageLive(_127); - _127 = _1; - _126 = S::(move _127); - StorageDead(_127); - _125 = (_126.0: u64); - _124 = opaque::(move _125) -> [return: bb30, unwind continue]; + _124 = opaque::(_56) -> [return: bb30, unwind continue]; } bb30: { - StorageDead(_125); - StorageDead(_126); StorageDead(_124); StorageLive(_128); _128 = &_3; StorageLive(_129); - StorageLive(_130); - StorageLive(_131); _131 = (*_128); - StorageLive(_132); - _132 = _1; - _130 = Add(move _131, move _132); - StorageDead(_132); - StorageDead(_131); - _129 = opaque::(move _130) -> [return: bb31, unwind continue]; + _130 = Add(_131, _1); + _129 = opaque::(_130) -> [return: bb31, unwind continue]; } bb31: { - StorageDead(_130); StorageDead(_129); StorageLive(_133); - StorageLive(_134); - StorageLive(_135); - _135 = (*_128); - StorageLive(_136); - _136 = _1; - _134 = Add(move _135, move _136); - StorageDead(_136); - StorageDead(_135); - _133 = opaque::(move _134) -> [return: bb32, unwind continue]; + _133 = opaque::(_130) -> [return: bb32, unwind continue]; } bb32: { - StorageDead(_134); StorageDead(_133); StorageLive(_137); _137 = &mut _3; StorageLive(_138); StorageLive(_139); StorageLive(_140); _140 = (*_137); - StorageLive(_141); - _141 = _1; - _139 = Add(move _140, move _141); - StorageDead(_141); + _139 = Add(move _140, _1); StorageDead(_140); _138 = opaque::(move _139) -> [return: bb33, unwind continue]; } bb33: { StorageDead(_139); StorageDead(_138); StorageLive(_142); StorageLive(_143); StorageLive(_144); _144 = (*_137); - StorageLive(_145); - _145 = _1; - _143 = Add(move _144, move _145); - StorageDead(_145); + _143 = Add(move _144, _1); StorageDead(_144); _142 = opaque::(move _143) -> [return: bb34, unwind continue]; } bb34: { StorageDead(_143); StorageDead(_142); - StorageLive(_146); StorageLive(_147); _147 = &raw const _3; StorageLive(_148); StorageLive(_149); StorageLive(_150); _150 = (*_147); - StorageLive(_151); - _151 = _1; - _149 = Add(move _150, move _151); - StorageDead(_151); + _149 = Add(move _150, _1); StorageDead(_150); _148 = opaque::(move _149) -> [return: bb35, unwind continue]; } bb35: { StorageDead(_149); StorageDead(_148); StorageLive(_152); StorageLive(_153); StorageLive(_154); _154 = (*_147); - StorageLive(_155); - _155 = _1; - _153 = Add(move _154, move _155); - StorageDead(_155); + _153 = Add(move _154, _1); StorageDead(_154); _152 = opaque::(move _153) -> [return: bb36, unwind continue]; } bb36: { StorageDead(_153); StorageDead(_152); StorageLive(_156); _156 = &raw mut _3; StorageLive(_157); StorageLive(_158); StorageLive(_159); _159 = (*_156); - StorageLive(_160); - _160 = _1; - _158 = Add(move _159, move _160); - StorageDead(_160); + _158 = Add(move _159, _1); StorageDead(_159); _157 = opaque::(move _158) -> [return: bb37, unwind continue]; } bb37: { StorageDead(_158); StorageDead(_157); StorageLive(_161); StorageLive(_162); StorageLive(_163); _163 = (*_156); - StorageLive(_164); - _164 = _1; - _162 = Add(move _163, move _164); - StorageDead(_164); + _162 = Add(move _163, _1); StorageDead(_163); _161 = opaque::(move _162) -> [return: bb38, unwind continue]; } bb38: { StorageDead(_162); StorageDead(_161); - _146 = const (); StorageDead(_156); StorageDead(_147); - StorageDead(_146); StorageLive(_165); _165 = &_3; StorageLive(_166); - StorageLive(_167); - StorageLive(_168); _168 = (*_165); - StorageLive(_169); - _169 = _1; - _167 = Add(move _168, move _169); - StorageDead(_169); - StorageDead(_168); - _166 = opaque::(move _167) -> [return: bb39, unwind continue]; + _167 = Add(_168, _1); + _166 = opaque::(_167) -> [return: bb39, unwind continue]; } bb39: { - StorageDead(_167); StorageDead(_166); StorageLive(_170); - StorageLive(_171); - StorageLive(_172); - _172 = (*_165); - StorageLive(_173); - _173 = _1; - _171 = Add(move _172, move _173); - StorageDead(_173); - StorageDead(_172); - _170 = opaque::(move _171) -> [return: bb40, unwind continue]; + _170 = opaque::(_167) -> [return: bb40, unwind continue]; } bb40: { - StorageDead(_171); StorageDead(_170); _0 = const (); StorageDead(_165); StorageDead(_137); StorageDead(_128); return; } }