Commit 77ef3e60 authored by Hans Wennborg's avatar Hans Wennborg
Browse files

Merging r243485:

------------------------------------------------------------------------
r243485 | vkalintiris | 2015-07-28 14:43:31 -0700 (Tue, 28 Jul 2015) | 12 lines

[mips][FastISel] Fix call lowering by bailing out on "fastcc" calls.

Summary:
Currently, we support only the MIPS O32 ABI calling convention for call
lowering. With this change we avoid using the O32 calling convetion for
lowering calls marked as using the fast calling convention.

Reviewers: dsanders

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D11515
------------------------------------------------------------------------

llvm-svn: 243647
parent bf41dc4e
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -1245,6 +1245,10 @@ bool MipsFastISel::fastLowerCall(CallLoweringInfo &CLI) {
  const Value *Callee = CLI.Callee;
  MCSymbol *Symbol = CLI.Symbol;

  // Do not handle FastCC.
  if (CC == CallingConv::Fast)
    return false;

  // Allow SelectionDAG isel to handle tail calls.
  if (IsTailCall)
    return false;
@@ -1422,6 +1426,11 @@ bool MipsFastISel::selectRet(const Instruction *I) {

  if (Ret->getNumOperands() > 0) {
    CallingConv::ID CC = F.getCallingConv();

    // Do not handle FastCC.
    if (CC == CallingConv::Fast)
      return false;

    SmallVector<ISD::OutputArg, 4> Outs;
    GetReturnInfo(F.getReturnType(), F.getAttributes(), Outs, TLI, DL);

+16 −0
Original line number Diff line number Diff line
; RUN: llc < %s -march=mipsel -mcpu=mips32r2 -O0 -relocation-model=pic \
; RUN:     -fast-isel=true -mips-fast-isel -fast-isel-verbose 2>&1 | \
; RUN:   FileCheck %s

; CHECK:      FastISel missed call:
; CHECK-SAME: %call = call fastcc i32 @foo(i32 signext %a, i32 signext %b)

define internal i32 @bar(i32 signext %a, i32 signext %b) {
  %s = and i32 %a, %b
  ret i32 %s
}

define i32 @foo(i32 signext %a, i32 signext %b) {
  %call = call fastcc i32 @foo(i32 signext %a, i32 signext %b)
  ret i32 %call
}