Index: lib/Target/X86/X86FastISel.cpp =================================================================== --- lib/Target/X86/X86FastISel.cpp +++ lib/Target/X86/X86FastISel.cpp @@ -1153,10 +1153,8 @@ CC != CallingConv::X86_FastCall && CC != CallingConv::X86_StdCall && CC != CallingConv::X86_ThisCall && - CC != CallingConv::X86_64_SysV) - return false; - - if (Subtarget->isCallingConvWin64(CC)) + CC != CallingConv::X86_64_SysV && + CC != CallingConv::X86_64_Win64) return false; // Don't handle popping bytes if they don't fit the ret's immediate. Index: test/CodeGen/X86/fast-isel-x86-64.ll =================================================================== --- test/CodeGen/X86/fast-isel-x86-64.ll +++ test/CodeGen/X86/fast-isel-x86-64.ll @@ -1,4 +1,5 @@ ; RUN: llc < %s -mattr=-avx -fast-isel -mcpu=core2 -O0 -regalloc=fast -asm-verbose=0 -fast-isel-abort=1 | FileCheck %s +; RUN: llc < %s -mattr=-avx -fast-isel -mcpu=core2 -O0 -regalloc=fast -asm-verbose=0 -fast-isel-verbose 2>&1 >/dev/null | FileCheck %s --check-prefix=STDERR --allow-empty ; RUN: llc < %s -mattr=+avx -fast-isel -mcpu=core2 -O0 -regalloc=fast -asm-verbose=0 -fast-isel-abort=1 | FileCheck %s --check-prefix=AVX target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" @@ -312,3 +313,10 @@ call void @takesi32ptr(i32* %a) ret void } + +; STDERR-NOT: FastISel missed terminator: ret void +; CHECK-LABEL: win64ccfun +define x86_64_win64cc void @win64ccfun(i32 %i) { +; CHECK: ret + ret void +} Index: test/CodeGen/X86/win64_eh.ll =================================================================== --- test/CodeGen/X86/win64_eh.ll +++ test/CodeGen/X86/win64_eh.ll @@ -47,7 +47,6 @@ ; WIN64: .seh_endproc -; Checks stack push define i32 @foo3(i32 %f_arg, i32 %e_arg, i32 %d_arg, i32 %c_arg, i32 %b_arg, i32 %a_arg) uwtable { entry: %a = alloca i32 @@ -83,14 +82,11 @@ } ; WIN64-LABEL: foo3: ; WIN64: .seh_proc foo3 -; WIN64: pushq %rsi -; WIN64: .seh_pushreg 6 ; NORM: subq $24, %rsp ; ATOM: leaq -24(%rsp), %rsp ; WIN64: .seh_stackalloc 24 ; WIN64: .seh_endprologue ; WIN64: addq $24, %rsp -; WIN64: popq %rsi ; WIN64: ret ; WIN64: .seh_endproc