| ; 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_ | |
| ; CHECK: .seh_handlerdata | |
| ; It's important that we switch back to .text here, not .rdata. | |
| ; CHECK: .text | |
| ; CHECK: .seh_endproc |