| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: opt < %s -passes=simplifycfg -S | FileCheck %s |
| |
| define i32 @nodedup(i1 %c, i16 %v) { |
| ; CHECK-LABEL: define i32 @nodedup( |
| ; CHECK-SAME: i1 [[C:%.*]], i16 [[V:%.*]]) { |
| ; CHECK-NEXT: br i1 [[C]], label %[[B1:.*]], label %[[B2:.*]] |
| ; CHECK: [[B1]]: |
| ; CHECK-NEXT: switch i16 [[V]], label %[[RET2:.*]] [ |
| ; CHECK-NEXT: i16 1962, label %[[COMMON_RET:.*]] |
| ; CHECK-NEXT: i16 2000, label %[[COMMON_RET]] |
| ; CHECK-NEXT: i16 1963, label %[[COMMON_RET]] |
| ; CHECK-NEXT: ] |
| ; CHECK: [[B2]]: |
| ; CHECK-NEXT: switch i16 [[V]], label %[[RET2]] [ |
| ; CHECK-NEXT: i16 2766, label %[[COMMON_RET]] |
| ; CHECK-NEXT: i16 2798, label %[[COMMON_RET]] |
| ; CHECK-NEXT: i16 2767, label %[[COMMON_RET]] |
| ; CHECK-NEXT: ] |
| ; CHECK: [[COMMON_RET]]: |
| ; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi i32 [ 3, %[[RET2]] ], [ 1, %[[B2]] ], [ 1, %[[B2]] ], [ 1, %[[B2]] ], [ 1, %[[B1]] ], [ 1, %[[B1]] ], [ 1, %[[B1]] ] |
| ; CHECK-NEXT: ret i32 [[COMMON_RET_OP]] |
| ; CHECK: [[RET2]]: |
| ; CHECK-NEXT: br label %[[COMMON_RET]] |
| ; |
| br i1 %c, label %b1, label %b2 |
| b1: |
| switch i16 %v, label %ret2 [ |
| i16 1962, label %ret1 |
| i16 2000, label %ret1 |
| i16 1963, label %ret1 |
| ] |
| b2: |
| switch i16 %v, label %ret2 [ |
| i16 2766, label %ret1 |
| i16 2798, label %ret1 |
| i16 2767, label %ret1 |
| ] |
| ret1: |
| ret i32 1 |
| ret2: |
| ret i32 3 |
| } |
| |
| define i32 @dedup(i1 %c, i16 %v) { |
| ; CHECK-LABEL: define i32 @dedup( |
| ; CHECK-SAME: i1 [[C:%.*]], i16 [[V:%.*]]) { |
| ; CHECK-NEXT: switch i16 [[V]], label %[[RET2:.*]] [ |
| ; CHECK-NEXT: i16 2766, label %[[COMMON_RET:.*]] |
| ; CHECK-NEXT: i16 2798, label %[[COMMON_RET]] |
| ; CHECK-NEXT: i16 2767, label %[[COMMON_RET]] |
| ; CHECK-NEXT: ] |
| ; CHECK: [[COMMON_RET]]: |
| ; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi i32 [ 3, %[[RET2]] ], [ 1, [[TMP0:%.*]] ], [ 1, [[TMP0]] ], [ 1, [[TMP0]] ] |
| ; CHECK-NEXT: ret i32 [[COMMON_RET_OP]] |
| ; CHECK: [[RET2]]: |
| ; CHECK-NEXT: br label %[[COMMON_RET]] |
| ; |
| br i1 %c, label %b1, label %b2 |
| b1: |
| switch i16 %v, label %ret2 [ |
| i16 2766, label %ret1 |
| i16 2798, label %ret1 |
| i16 2767, label %ret1 |
| ] |
| b2: |
| switch i16 %v, label %ret2 [ |
| i16 2766, label %ret1 |
| i16 2798, label %ret1 |
| i16 2767, label %ret1 |
| ] |
| ret1: |
| ret i32 1 |
| ret2: |
| ret i32 3 |
| } |