1; RUN: llc < %s -relocation-model=static | FileCheck %s 2; RUN: llc < %s -relocation-model=pic | FileCheck %s --check-prefix=PIC 3; RUN: llc < %s -relocation-model=pic -code-model=large | FileCheck %s --check-prefix=PIC 4 5; FIXME: Remove '-relocation-model=static' when it is no longer necessary to 6; trigger the separate .rdata section. 7 8target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" 9target triple = "x86_64-pc-windows-msvc19.0.24215" 10 11define void @f(i32 %x) { 12entry: 13 switch i32 %x, label %sw.epilog [ 14 i32 0, label %sw.bb 15 i32 1, label %sw.bb1 16 i32 2, label %sw.bb2 17 i32 3, label %sw.bb3 18 ] 19 20sw.bb: ; preds = %entry 21 tail call void @g(i32 0) #2 22 br label %sw.epilog 23 24sw.bb1: ; preds = %entry 25 tail call void @g(i32 1) #2 26 br label %sw.epilog 27 28sw.bb2: ; preds = %entry 29 tail call void @g(i32 2) #2 30 br label %sw.epilog 31 32sw.bb3: ; preds = %entry 33 tail call void @g(i32 3) #2 34 br label %sw.epilog 35 36sw.epilog: ; preds = %entry, %sw.bb3, %sw.bb2, %sw.bb1, %sw.bb 37 tail call void @g(i32 10) #2 38 ret void 39} 40 41declare void @g(i32) 42 43; CHECK: .text 44; CHECK: f: 45; CHECK: .seh_proc f 46; CHECK: jmpq *.LJTI0_0 47; CHECK: .LBB0_{{.*}}: # %sw.bb 48; CHECK: .LBB0_{{.*}}: # %sw.bb2 49; CHECK: .LBB0_{{.*}}: # %sw.bb3 50; CHECK: .LBB0_{{.*}}: # %sw.bb1 51; CHECK: callq g 52; CHECK: jmp g # TAILCALL 53; CHECK: .section .rdata,"dr" 54; CHECK: .quad .LBB0_ 55; CHECK: .quad .LBB0_ 56; CHECK: .quad .LBB0_ 57; CHECK: .quad .LBB0_ 58 59; It's important that we switch back to .text here, not .rdata. 60; CHECK: .text 61; CHECK: .seh_endproc 62 63; Windows PIC code should use 32-bit entries 64; PIC: .long .LBB0_2-.LJTI0_0 65; PIC: .long .LBB0_3-.LJTI0_0 66; PIC: .long .LBB0_4-.LJTI0_0 67; PIC: .long .LBB0_5-.LJTI0_0 68