[llvm] r241142 - [SCCP] Turn loads of null into undef instead of zero initialized values
David Majnemer
david.majnemer at gmail.com
Tue Jun 30 22:38:00 PDT 2015
Author: majnemer
Date: Wed Jul 1 00:37:57 2015
New Revision: 241142
URL: http://llvm.org/viewvc/llvm-project?rev=241142&view=rev
Log:
[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.
Modified:
llvm/trunk/lib/Transforms/Scalar/SCCP.cpp
llvm/trunk/test/Transforms/SCCP/crash.ll
Modified: llvm/trunk/lib/Transforms/Scalar/SCCP.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SCCP.cpp?rev=241142&r1=241141&r2=241142&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/SCCP.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/SCCP.cpp Wed Jul 1 00:37:57 2015
@@ -1055,7 +1055,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: llvm/trunk/test/Transforms/SCCP/crash.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SCCP/crash.ll?rev=241142&r1=241141&r2=241142&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/SCCP/crash.ll (original)
+++ llvm/trunk/test/Transforms/SCCP/crash.ll Wed Jul 1 00:37:57 2015
@@ -27,3 +27,8 @@ define i32 @test2([4 x i32] %A) {
%B = extractvalue [4 x i32] %A, 1
ret i32 %B
}
+
+define x86_mmx @test3() {
+ %load = load x86_mmx, x86_mmx* null
+ ret x86_mmx %load
+}
More information about the llvm-commits
mailing list