// RUN: %target-sil-opt -assume-parsing-unqualified-ownership-sil -enable-sil-verify-all %s -simplify-cfg -cse | %FileCheck %s // Test if jump-threading is done to combine two enum instructions // into a single block. sil_stage canonical import Builtin enum E { case A case B } enum E2 { case X case Y(E) } // CHECK-LABEL: sil @testfunc sil @testfunc : $@convention(thin) (Builtin.Int1, Builtin.Int1) -> E2 { bb0(%0 : $Builtin.Int1, %1 : $Builtin.Int1): cond_br %0, bb1, bb4 bb1: %2 = enum $E, #E.A!enumelt cond_br %1, bb2, bb3(%2 : $E) // CHECK: [[ENUM1:%[0-9]+]] = enum $E, #E.B // CHECK-NEXT: [[ENUM2:%[0-9]+]] = enum $E2, #E2.Y!enumelt.1, [[ENUM1]] // CHECK-NEXT: br [[RETBB:bb[0-9]+]]([[ENUM2]] : $E2) bb2: // This block should be jump-threaded %3 = enum $E, #E.B!enumelt br bb3(%3 : $E) bb3(%4 : $E): %5 = enum $E2, #E2.Y!enumelt.1, %4 : $E br bb5(%5 : $E2) bb4: %6 = enum $E2, #E2.X!enumelt br bb5(%6 : $E2) // CHECK: [[RETBB]]({{.*}}): // CHECK-NEXT: return bb5(%7 : $E2): return %7 : $E2 }