[llvm] r185755 - DAGCombiner: Don't drop extension behavior when shrinking a load when unsafe.
Richard Smith
richard at metafoo.co.uk
Sat Jul 6 16:11:08 PDT 2013
On Sat, Jul 6, 2013 at 7:05 AM, Benjamin Kramer
<benny.kra at googlemail.com> wrote:
> Author: d0k
> Date: Sat Jul 6 09:05:09 2013
> New Revision: 185755
>
> URL: http://llvm.org/viewvc/llvm-project?rev=185755&view=rev
> Log:
> DAGCombiner: Don't drop extension behavior when shrinking a load when unsafe.
>
> ReduceLoadWidth unconditionally drops extensions from loads. Limit it to the
> case when all of the bits the extension would otherwise produce are dropped by
> the shrink. It would be possible to shrink the load in more cases by merging
> the extensions, but this isn't trivial and a very rare case. I left a TODO for
> that case.
>
> Fixes PR16551.
Any chance this also fixes PR16528?
> Modified:
> llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
> llvm/trunk/test/CodeGen/X86/shrink-compare.ll
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=185755&r1=185754&r2=185755&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Sat Jul 6 09:05:09 2013
> @@ -5220,6 +5220,13 @@ SDValue DAGCombiner::ReduceLoadWidth(SDN
> if (LN0->getNumValues() > 2)
> return SDValue();
>
> + // If the load that we're shrinking is an extload and we're not just
> + // discarding the extension we can't simply shrink the load. Bail.
> + // TODO: It would be possible to merge the extensions in some cases.
> + if (LN0->getExtensionType() != ISD::NON_EXTLOAD &&
> + LN0->getMemoryVT().getSizeInBits() < ExtVT.getSizeInBits() + ShAmt)
> + return SDValue();
> +
> EVT PtrType = N0.getOperand(1).getValueType();
>
> if (PtrType == MVT::Untyped || PtrType.isExtended())
>
> Modified: llvm/trunk/test/CodeGen/X86/shrink-compare.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/shrink-compare.ll?rev=185755&r1=185754&r2=185755&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/shrink-compare.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/shrink-compare.ll Sat Jul 6 09:05:09 2013
> @@ -66,3 +66,26 @@ lor.end:
> %p = phi i1 [ true, %entry ], [ %tobool1, %lor.rhs ]
> ret i1 %p
> }
> +
> + at x = global { i8, i8, i8, i8, i8, i8, i8, i8 } { i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 1 }, align 4
> +
> +; PR16551
> +define void @test5(i32 %X) nounwind {
> +entry:
> + %bf.load = load i56* bitcast ({ i8, i8, i8, i8, i8, i8, i8, i8 }* @x to i56*), align 4
> + %bf.lshr = lshr i56 %bf.load, 32
> + %bf.cast = trunc i56 %bf.lshr to i32
> + %cmp = icmp ne i32 %bf.cast, 1
> + br i1 %cmp, label %if.then, label %if.end
> +
> +if.then:
> + tail call void @bar() nounwind
> + br label %if.end
> +
> +if.end:
> + ret void
> +
> +; CHECK: test5:
> +; CHECK-NOT: cmpl $1,{{.*}}x+4
> +; CHECK: ret
> +}
>
>
> _______________________________________________
> 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