diff options
| author | bors <bors@rust-lang.org> | 2016-06-02 10:55:43 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2016-06-02 10:55:43 -0700 |
| commit | 12d165352c6db8316675638288f94648ae72652e (patch) | |
| tree | d9fa126b571e6936da9d63ffc206689e10ee5d44 /src/rustllvm/RustWrapper.cpp | |
| parent | b47a442f0b868b8501a894c3fdc05719eb337962 (diff) | |
| parent | a97f6b35ac0532866763c3fa604460497fd3b635 (diff) | |
| download | rust-12d165352c6db8316675638288f94648ae72652e.tar.gz rust-12d165352c6db8316675638288f94648ae72652e.zip | |
Auto merge of #33583 - luqmana:tri-bool-mir, r=arielb1
MIR: Don't generate 3-armed boolean switch from match.
Fixes #33540.
Snippet from issue:
```Rust
fn foo(x: bool, y: bool) -> u32 {
match (x, y) {
(false, _) => 0,
(_, false) => 1,
(true, true) => 2,
}
}
```
Generated MIR:
```
fn foo(arg0: bool, arg1: bool) -> u32 {
let var0: bool; // "x" in scope 1 at 3bbm.rs:17:8: 17:9
let var1: bool; // "y" in scope 1 at 3bbm.rs:17:17: 17:18
let mut tmp0: (bool, bool);
let mut tmp1: bool;
let mut tmp2: bool;
let mut tmp3: (&'static str, &'static str, u32);
let mut tmp4: &'static (&'static str, &'static str, u32);
bb0: {
var0 = arg0; // scope 1 at 3bbm.rs:17:8: 17:9
var1 = arg1; // scope 1 at 3bbm.rs:17:17: 17:18
tmp1 = var0; // scope 5 at 3bbm.rs:18:12: 18:13
tmp2 = var1; // scope 6 at 3bbm.rs:18:15: 18:16
tmp0 = (tmp1, tmp2); // scope 4 at 3bbm.rs:18:11: 18:17
if((tmp0.0: bool)) -> [true: bb4, false: bb1]; // scope 3 at 3bbm.rs:19:10: 19:15
}
bb1: {
return = const 0u32; // scope 10 at 3bbm.rs:19:23: 19:24
goto -> bb7; // scope 3 at 3bbm.rs:18:5: 22:6
}
bb2: {
return = const 1u32; // scope 11 at 3bbm.rs:20:23: 20:24
goto -> bb7; // scope 3 at 3bbm.rs:18:5: 22:6
}
bb3: {
return = const 2u32; // scope 12 at 3bbm.rs:21:25: 21:26
goto -> bb7; // scope 3 at 3bbm.rs:18:5: 22:6
}
bb4: {
if((tmp0.1: bool)) -> [true: bb5, false: bb2]; // scope 3 at 3bbm.rs:20:13: 20:18
}
bb5: {
if((tmp0.0: bool)) -> [true: bb3, false: bb6]; // scope 3 at 3bbm.rs:21:10: 21:14
}
bb6: {
tmp4 = promoted0; // scope 3 at 3bbm.rs:18:5: 22:6
core::panicking::panic(tmp4); // scope 3 at 3bbm.rs:18:5: 22:6
}
bb7: {
return; // scope 0 at 3bbm.rs:17:1: 23:2
}
}
```
Not sure about this approach. I was also thinking maybe just a standalone pass?
cc @arielb1, @nagisa
Diffstat (limited to 'src/rustllvm/RustWrapper.cpp')
0 files changed, 0 insertions, 0 deletions
