1; RUN: opt < %s -passes=lower-switch -S | FileCheck %s 2 3; This test verifies -lower-switch does not crash when an removing an 4; unreachable default branch causes a PHI node used as the switch 5; condition to be erased. 6 7define void @f() local_unnamed_addr { 8entry: 9 br label %sw.epilog 10 11sw.epilog: ; preds = %sw.epilog.outer, %for.body 12 %i = phi i32 [ undef, %for.body ], [ 0, %entry ] 13 br i1 true, label %for.body, label %for.end 14 15for.body: ; preds = %sw.epilog 16 switch i32 %i, label %sw.epilog [ 17 i32 0, label %sw.epilog.outer.backedge.loopexit 18 i32 1, label %sw.epilog.outer.backedge 19 ] 20 21sw.epilog.outer.backedge.loopexit: ; preds = %for.body 22 br label %for.end 23 24sw.epilog.outer.backedge: ; preds = %for.body 25 unreachable 26 27for.end: ; preds = %sw.epilog 28 ret void 29} 30 31; The phi and the switch should both be eliminated. 32; CHECK: @f() 33; CHECK: sw.epilog: 34; CHECK-NOT: phi 35; CHECK: for.body: 36; CHECK-NOT: switch 37