Skip to content

Commit 507666c

Browse files
committed
Add a pre-codegen test
1 parent 53231e0 commit 507666c

6 files changed

+232
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// MIR for `cmp_has_float` after PreCodegen
2+
3+
fn cmp_has_float(_1: &HasFloat, _2: &HasFloat) -> bool {
4+
debug a => _1;
5+
debug b => _2;
6+
let mut _0: bool;
7+
scope 1 (inlined std::cmp::impls::<impl PartialEq for &HasFloat>::eq) {
8+
scope 2 (inlined <HasFloat as PartialEq>::eq) {
9+
let mut _3: f32;
10+
let mut _4: f32;
11+
let mut _5: bool;
12+
let mut _6: u32;
13+
let mut _7: u32;
14+
}
15+
}
16+
17+
bb0: {
18+
StorageLive(_5);
19+
StorageLive(_3);
20+
_3 = copy ((*_1).0: f32);
21+
StorageLive(_4);
22+
_4 = copy ((*_2).0: f32);
23+
_5 = Eq(move _3, move _4);
24+
switchInt(move _5) -> [0: bb1, otherwise: bb2];
25+
}
26+
27+
bb1: {
28+
StorageDead(_4);
29+
StorageDead(_3);
30+
_0 = const false;
31+
goto -> bb3;
32+
}
33+
34+
bb2: {
35+
StorageDead(_4);
36+
StorageDead(_3);
37+
StorageLive(_6);
38+
_6 = copy ((*_1).1: u32);
39+
StorageLive(_7);
40+
_7 = copy ((*_2).1: u32);
41+
_0 = Eq(move _6, move _7);
42+
StorageDead(_7);
43+
StorageDead(_6);
44+
goto -> bb3;
45+
}
46+
47+
bb3: {
48+
StorageDead(_5);
49+
return;
50+
}
51+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// MIR for `cmp_has_padding` after PreCodegen
2+
3+
fn cmp_has_padding(_1: &HasPadding, _2: &HasPadding) -> bool {
4+
debug a => _1;
5+
debug b => _2;
6+
let mut _0: bool;
7+
scope 1 (inlined std::cmp::impls::<impl PartialEq for &HasPadding>::eq) {
8+
scope 2 (inlined <HasPadding as PartialEq>::eq) {
9+
let mut _3: u8;
10+
let mut _4: u8;
11+
let mut _5: bool;
12+
let mut _6: u16;
13+
let mut _7: u16;
14+
}
15+
}
16+
17+
bb0: {
18+
StorageLive(_5);
19+
StorageLive(_3);
20+
_3 = copy ((*_1).0: u8);
21+
StorageLive(_4);
22+
_4 = copy ((*_2).0: u8);
23+
_5 = Eq(move _3, move _4);
24+
switchInt(move _5) -> [0: bb1, otherwise: bb2];
25+
}
26+
27+
bb1: {
28+
StorageDead(_4);
29+
StorageDead(_3);
30+
_0 = const false;
31+
goto -> bb3;
32+
}
33+
34+
bb2: {
35+
StorageDead(_4);
36+
StorageDead(_3);
37+
StorageLive(_6);
38+
_6 = copy ((*_1).1: u16);
39+
StorageLive(_7);
40+
_7 = copy ((*_2).1: u16);
41+
_0 = Eq(move _6, move _7);
42+
StorageDead(_7);
43+
StorageDead(_6);
44+
goto -> bb3;
45+
}
46+
47+
bb3: {
48+
StorageDead(_5);
49+
return;
50+
}
51+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// MIR for `cmp_no_padding` after PreCodegen
2+
3+
fn cmp_no_padding(_1: &NoPadding, _2: &NoPadding) -> bool {
4+
debug a => _1;
5+
debug b => _2;
6+
let mut _0: bool;
7+
scope 1 (inlined std::cmp::impls::<impl PartialEq for &NoPadding>::eq) {
8+
scope 2 (inlined <NoPadding as PartialEq>::eq) {
9+
}
10+
}
11+
12+
bb0: {
13+
_0 = compare_bitwise::<NoPadding>(move _1, move _2) -> [return: bb1, unwind unreachable];
14+
}
15+
16+
bb1: {
17+
return;
18+
}
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// MIR for `cmp_no_padding_after_opt` after PreCodegen
2+
3+
fn cmp_no_padding_after_opt(_1: &NoPaddingAfterOpt, _2: &NoPaddingAfterOpt) -> bool {
4+
debug a => _1;
5+
debug b => _2;
6+
let mut _0: bool;
7+
scope 1 (inlined std::cmp::impls::<impl PartialEq for &NoPaddingAfterOpt>::eq) {
8+
scope 2 (inlined <NoPaddingAfterOpt as PartialEq>::eq) {
9+
}
10+
}
11+
12+
bb0: {
13+
_0 = compare_bitwise::<NoPaddingAfterOpt>(move _1, move _2) -> [return: bb1, unwind unreachable];
14+
}
15+
16+
bb1: {
17+
return;
18+
}
19+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// MIR for `cmp_no_padding_array` after PreCodegen
2+
3+
fn cmp_no_padding_array(_1: &NoPaddingArray, _2: &NoPaddingArray) -> bool {
4+
debug a => _1;
5+
debug b => _2;
6+
let mut _0: bool;
7+
scope 1 (inlined std::cmp::impls::<impl PartialEq for &NoPaddingArray>::eq) {
8+
scope 2 (inlined <NoPaddingArray as PartialEq>::eq) {
9+
scope 3 (inlined array::equality::<impl PartialEq for [u16; 2]>::eq) {
10+
scope 4 (inlined <u16 as array::equality::SpecArrayEq<u16, 2>>::spec_eq) {
11+
}
12+
}
13+
}
14+
}
15+
16+
bb0: {
17+
_0 = compare_bitwise::<NoPaddingArray>(move _1, move _2) -> [return: bb1, unwind unreachable];
18+
}
19+
20+
bb1: {
21+
return;
22+
}
23+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
//@ compile-flags: -O -Zmir-opt-level=2 -Cdebuginfo=0
2+
3+
#![crate_type = "lib"]
4+
5+
#[derive(PartialEq)]
6+
pub struct NoPadding {
7+
x: u16,
8+
y: u16,
9+
}
10+
11+
// CHECK-LABEL: fn cmp_no_padding(
12+
fn cmp_no_padding(a: &NoPadding, b: &NoPadding) -> bool {
13+
// CHECK: compare_bitwise::<NoPadding>(
14+
a == b
15+
}
16+
// EMIT_MIR derived_partialeq.cmp_no_padding.PreCodegen.after.mir
17+
18+
#[derive(PartialEq)]
19+
pub struct NoPaddingArray {
20+
x: [u16; 2],
21+
y: u16,
22+
}
23+
24+
// CHECK-LABEL: fn cmp_no_padding_array(
25+
fn cmp_no_padding_array(a: &NoPaddingArray, b: &NoPaddingArray) -> bool {
26+
// CHECK: compare_bitwise::<NoPaddingArray>(
27+
a == b
28+
}
29+
// EMIT_MIR derived_partialeq.cmp_no_padding_array.PreCodegen.after.mir
30+
31+
#[derive(PartialEq)]
32+
pub struct NoPaddingAfterOpt {
33+
x: u8,
34+
y: u16,
35+
z: u8,
36+
}
37+
38+
// CHECK-LABEL: fn cmp_no_padding_after_opt(
39+
fn cmp_no_padding_after_opt(a: &NoPaddingAfterOpt, b: &NoPaddingAfterOpt) -> bool {
40+
// CHECK: compare_bitwise::<NoPaddingAfterOpt>(
41+
a == b
42+
}
43+
// EMIT_MIR derived_partialeq.cmp_no_padding_after_opt.PreCodegen.after.mir
44+
45+
#[derive(PartialEq)]
46+
pub struct HasPadding {
47+
x: u8,
48+
y: u16,
49+
}
50+
51+
// CHECK-LABEL: fn cmp_has_padding(
52+
fn cmp_has_padding(a: &HasPadding, b: &HasPadding) -> bool {
53+
// CHECK-NOT: compare_bitwise
54+
a == b
55+
}
56+
// EMIT_MIR derived_partialeq.cmp_has_padding.PreCodegen.after.mir
57+
58+
#[derive(PartialEq)]
59+
pub struct HasFloat {
60+
x: f32,
61+
y: u32,
62+
}
63+
64+
// CHECK-LABEL: fn cmp_has_float(
65+
fn cmp_has_float(a: &HasFloat, b: &HasFloat) -> bool {
66+
// CHECK-NOT: compare_bitwise
67+
a == b
68+
}
69+
// EMIT_MIR derived_partialeq.cmp_has_float.PreCodegen.after.mir

0 commit comments

Comments
 (0)