svn commit: r267981 - head/contrib/llvm/lib/Target/PowerPC

Dimitry Andric dim at FreeBSD.org
Fri Jun 27 20:41:13 UTC 2014


Author: dim
Date: Fri Jun 27 20:41:12 2014
New Revision: 267981
URL: http://svnweb.freebsd.org/changeset/base/267981

Log:
  Pull in r211627 from upstream llvm trunk (by Bill Schmidt):
  
    [PPC64] Fix PR20071 (fctiduz generated for targets lacking that
    instruction)
  
    PR20071 identifies a problem in PowerPC's fast-isel implementation
    for floating-point conversion to integer.  The fctiduz instruction
    was added in Power ISA 2.06 (i.e., Power7 and later).  However, this
    instruction is being generated regardless of which 64-bit PowerPC
    target is selected.
  
    The intent is for fast-isel to punt to DAG selection when this
    instruction is not available.  This patch implements that change.
    For testing purposes, the existing fast-isel-conversion.ll test adds
    a RUN line for -mcpu=970 and tests for the expected code generation.
    Additionally, the existing test fast-isel-conversion-p5.ll was found
    to be incorrectly expecting the unavailable instruction to be
    generated.  I've removed these test variants since we have adequate
    coverage in fast-isel-conversion.ll.
  
  This is needed to compile clang with debug+asserts on older powerpc64
  and ppc970 targets.
  
  Requested by:	jhibbits
  MFC after:	3 days

Modified:
  head/contrib/llvm/lib/Target/PowerPC/PPCFastISel.cpp

Modified: head/contrib/llvm/lib/Target/PowerPC/PPCFastISel.cpp
==============================================================================
--- head/contrib/llvm/lib/Target/PowerPC/PPCFastISel.cpp	Fri Jun 27 20:39:45 2014	(r267980)
+++ head/contrib/llvm/lib/Target/PowerPC/PPCFastISel.cpp	Fri Jun 27 20:41:12 2014	(r267981)
@@ -1026,6 +1026,10 @@ bool PPCFastISel::SelectFPToI(const Inst
   if (DstVT != MVT::i32 && DstVT != MVT::i64)
     return false;
 
+  // If we don't have FCTIDUZ and we need it, punt to SelectionDAG.
+  if (DstVT == MVT::i64 && !IsSigned && !PPCSubTarget->hasFPCVT())
+    return false;
+
   Value *Src = I->getOperand(0);
   Type *SrcTy = Src->getType();
   if (!isTypeLegal(SrcTy, SrcVT))


More information about the svn-src-head mailing list