mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-27 18:57:42 +03:00
Add test.
This commit is contained in:
@@ -0,0 +1,155 @@
|
||||
// MIR for `const_array_len` after built
|
||||
|
||||
fn const_array_len(_1: [T; 5]) -> () {
|
||||
debug x => _1;
|
||||
let mut _0: ();
|
||||
let _6: ();
|
||||
let mut _7: T;
|
||||
let _8: ();
|
||||
let mut _9: T;
|
||||
let _10: ();
|
||||
let mut _11: [T; 2];
|
||||
let _12: ();
|
||||
let mut _13: T;
|
||||
scope 1 {
|
||||
debug a => _2;
|
||||
debug b => _3;
|
||||
debug rest => _4;
|
||||
debug e => _5;
|
||||
let _2: T;
|
||||
let _3: T;
|
||||
let _4: [T; 2];
|
||||
let _5: T;
|
||||
}
|
||||
|
||||
bb0: {
|
||||
PlaceMention(_1);
|
||||
falseEdge -> [real: bb2, imaginary: bb1];
|
||||
}
|
||||
|
||||
bb1: {
|
||||
goto -> bb7;
|
||||
}
|
||||
|
||||
bb2: {
|
||||
StorageLive(_2);
|
||||
_2 = move _1[0 of 5];
|
||||
StorageLive(_3);
|
||||
_3 = move _1[1 of 5];
|
||||
StorageLive(_4);
|
||||
_4 = move _1[2..4];
|
||||
StorageLive(_5);
|
||||
_5 = move _1[4 of 5];
|
||||
StorageLive(_6);
|
||||
StorageLive(_7);
|
||||
_7 = move _2;
|
||||
_6 = opaque::<T>(move _7) -> [return: bb3, unwind: bb17];
|
||||
}
|
||||
|
||||
bb3: {
|
||||
StorageDead(_7);
|
||||
StorageDead(_6);
|
||||
StorageLive(_8);
|
||||
StorageLive(_9);
|
||||
_9 = move _3;
|
||||
_8 = opaque::<T>(move _9) -> [return: bb4, unwind: bb16];
|
||||
}
|
||||
|
||||
bb4: {
|
||||
StorageDead(_9);
|
||||
StorageDead(_8);
|
||||
StorageLive(_10);
|
||||
StorageLive(_11);
|
||||
_11 = move _4;
|
||||
_10 = opaque::<[T; 2]>(move _11) -> [return: bb5, unwind: bb15];
|
||||
}
|
||||
|
||||
bb5: {
|
||||
StorageDead(_11);
|
||||
StorageDead(_10);
|
||||
StorageLive(_12);
|
||||
StorageLive(_13);
|
||||
_13 = move _5;
|
||||
_12 = opaque::<T>(move _13) -> [return: bb6, unwind: bb14];
|
||||
}
|
||||
|
||||
bb6: {
|
||||
StorageDead(_13);
|
||||
StorageDead(_12);
|
||||
_0 = const ();
|
||||
drop(_5) -> [return: bb8, unwind: bb19];
|
||||
}
|
||||
|
||||
bb7: {
|
||||
_0 = const ();
|
||||
goto -> bb12;
|
||||
}
|
||||
|
||||
bb8: {
|
||||
StorageDead(_5);
|
||||
drop(_4) -> [return: bb9, unwind: bb20];
|
||||
}
|
||||
|
||||
bb9: {
|
||||
StorageDead(_4);
|
||||
drop(_3) -> [return: bb10, unwind: bb21];
|
||||
}
|
||||
|
||||
bb10: {
|
||||
StorageDead(_3);
|
||||
drop(_2) -> [return: bb11, unwind: bb22];
|
||||
}
|
||||
|
||||
bb11: {
|
||||
StorageDead(_2);
|
||||
goto -> bb12;
|
||||
}
|
||||
|
||||
bb12: {
|
||||
drop(_1) -> [return: bb13, unwind: bb23];
|
||||
}
|
||||
|
||||
bb13: {
|
||||
return;
|
||||
}
|
||||
|
||||
bb14 (cleanup): {
|
||||
drop(_13) -> [return: bb18, unwind terminate(cleanup)];
|
||||
}
|
||||
|
||||
bb15 (cleanup): {
|
||||
drop(_11) -> [return: bb18, unwind terminate(cleanup)];
|
||||
}
|
||||
|
||||
bb16 (cleanup): {
|
||||
drop(_9) -> [return: bb18, unwind terminate(cleanup)];
|
||||
}
|
||||
|
||||
bb17 (cleanup): {
|
||||
drop(_7) -> [return: bb18, unwind terminate(cleanup)];
|
||||
}
|
||||
|
||||
bb18 (cleanup): {
|
||||
drop(_5) -> [return: bb19, unwind terminate(cleanup)];
|
||||
}
|
||||
|
||||
bb19 (cleanup): {
|
||||
drop(_4) -> [return: bb20, unwind terminate(cleanup)];
|
||||
}
|
||||
|
||||
bb20 (cleanup): {
|
||||
drop(_3) -> [return: bb21, unwind terminate(cleanup)];
|
||||
}
|
||||
|
||||
bb21 (cleanup): {
|
||||
drop(_2) -> [return: bb22, unwind terminate(cleanup)];
|
||||
}
|
||||
|
||||
bb22 (cleanup): {
|
||||
drop(_1) -> [return: bb23, unwind terminate(cleanup)];
|
||||
}
|
||||
|
||||
bb23 (cleanup): {
|
||||
resume;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,155 @@
|
||||
// MIR for `const_array_len` after built
|
||||
|
||||
fn const_array_len(_1: [T; 5]) -> () {
|
||||
debug x => _1;
|
||||
let mut _0: ();
|
||||
let _6: ();
|
||||
let mut _7: T;
|
||||
let _8: ();
|
||||
let mut _9: T;
|
||||
let _10: ();
|
||||
let mut _11: [T; 2];
|
||||
let _12: ();
|
||||
let mut _13: T;
|
||||
scope 1 {
|
||||
debug a => _2;
|
||||
debug b => _3;
|
||||
debug rest => _4;
|
||||
debug e => _5;
|
||||
let _2: T;
|
||||
let _3: T;
|
||||
let _4: [T; 2];
|
||||
let _5: T;
|
||||
}
|
||||
|
||||
bb0: {
|
||||
PlaceMention(_1);
|
||||
falseEdge -> [real: bb2, imaginary: bb1];
|
||||
}
|
||||
|
||||
bb1: {
|
||||
goto -> bb7;
|
||||
}
|
||||
|
||||
bb2: {
|
||||
StorageLive(_2);
|
||||
_2 = move _1[0 of 5];
|
||||
StorageLive(_3);
|
||||
_3 = move _1[1 of 5];
|
||||
StorageLive(_4);
|
||||
_4 = move _1[2..4];
|
||||
StorageLive(_5);
|
||||
_5 = move _1[4 of 5];
|
||||
StorageLive(_6);
|
||||
StorageLive(_7);
|
||||
_7 = move _2;
|
||||
_6 = opaque::<T>(move _7) -> [return: bb3, unwind: bb17];
|
||||
}
|
||||
|
||||
bb3: {
|
||||
StorageDead(_7);
|
||||
StorageDead(_6);
|
||||
StorageLive(_8);
|
||||
StorageLive(_9);
|
||||
_9 = move _3;
|
||||
_8 = opaque::<T>(move _9) -> [return: bb4, unwind: bb16];
|
||||
}
|
||||
|
||||
bb4: {
|
||||
StorageDead(_9);
|
||||
StorageDead(_8);
|
||||
StorageLive(_10);
|
||||
StorageLive(_11);
|
||||
_11 = move _4;
|
||||
_10 = opaque::<[T; 2]>(move _11) -> [return: bb5, unwind: bb15];
|
||||
}
|
||||
|
||||
bb5: {
|
||||
StorageDead(_11);
|
||||
StorageDead(_10);
|
||||
StorageLive(_12);
|
||||
StorageLive(_13);
|
||||
_13 = move _5;
|
||||
_12 = opaque::<T>(move _13) -> [return: bb6, unwind: bb14];
|
||||
}
|
||||
|
||||
bb6: {
|
||||
StorageDead(_13);
|
||||
StorageDead(_12);
|
||||
_0 = const ();
|
||||
drop(_5) -> [return: bb8, unwind: bb19];
|
||||
}
|
||||
|
||||
bb7: {
|
||||
_0 = const ();
|
||||
goto -> bb12;
|
||||
}
|
||||
|
||||
bb8: {
|
||||
StorageDead(_5);
|
||||
drop(_4) -> [return: bb9, unwind: bb20];
|
||||
}
|
||||
|
||||
bb9: {
|
||||
StorageDead(_4);
|
||||
drop(_3) -> [return: bb10, unwind: bb21];
|
||||
}
|
||||
|
||||
bb10: {
|
||||
StorageDead(_3);
|
||||
drop(_2) -> [return: bb11, unwind: bb22];
|
||||
}
|
||||
|
||||
bb11: {
|
||||
StorageDead(_2);
|
||||
goto -> bb12;
|
||||
}
|
||||
|
||||
bb12: {
|
||||
drop(_1) -> [return: bb13, unwind: bb23];
|
||||
}
|
||||
|
||||
bb13: {
|
||||
return;
|
||||
}
|
||||
|
||||
bb14 (cleanup): {
|
||||
drop(_13) -> [return: bb18, unwind terminate(cleanup)];
|
||||
}
|
||||
|
||||
bb15 (cleanup): {
|
||||
drop(_11) -> [return: bb18, unwind terminate(cleanup)];
|
||||
}
|
||||
|
||||
bb16 (cleanup): {
|
||||
drop(_9) -> [return: bb18, unwind terminate(cleanup)];
|
||||
}
|
||||
|
||||
bb17 (cleanup): {
|
||||
drop(_7) -> [return: bb18, unwind terminate(cleanup)];
|
||||
}
|
||||
|
||||
bb18 (cleanup): {
|
||||
drop(_5) -> [return: bb19, unwind terminate(cleanup)];
|
||||
}
|
||||
|
||||
bb19 (cleanup): {
|
||||
drop(_4) -> [return: bb20, unwind terminate(cleanup)];
|
||||
}
|
||||
|
||||
bb20 (cleanup): {
|
||||
drop(_3) -> [return: bb21, unwind terminate(cleanup)];
|
||||
}
|
||||
|
||||
bb21 (cleanup): {
|
||||
drop(_2) -> [return: bb22, unwind terminate(cleanup)];
|
||||
}
|
||||
|
||||
bb22 (cleanup): {
|
||||
drop(_1) -> [return: bb23, unwind terminate(cleanup)];
|
||||
}
|
||||
|
||||
bb23 (cleanup): {
|
||||
resume;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
|
||||
//@ compile-flags: -Zmir-opt-level=0
|
||||
|
||||
fn opaque<T>(x: T) {}
|
||||
|
||||
// EMIT_MIR array_len.const_array_len.built.after.mir
|
||||
fn const_array_len<T>(x: [T; 5]) {
|
||||
// CHECK-LABEL: fn const_array_len(
|
||||
// CHECK-NOT: Len
|
||||
// CHECK-NOT: PtrMetadata
|
||||
// CHECK: = const 5_usize;
|
||||
if let [a, b, rest @ .., e] = x {
|
||||
opaque(a);
|
||||
opaque(b);
|
||||
opaque(rest);
|
||||
opaque(e);
|
||||
}
|
||||
}
|
||||
|
||||
// EMIT_MIR array_len.slice_len.built.after.mir
|
||||
fn slice_len<T>(x: &[T]) {
|
||||
// CHECK-LABEL: fn slice_len(
|
||||
// CHECK-NOT: Len
|
||||
// CHECK: = PtrMetadata(copy _1);
|
||||
if let [a, b, rest @ .., e] = x {
|
||||
opaque(a);
|
||||
opaque(b);
|
||||
opaque(rest);
|
||||
opaque(e);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
// MIR for `slice_len` after built
|
||||
|
||||
fn slice_len(_1: &[T]) -> () {
|
||||
debug x => _1;
|
||||
let mut _0: ();
|
||||
let mut _2: usize;
|
||||
let mut _3: usize;
|
||||
let mut _4: usize;
|
||||
let mut _5: bool;
|
||||
let _10: ();
|
||||
let mut _11: &T;
|
||||
let _12: ();
|
||||
let mut _13: &T;
|
||||
let _14: ();
|
||||
let mut _15: &[T];
|
||||
let _16: ();
|
||||
let mut _17: &T;
|
||||
scope 1 {
|
||||
debug a => _6;
|
||||
debug b => _7;
|
||||
debug rest => _8;
|
||||
debug e => _9;
|
||||
let _6: &T;
|
||||
let _7: &T;
|
||||
let _8: &[T];
|
||||
let _9: &T;
|
||||
}
|
||||
|
||||
bb0: {
|
||||
PlaceMention(_1);
|
||||
_3 = PtrMetadata(copy _1);
|
||||
_2 = move _3;
|
||||
_4 = const 3_usize;
|
||||
_5 = Ge(move _2, move _4);
|
||||
switchInt(move _5) -> [0: bb1, otherwise: bb2];
|
||||
}
|
||||
|
||||
bb1: {
|
||||
goto -> bb9;
|
||||
}
|
||||
|
||||
bb2: {
|
||||
falseEdge -> [real: bb4, imaginary: bb1];
|
||||
}
|
||||
|
||||
bb3: {
|
||||
goto -> bb1;
|
||||
}
|
||||
|
||||
bb4: {
|
||||
StorageLive(_6);
|
||||
_6 = &(*_1)[0 of 3];
|
||||
StorageLive(_7);
|
||||
_7 = &(*_1)[1 of 3];
|
||||
StorageLive(_8);
|
||||
_8 = &(*_1)[2:-1];
|
||||
StorageLive(_9);
|
||||
_9 = &(*_1)[-1 of 3];
|
||||
StorageLive(_10);
|
||||
StorageLive(_11);
|
||||
_11 = copy _6;
|
||||
_10 = opaque::<&T>(move _11) -> [return: bb5, unwind: bb11];
|
||||
}
|
||||
|
||||
bb5: {
|
||||
StorageDead(_11);
|
||||
StorageDead(_10);
|
||||
StorageLive(_12);
|
||||
StorageLive(_13);
|
||||
_13 = copy _7;
|
||||
_12 = opaque::<&T>(move _13) -> [return: bb6, unwind: bb11];
|
||||
}
|
||||
|
||||
bb6: {
|
||||
StorageDead(_13);
|
||||
StorageDead(_12);
|
||||
StorageLive(_14);
|
||||
StorageLive(_15);
|
||||
_15 = copy _8;
|
||||
_14 = opaque::<&[T]>(move _15) -> [return: bb7, unwind: bb11];
|
||||
}
|
||||
|
||||
bb7: {
|
||||
StorageDead(_15);
|
||||
StorageDead(_14);
|
||||
StorageLive(_16);
|
||||
StorageLive(_17);
|
||||
_17 = copy _9;
|
||||
_16 = opaque::<&T>(move _17) -> [return: bb8, unwind: bb11];
|
||||
}
|
||||
|
||||
bb8: {
|
||||
StorageDead(_17);
|
||||
StorageDead(_16);
|
||||
_0 = const ();
|
||||
StorageDead(_9);
|
||||
StorageDead(_8);
|
||||
StorageDead(_7);
|
||||
StorageDead(_6);
|
||||
goto -> bb10;
|
||||
}
|
||||
|
||||
bb9: {
|
||||
_0 = const ();
|
||||
goto -> bb10;
|
||||
}
|
||||
|
||||
bb10: {
|
||||
return;
|
||||
}
|
||||
|
||||
bb11 (cleanup): {
|
||||
resume;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
// MIR for `slice_len` after built
|
||||
|
||||
fn slice_len(_1: &[T]) -> () {
|
||||
debug x => _1;
|
||||
let mut _0: ();
|
||||
let mut _2: usize;
|
||||
let mut _3: usize;
|
||||
let mut _4: usize;
|
||||
let mut _5: bool;
|
||||
let _10: ();
|
||||
let mut _11: &T;
|
||||
let _12: ();
|
||||
let mut _13: &T;
|
||||
let _14: ();
|
||||
let mut _15: &[T];
|
||||
let _16: ();
|
||||
let mut _17: &T;
|
||||
scope 1 {
|
||||
debug a => _6;
|
||||
debug b => _7;
|
||||
debug rest => _8;
|
||||
debug e => _9;
|
||||
let _6: &T;
|
||||
let _7: &T;
|
||||
let _8: &[T];
|
||||
let _9: &T;
|
||||
}
|
||||
|
||||
bb0: {
|
||||
PlaceMention(_1);
|
||||
_3 = PtrMetadata(copy _1);
|
||||
_2 = move _3;
|
||||
_4 = const 3_usize;
|
||||
_5 = Ge(move _2, move _4);
|
||||
switchInt(move _5) -> [0: bb1, otherwise: bb2];
|
||||
}
|
||||
|
||||
bb1: {
|
||||
goto -> bb9;
|
||||
}
|
||||
|
||||
bb2: {
|
||||
falseEdge -> [real: bb4, imaginary: bb1];
|
||||
}
|
||||
|
||||
bb3: {
|
||||
goto -> bb1;
|
||||
}
|
||||
|
||||
bb4: {
|
||||
StorageLive(_6);
|
||||
_6 = &(*_1)[0 of 3];
|
||||
StorageLive(_7);
|
||||
_7 = &(*_1)[1 of 3];
|
||||
StorageLive(_8);
|
||||
_8 = &(*_1)[2:-1];
|
||||
StorageLive(_9);
|
||||
_9 = &(*_1)[-1 of 3];
|
||||
StorageLive(_10);
|
||||
StorageLive(_11);
|
||||
_11 = copy _6;
|
||||
_10 = opaque::<&T>(move _11) -> [return: bb5, unwind: bb11];
|
||||
}
|
||||
|
||||
bb5: {
|
||||
StorageDead(_11);
|
||||
StorageDead(_10);
|
||||
StorageLive(_12);
|
||||
StorageLive(_13);
|
||||
_13 = copy _7;
|
||||
_12 = opaque::<&T>(move _13) -> [return: bb6, unwind: bb11];
|
||||
}
|
||||
|
||||
bb6: {
|
||||
StorageDead(_13);
|
||||
StorageDead(_12);
|
||||
StorageLive(_14);
|
||||
StorageLive(_15);
|
||||
_15 = copy _8;
|
||||
_14 = opaque::<&[T]>(move _15) -> [return: bb7, unwind: bb11];
|
||||
}
|
||||
|
||||
bb7: {
|
||||
StorageDead(_15);
|
||||
StorageDead(_14);
|
||||
StorageLive(_16);
|
||||
StorageLive(_17);
|
||||
_17 = copy _9;
|
||||
_16 = opaque::<&T>(move _17) -> [return: bb8, unwind: bb11];
|
||||
}
|
||||
|
||||
bb8: {
|
||||
StorageDead(_17);
|
||||
StorageDead(_16);
|
||||
_0 = const ();
|
||||
StorageDead(_9);
|
||||
StorageDead(_8);
|
||||
StorageDead(_7);
|
||||
StorageDead(_6);
|
||||
goto -> bb10;
|
||||
}
|
||||
|
||||
bb9: {
|
||||
_0 = const ();
|
||||
goto -> bb10;
|
||||
}
|
||||
|
||||
bb10: {
|
||||
return;
|
||||
}
|
||||
|
||||
bb11 (cleanup): {
|
||||
resume;
|
||||
}
|
||||
}
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
- // MIR for `normN` before InstSimplify-after-simplifycfg
|
||||
+ // MIR for `normN` after InstSimplify-after-simplifycfg
|
||||
|
||||
fn normN(_1: [f32; N]) -> f32 {
|
||||
debug x => _1;
|
||||
let mut _0: f32;
|
||||
let _2: f32;
|
||||
let _3: usize;
|
||||
let mut _4: bool;
|
||||
let _6: usize;
|
||||
let mut _7: bool;
|
||||
let mut _8: f32;
|
||||
let mut _9: f32;
|
||||
let mut _10: f32;
|
||||
let mut _11: f32;
|
||||
let mut _12: f32;
|
||||
let mut _13: f32;
|
||||
scope 1 {
|
||||
debug a => _2;
|
||||
let _5: f32;
|
||||
scope 2 {
|
||||
debug b => _5;
|
||||
}
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_2);
|
||||
StorageLive(_3);
|
||||
_3 = const 0_usize;
|
||||
_4 = Lt(copy _3, const N);
|
||||
assert(move _4, "index out of bounds: the length is {} but the index is {}", const N, copy _3) -> [success: bb1, unwind unreachable];
|
||||
}
|
||||
|
||||
bb1: {
|
||||
_2 = copy _1[_3];
|
||||
StorageDead(_3);
|
||||
StorageLive(_5);
|
||||
StorageLive(_6);
|
||||
_6 = const 1_usize;
|
||||
_7 = Lt(copy _6, const N);
|
||||
assert(move _7, "index out of bounds: the length is {} but the index is {}", const N, copy _6) -> [success: bb2, unwind unreachable];
|
||||
}
|
||||
|
||||
bb2: {
|
||||
_5 = copy _1[_6];
|
||||
StorageDead(_6);
|
||||
StorageLive(_8);
|
||||
StorageLive(_9);
|
||||
_9 = copy _2;
|
||||
StorageLive(_10);
|
||||
_10 = copy _2;
|
||||
_8 = Mul(move _9, move _10);
|
||||
StorageDead(_10);
|
||||
StorageDead(_9);
|
||||
StorageLive(_11);
|
||||
StorageLive(_12);
|
||||
_12 = copy _5;
|
||||
StorageLive(_13);
|
||||
_13 = copy _5;
|
||||
_11 = Mul(move _12, move _13);
|
||||
StorageDead(_13);
|
||||
StorageDead(_12);
|
||||
_0 = Add(move _8, move _11);
|
||||
StorageDead(_11);
|
||||
StorageDead(_8);
|
||||
StorageDead(_5);
|
||||
StorageDead(_2);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
- // MIR for `normN` before InstSimplify-after-simplifycfg
|
||||
+ // MIR for `normN` after InstSimplify-after-simplifycfg
|
||||
|
||||
fn normN(_1: [f32; N]) -> f32 {
|
||||
debug x => _1;
|
||||
let mut _0: f32;
|
||||
let _2: f32;
|
||||
let _3: usize;
|
||||
let mut _4: bool;
|
||||
let _6: usize;
|
||||
let mut _7: bool;
|
||||
let mut _8: f32;
|
||||
let mut _9: f32;
|
||||
let mut _10: f32;
|
||||
let mut _11: f32;
|
||||
let mut _12: f32;
|
||||
let mut _13: f32;
|
||||
scope 1 {
|
||||
debug a => _2;
|
||||
let _5: f32;
|
||||
scope 2 {
|
||||
debug b => _5;
|
||||
}
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_2);
|
||||
StorageLive(_3);
|
||||
_3 = const 0_usize;
|
||||
_4 = Lt(copy _3, const N);
|
||||
assert(move _4, "index out of bounds: the length is {} but the index is {}", const N, copy _3) -> [success: bb1, unwind continue];
|
||||
}
|
||||
|
||||
bb1: {
|
||||
_2 = copy _1[_3];
|
||||
StorageDead(_3);
|
||||
StorageLive(_5);
|
||||
StorageLive(_6);
|
||||
_6 = const 1_usize;
|
||||
_7 = Lt(copy _6, const N);
|
||||
assert(move _7, "index out of bounds: the length is {} but the index is {}", const N, copy _6) -> [success: bb2, unwind continue];
|
||||
}
|
||||
|
||||
bb2: {
|
||||
_5 = copy _1[_6];
|
||||
StorageDead(_6);
|
||||
StorageLive(_8);
|
||||
StorageLive(_9);
|
||||
_9 = copy _2;
|
||||
StorageLive(_10);
|
||||
_10 = copy _2;
|
||||
_8 = Mul(move _9, move _10);
|
||||
StorageDead(_10);
|
||||
StorageDead(_9);
|
||||
StorageLive(_11);
|
||||
StorageLive(_12);
|
||||
_12 = copy _5;
|
||||
StorageLive(_13);
|
||||
_13 = copy _5;
|
||||
_11 = Mul(move _12, move _13);
|
||||
StorageDead(_13);
|
||||
StorageDead(_12);
|
||||
_0 = Add(move _8, move _11);
|
||||
StorageDead(_11);
|
||||
StorageDead(_8);
|
||||
StorageDead(_5);
|
||||
StorageDead(_2);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,16 @@
|
||||
// EMIT_MIR combine_array_len.norm2.InstSimplify-after-simplifycfg.diff
|
||||
fn norm2(x: [f32; 2]) -> f32 {
|
||||
// CHECK-LABEL: fn norm2(
|
||||
// CHECK-NOT: Len(
|
||||
// CHECK-NOT: PtrMetadata(
|
||||
let a = x[0];
|
||||
let b = x[1];
|
||||
a * a + b * b
|
||||
}
|
||||
|
||||
// EMIT_MIR combine_array_len.normN.InstSimplify-after-simplifycfg.diff
|
||||
fn normN<const N: usize>(x: [f32; N]) -> f32 {
|
||||
// CHECK-LABEL: fn normN(
|
||||
// CHECK-NOT: PtrMetadata(
|
||||
let a = x[0];
|
||||
let b = x[1];
|
||||
a * a + b * b
|
||||
@@ -12,4 +21,5 @@
|
||||
|
||||
fn main() {
|
||||
assert_eq!(norm2([3.0, 4.0]), 5.0 * 5.0);
|
||||
assert_eq!(normN([3.0, 4.0]), 5.0 * 5.0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user