1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s 3 4; Test that a switch going to a switch on the same value can be merged. 5; All three switches in this example can be merged into one big one. 6 7declare void @foo1() 8 9declare void @foo2() 10 11declare void @foo3() 12 13declare void @foo4() 14 15define void @test1(i32 %V) { 16; CHECK-LABEL: @test1( 17; CHECK-NEXT: switch i32 [[V:%.*]], label [[INFLOOP:%.*]] [ 18; CHECK-NEXT: i32 4, label [[A:%.*]] 19; CHECK-NEXT: i32 17, label [[B:%.*]] 20; CHECK-NEXT: i32 18, label [[B]] 21; CHECK-NEXT: i32 42, label [[D:%.*]] 22; CHECK-NEXT: ] 23; CHECK: A: 24; CHECK-NEXT: call void @foo1() 25; CHECK-NEXT: ret void 26; CHECK: B: 27; CHECK-NEXT: call void @foo2() 28; CHECK-NEXT: ret void 29; CHECK: D: 30; CHECK-NEXT: call void @foo4() 31; CHECK-NEXT: ret void 32; CHECK: infloop: 33; CHECK-NEXT: br label [[INFLOOP]] 34; 35 switch i32 %V, label %F [ 36 i32 4, label %T 37 i32 17, label %T 38 i32 5, label %T 39 i32 1234, label %F 40 ] 41T: ; preds = %0, %0, %0 42 switch i32 %V, label %F [ 43 i32 4, label %A 44 i32 17, label %B 45 i32 42, label %C 46 ] 47A: ; preds = %T 48 call void @foo1( ) 49 ret void 50B: ; preds = %F, %F, %T 51 call void @foo2( ) 52 ret void 53C: ; preds = %T 54 call void @foo3( ) 55 ret void 56F: ; preds = %F, %T, %0, %0 57 switch i32 %V, label %F [ 58 i32 4, label %B 59 i32 18, label %B 60 i32 42, label %D 61 ] 62D: ; preds = %F 63 call void @foo4( ) 64 ret void 65 66} 67 68