Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 4 Jul 2015 20:07:38 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r285149 - in head/contrib/llvm/lib/Transforms: Scalar Utils
Message-ID:  <201507042007.t64K7c9w000375@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dim
Date: Sat Jul  4 20:07:37 2015
New Revision: 285149
URL: https://svnweb.freebsd.org/changeset/base/285149

Log:
  Pull in r241142 from upstream llvm trunk (by David Majnemer):
  
    [SCCP] Turn loads of null into undef instead of zero initialized values
  
    Surprisingly, this is a correctness issue: the mmx type exists for
    calling convention purposes, LLVM doesn't have a zero representation for
    them.
  
    This partially fixes PR23999.
  
  Pull in r241143 from upstream llvm trunk (by David Majnemer):
  
    [LoopUnroll] Use undef for phis with no value live
  
    We would create a phi node with a zero initialized operand instead of
    undef in the case where no value was originally available.  This was
    problematic for x86_mmx which has no null value.
  
  These fix a "Cannot create a null constant of that type!" error when
  compiling the graphics/sdl2_gfx port with MMX enabled.
  
  Reported by:	amdmi3

Modified:
  head/contrib/llvm/lib/Transforms/Scalar/SCCP.cpp
  head/contrib/llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp

Modified: head/contrib/llvm/lib/Transforms/Scalar/SCCP.cpp
==============================================================================
--- head/contrib/llvm/lib/Transforms/Scalar/SCCP.cpp	Sat Jul  4 19:00:38 2015	(r285148)
+++ head/contrib/llvm/lib/Transforms/Scalar/SCCP.cpp	Sat Jul  4 20:07:37 2015	(r285149)
@@ -1054,7 +1054,7 @@ void SCCPSolver::visitLoadInst(LoadInst 
 
   // load null -> null
   if (isa<ConstantPointerNull>(Ptr) && I.getPointerAddressSpace() == 0)
-    return markConstant(IV, &I, Constant::getNullValue(I.getType()));
+    return markConstant(IV, &I, UndefValue::get(I.getType()));
 
   // Transform load (constant global) into the value loaded.
   if (GlobalVariable *GV = dyn_cast<GlobalVariable>(Ptr)) {

Modified: head/contrib/llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp
==============================================================================
--- head/contrib/llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp	Sat Jul  4 19:00:38 2015	(r285148)
+++ head/contrib/llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp	Sat Jul  4 20:07:37 2015	(r285149)
@@ -81,7 +81,7 @@ static void ConnectProlog(Loop *L, Value
       if (L->contains(PN)) {
         NewPN->addIncoming(PN->getIncomingValueForBlock(NewPH), OrigPH);
       } else {
-        NewPN->addIncoming(Constant::getNullValue(PN->getType()), OrigPH);
+        NewPN->addIncoming(UndefValue::get(PN->getType()), OrigPH);
       }
 
       Value *V = PN->getIncomingValueForBlock(Latch);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201507042007.t64K7c9w000375>