| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 | |
| ; RUN: opt < %s -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -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 | |
| } |