diff --git a/llvm/test/CodeGen/X86/SwitchLowering.ll b/llvm/test/CodeGen/X86/SwitchLowering.ll --- a/llvm/test/CodeGen/X86/SwitchLowering.ll +++ b/llvm/test/CodeGen/X86/SwitchLowering.ll @@ -62,3 +62,46 @@ declare void @foo(i8) +define i32 @baz(i32 %0) { +; CHECK-LABEL: baz: +; CHECK: # %bb.0: +; CHECK-NEXT: xorl %eax, %eax +; CHECK-NEXT: movl {{[0-9]+}}(%esp), %ecx +; CHECK-NEXT: movl $13056, %edx # imm = 0x3300 +; CHECK-NEXT: btl %ecx, %edx +; CHECK-NEXT: jae .LBB1_1 +; CHECK-NEXT: # %bb.3: # %return +; CHECK-NEXT: retl +; CHECK-NEXT: .LBB1_1: +; CHECK-NEXT: movl $48, %eax +; CHECK-NEXT: btl %ecx, %eax +; CHECK-NEXT: jae .LBB1_4 +; CHECK-NEXT: # %bb.2: # %sw.epilog8 +; CHECK-NEXT: movl $1, %eax +; CHECK-NEXT: retl +; CHECK-NEXT: .LBB1_4: # %if.then.unreachabledefault + switch i32 %0, label %if.then.unreachabledefault [ + i32 4, label %sw.epilog8 + i32 5, label %sw.epilog8 + i32 8, label %sw.bb2 + i32 9, label %sw.bb2 + i32 12, label %sw.bb4 + i32 13, label %sw.bb4 + ] + +sw.bb2: + br label %return + +sw.bb4: + br label %return + +sw.epilog8: + br label %return + +if.then.unreachabledefault: + unreachable + +return: + %retval.0 = phi i32 [ 1, %sw.epilog8 ], [ 0, %sw.bb2 ], [ 0, %sw.bb4 ] + ret i32 %retval.0 +}