60 lines
1.5 KiB
LLVM
60 lines
1.5 KiB
LLVM
; RUN: llc < %s -relocation-model static | FileCheck %s
|
|
|
|
; 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.bb1
|
|
; CHECK: .LBB0_{{.*}}: # %sw.bb2
|
|
; CHECK: .LBB0_{{.*}}: # %sw.bb3
|
|
; 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
|