[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