This repository was archived by the owner on May 28, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 2 files changed +168
-0
lines changed
tests/mir-opt/pre-codegen Expand file tree Collapse file tree 2 files changed +168
-0
lines changed Original file line number Diff line number Diff line change 1+ // skip-filecheck
2+ //@ compile-flags: -O -Zmir-opt-level=2 -Cdebuginfo=0
3+
4+ #![ crate_type = "lib" ]
5+
6+ #[ derive( PartialOrd , PartialEq ) ]
7+ pub struct MultiField ( char , i16 ) ;
8+
9+ // EMIT_MIR derived_ord.{impl#0}-partial_cmp.PreCodegen.after.mir
Original file line number Diff line number Diff line change 1+ // MIR for `<impl at $DIR/derived_ord.rs:6:10 : 6:20>::partial_cmp` after PreCodegen
2+
3+ fn <impl at $DIR/derived_ord.rs:6:10 : 6:20>::partial_cmp(_1: &MultiField, _2: &MultiField) -> Option<std::cmp::Ordering> {
4+ debug self => _1;
5+ debug other => _2;
6+ let mut _0 : std::option::Option<std::cmp::Ordering>;
7+ let mut _3 : &char;
8+ let mut _4 : &char;
9+ let mut _10 : std::option::Option<std::cmp::Ordering>;
10+ let mut _11 : &i16;
11+ let mut _12 : &i16;
12+ let _18 : std::option::Option<std::cmp::Ordering>;
13+ scope 1 {
14+ debug cmp => _18;
15+ }
16+ scope 2 (inlined std::cmp::impls::<impl PartialOrd for char>::partial_cmp) {
17+ debug self => _3;
18+ debug other => _4;
19+ let mut _9 : std::cmp::Ordering;
20+ scope 3 (inlined std::cmp::impls::<impl Ord for char>::cmp) {
21+ debug self => _3;
22+ debug other => _4;
23+ let mut _5 : char;
24+ let mut _6 : char;
25+ let mut _7 : bool;
26+ let mut _8 : bool;
27+ }
28+ }
29+ scope 4 (inlined std::cmp::impls::<impl PartialOrd for i16>::partial_cmp) {
30+ debug self => _11;
31+ debug other => _12;
32+ let mut _17 : std::cmp::Ordering;
33+ scope 5 (inlined std::cmp::impls::<impl Ord for i16>::cmp) {
34+ debug self => _11;
35+ debug other => _12;
36+ let mut _13 : i16;
37+ let mut _14 : i16;
38+ let mut _15 : bool;
39+ let mut _16 : bool;
40+ }
41+ }
42+
43+ bb0 : {
44+ StorageLive(_3);
45+ _3 = &((*_1).0 : char);
46+ StorageLive(_4);
47+ _4 = &((*_2).0 : char);
48+ StorageLive(_9);
49+ StorageLive(_5);
50+ StorageLive(_6);
51+ StorageLive(_7);
52+ _5 = ((*_1).0 : char);
53+ _6 = ((*_2).0 : char);
54+ _7 = Lt(_5, _6);
55+ switchInt(move _7) -> [0 : bb1, otherwise: bb10];
56+ }
57+
58+ bb1 : {
59+ StorageLive(_8);
60+ _8 = Eq(_5, _6);
61+ switchInt(move _8) -> [0 : bb2, otherwise: bb3];
62+ }
63+
64+ bb2 : {
65+ _9 = const Greater;
66+ StorageDead(_8);
67+ StorageDead(_7);
68+ StorageDead(_6);
69+ StorageDead(_5);
70+ _10 = Option::<std::cmp::Ordering>::Some(move _9);
71+ StorageDead(_9);
72+ StorageDead(_4);
73+ StorageDead(_3);
74+ goto -> bb11;
75+ }
76+
77+ bb3 : {
78+ StorageDead(_8);
79+ StorageDead(_7);
80+ StorageDead(_6);
81+ StorageDead(_5);
82+ StorageDead(_9);
83+ StorageDead(_4);
84+ StorageDead(_3);
85+ StorageLive(_11);
86+ _11 = &((*_1).1 : i16);
87+ StorageLive(_12);
88+ _12 = &((*_2).1 : i16);
89+ StorageLive(_17);
90+ StorageLive(_13);
91+ StorageLive(_14);
92+ StorageLive(_15);
93+ _13 = ((*_1).1 : i16);
94+ _14 = ((*_2).1 : i16);
95+ _15 = Lt(_13, _14);
96+ switchInt(move _15) -> [0 : bb4, otherwise: bb8];
97+ }
98+
99+ bb4 : {
100+ StorageLive(_16);
101+ _16 = Eq(_13, _14);
102+ switchInt(move _16) -> [0 : bb5, otherwise: bb6];
103+ }
104+
105+ bb5 : {
106+ _17 = const Greater;
107+ goto -> bb7;
108+ }
109+
110+ bb6 : {
111+ _17 = const Equal;
112+ goto -> bb7;
113+ }
114+
115+ bb7 : {
116+ StorageDead(_16);
117+ goto -> bb9;
118+ }
119+
120+ bb8 : {
121+ _17 = const Less;
122+ goto -> bb9;
123+ }
124+
125+ bb9 : {
126+ StorageDead(_15);
127+ StorageDead(_14);
128+ StorageDead(_13);
129+ _0 = Option::<std::cmp::Ordering>::Some(move _17);
130+ StorageDead(_17);
131+ StorageDead(_12);
132+ StorageDead(_11);
133+ goto -> bb12;
134+ }
135+
136+ bb10 : {
137+ _9 = const Less;
138+ StorageDead(_7);
139+ StorageDead(_6);
140+ StorageDead(_5);
141+ _10 = Option::<std::cmp::Ordering>::Some(move _9);
142+ StorageDead(_9);
143+ StorageDead(_4);
144+ StorageDead(_3);
145+ goto -> bb11;
146+ }
147+
148+ bb11 : {
149+ StorageLive(_18);
150+ _18 = _10;
151+ _0 = _10;
152+ StorageDead(_18);
153+ goto -> bb12;
154+ }
155+
156+ bb12 : {
157+ return;
158+ }
159+ }
You can’t perform that action at this time.
0 commit comments