Simplify the canonical clone method to copy
The optimized clone method ends up as the following MIR: ``` _2 = copy ((*_1).0: i32); _3 = copy ((*_1).1: u64); _4 = copy ((*_1).2: [i8; 3]); _0 = Foo { a: move _2, b: move _3, c: move _4 }; ``` We can transform this to: ``` _0 = copy (*_1); ```
This commit is contained in:
parent
23b04c0513
commit
c16c22cc9c
27 changed files with 1642 additions and 52 deletions
|
@ -28,11 +28,13 @@ pub fn implicit_match(x: Int) -> bool {
|
|||
// The code is from https://github.com/rust-lang/rust/issues/110097.
|
||||
// We expect it to generate the same optimized code as a full match.
|
||||
// CHECK-LABEL: @if_let(
|
||||
// CHECK-NEXT: start:
|
||||
// CHECK: start:
|
||||
// CHECK-NOT: zext
|
||||
// CHECK: select
|
||||
// CHECK-NEXT: insertvalue
|
||||
// CHECK-NEXT: insertvalue
|
||||
// CHECK-NEXT: ret
|
||||
#[no_mangle]
|
||||
pub fn if_let(val: Result<i32, ()>) -> Result<i32, ()> {
|
||||
if let Ok(x) = val { Ok(x) } else { Err(()) }
|
||||
if let Ok(x) = val { Ok(x * 2) } else { Err(()) }
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue