; RUN: llc < %s -relocation-model=static | FileCheck %s ; RUN: llc < %s -relocation-model=pic | FileCheck %s --check-prefix=PIC ; RUN: llc < %s -relocation-model=pic -code-model=large | FileCheck %s --check-prefix=PIC ; FIXME: Remove '-relocation-model=static' when it is no longer necessary to ; trigger the separate .rdata section. target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.0.24215" define void @f(i32 %x) { entry: switch i32 %x, label %sw.epilog [ i32 0, label %sw.bb i32 1, label %sw.bb1 i32 2, label %sw.bb2 i32 3, label %sw.bb3 ] sw.bb: ; preds = %entry tail call void @g(i32 0) #2 br label %sw.epilog sw.bb1: ; preds = %entry tail call void @g(i32 1) #2 br label %sw.epilog sw.bb2: ; preds = %entry tail call void @g(i32 2) #2 br label %sw.epilog sw.bb3: ; preds = %entry tail call void @g(i32 3) #2 br label %sw.epilog sw.epilog: ; preds = %entry, %sw.bb3, %sw.bb2, %sw.bb1, %sw.bb tail call void @g(i32 10) #2 ret void } declare void @g(i32) ; CHECK: .text ; CHECK: f: ; CHECK: .seh_proc f ; CHECK: jmpq *.LJTI0_0 ; CHECK: .LBB0_{{.*}}: # %sw.bb ; CHECK: .LBB0_{{.*}}: # %sw.bb2 ; CHECK: .LBB0_{{.*}}: # %sw.bb3 ; CHECK: .LBB0_{{.*}}: # %sw.bb1 ; CHECK: callq g ; CHECK: jmp g # TAILCALL ; CHECK: .section .rdata,"dr" ; CHECK: .quad .LBB0_ ; CHECK: .quad .LBB0_ ; CHECK: .quad .LBB0_ ; CHECK: .quad .LBB0_ ; It's important that we switch back to .text here, not .rdata. ; CHECK: .text ; CHECK: .seh_endproc ; Windows PIC code should use 32-bit entries ; PIC: .long .LBB0_2-.LJTI0_0 ; PIC: .long .LBB0_3-.LJTI0_0 ; PIC: .long .LBB0_4-.LJTI0_0 ; PIC: .long .LBB0_5-.LJTI0_0