[llvm] r241142 - [SCCP] Turn loads of null into undef instead of zero initialized values
Sanjoy Das
sanjoy at playingwithpointers.com
Tue Jun 30 23:34:21 PDT 2015
Why not turn these into "unreachable"?
On Tue, Jun 30, 2015 at 10:38 PM, David Majnemer
<david.majnemer at gmail.com> wrote:
> 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
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list