svn commit: r285149 - in head/contrib/llvm/lib/Transforms: Scalar Utils

Dimitry Andric dim at FreeBSD.org
Sat Jul 4 20:07:39 UTC 2015


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);


More information about the svn-src-head mailing list