68 lines · plain
1; RUN: llc -mtriple=x86_64-pc-windows-msvc < %s | FileCheck %s --check-prefix=CHECK2; RUN: llc --fast-isel -mtriple=x86_64-pc-windows-msvc < %s | FileCheck %s --check-prefix=CHECK3; RUN: llc --global-isel --global-isel-abort=2 -mtriple=x86_64-pc-windows-msvc < %s | FileCheck %s --check-prefix=CHECK4 5define dso_local void @normal_call(ptr noundef readonly %func_ptr) local_unnamed_addr section "nc_sect" {6entry:7 call void @a()8 call void @a()9 call void %func_ptr()10 ret void11}12; CHECK-LABEL: normal_call:13; CHECK: .Limpcall0:14; CHECK-NEXT: rex6415; CHECK-NEXT: callq __imp_a16; CHECK-NEXT: nopl 8(%rax,%rax)17; CHECK-NEXT: .Limpcall1:18; CHECK-NEXT: rex6419; CHECK-NEXT: callq __imp_a20; CHECK-NEXT: nopl 8(%rax,%rax)21; CHECK-NEXT: movq %rsi, %rax22; CHECK-NEXT: .Limpcall2:23; CHECK-NEXT: callq *%rax24; CHECK-NEXT: nopl (%rax)25; CHECK-NEXT: nop26 27define dso_local void @tail_call() local_unnamed_addr section "tc_sect" {28entry:29 tail call void @b()30 ret void31}32; CHECK-LABEL: tail_call:33; CHECK: .Limpcall3:34; CHECK-NEXT: jmp __imp_b35 36define dso_local void @tail_call_fp(ptr noundef readonly %func_ptr) local_unnamed_addr section "tc_sect" {37entry:38 tail call void %func_ptr()39 ret void40}41; CHECK-LABEL: tail_call_fp:42; CHECK: movq %rcx, %rax43; CHECK-NEXT: .Limpcall4:44; CHECK-NEXT: rex64 jmpq *%rax45 46declare dllimport void @a() local_unnamed_addr47declare dllimport void @b() local_unnamed_addr48 49; CHECK-LABEL .section .retplne,"yi"50; CHECK-NEXT .asciz "RetpolineV1"51; CHECK-NEXT .long 2452; CHECK-NEXT .secnum tc_sect53; CHECK-NEXT .long 354; CHECK-NEXT .secoffset .Limpcall355; CHECK-NEXT .long 556; CHECK-NEXT .secoffset .Limpcall457; CHECK-NEXT .long 3258; CHECK-NEXT .secnum nc_sect59; CHECK-NEXT .long 360; CHECK-NEXT .secoffset .Limpcall061; CHECK-NEXT .long 362; CHECK-NEXT .secoffset .Limpcall163; CHECK-NEXT .long 564; CHECK-NEXT .secoffset .Limpcall265 66!llvm.module.flags = !{!0}67!0 = !{i32 1, !"import-call-optimization", i32 1}68