diff --git a/lib/Target/X86/X86FastISel.cpp b/lib/Target/X86/X86FastISel.cpp index 4af856c5622..d4459eec8ba 100644 --- a/lib/Target/X86/X86FastISel.cpp +++ b/lib/Target/X86/X86FastISel.cpp @@ -2709,15 +2709,15 @@ bool X86FastISel::fastLowerCall(CallLoweringInfo &CLI) { ResultReg = fastEmit_ri(VT, VT, ISD::AND, ResultReg, hasTrivialKill(PrevVal), 1); - - if (!ResultReg) - return false; } else { if (!isTypeLegal(Val->getType(), VT)) return false; ResultReg = getRegForValue(Val); } + if (!ResultReg) + return false; + ArgRegs.push_back(ResultReg); OutVTs.push_back(VT); } diff --git a/test/CodeGen/X86/fast-isel-call-bool.ll b/test/CodeGen/X86/fast-isel-call-bool.ll index 44db38c5ea9..876b02275c6 100644 --- a/test/CodeGen/X86/fast-isel-call-bool.ll +++ b/test/CodeGen/X86/fast-isel-call-bool.ll @@ -1,8 +1,7 @@ -; RUN: llc < %s -fast-isel -mcpu=core2 -O1 | FileCheck %s +; RUN: llc < %s -fast-isel -mcpu=core2 -march=x86-64 -O1 | FileCheck %s ; See PR21557 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-apple-darwin14.0.0" declare i64 @bar(i1) diff --git a/test/CodeGen/X86/large-code-model-isel.ll b/test/CodeGen/X86/large-code-model-isel.ll new file mode 100644 index 00000000000..3c283d93494 --- /dev/null +++ b/test/CodeGen/X86/large-code-model-isel.ll @@ -0,0 +1,13 @@ +; RUN: llc < %s -code-model=large -mcpu=core2 -march=x86-64 -O0 | FileCheck %s + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" + +@.str10 = external unnamed_addr constant [2 x i8], align 1 + +define void @foo() { +; CHECK-LABEL: foo: +entry: +; CHECK: callq + %call = call i64* undef(i64* undef, i8* getelementptr inbounds ([2 x i8]* @.str10, i32 0, i32 0)) + ret void +}