Yevgeny Rouban | ee62c40 | 2019-06-17 05:55:12 +0000 | [diff] [blame] | 1 | ; RUN: opt -S -simplifycfg < %s | FileCheck %s |
| 2 | |
| 3 | declare i32 @f(i32 %val) |
| 4 | |
| 5 | ; Check that eliminating cases with unreachable branches keeps |
| 6 | ; prof branch_weights metadata consistent with switch instruction. |
| 7 | define i32 @test_switch_to_unreachable(i32 %val) { |
| 8 | ; CHECK-LABEL: test_switch_to_unreachable |
| 9 | ; CHECK: switch |
| 10 | ; CHECK-NOT: i32 0, label %on0 |
| 11 | switch i32 %val, label %otherwise [ |
| 12 | i32 0, label %on0 |
| 13 | i32 1, label %on1 |
| 14 | i32 2, label %on2 |
| 15 | ], !prof !{!"branch_weights", i32 99, i32 0, i32 1, i32 2} |
| 16 | ; CHECK: !prof ![[MD0:[0-9]+]] |
| 17 | |
| 18 | otherwise: |
| 19 | %result = call i32 @f(i32 -1) |
| 20 | ret i32 %result |
| 21 | |
| 22 | on0: |
| 23 | unreachable |
| 24 | ret i32 125 |
| 25 | |
| 26 | on1: |
| 27 | %result1 = call i32 @f(i32 -2) |
| 28 | ret i32 %result1 |
| 29 | |
| 30 | on2: |
| 31 | %result2 = call i32 @f(i32 -3) |
| 32 | ret i32 %result2 |
| 33 | } |
| 34 | |
| 35 | ; CHECK: ![[MD0]] = !{!"branch_weights", i32 99, i32 2, i32 1} |