From ccce564b31831e2908fccbc685c7d5f1e3637d8d Mon Sep 17 00:00:00 2001 From: Keno Fischer Date: Sun, 28 Dec 2014 15:20:57 +0000 Subject: [PATCH] [X86][ISel] Fix a regression I introduced in r224884 The else case ResultReg was not checked for validity. To my surprise, this case was not hit in any of the existing test cases. This includes a new test cases that tests this path. Also drop the `target triple` declaration from the original test as suggested by H.J. Lu, because apparently with it the test won't be run on Linux llvm-svn: 224901 --- lib/Target/X86/X86FastISel.cpp | 6 +++--- test/CodeGen/X86/fast-isel-call-bool.ll | 3 +-- test/CodeGen/X86/large-code-model-isel.ll | 13 +++++++++++++ 3 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 test/CodeGen/X86/large-code-model-isel.ll 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 +}