[llvm] r195599 - Don't look past volatile loads.

Lang Hames lhames at gmail.com
Sun Nov 24 23:46:56 PST 2013


Hi Bill,

Looks like this test is failing. Could you take a look?

Cheers,
Lang.



On Sun, Nov 24, 2013 at 9:01 PM, Bill Wendling <isanbard at gmail.com> wrote:

> Author: void
> Date: Sun Nov 24 23:01:21 2013
> New Revision: 195599
>
> URL: http://llvm.org/viewvc/llvm-project?rev=195599&view=rev
> Log:
> Don't look past volatile loads.
>
> A volatile load should block us from trying to coalesce stores.
> PR18023
>
> Added:
>     llvm/trunk/test/CodeGen/X86/pr18023.ll
> Modified:
>     llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=195599&r1=195598&r2=195599&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Sun Nov 24
> 23:01:21 2013
> @@ -8703,6 +8703,11 @@ bool DAGCombiner::MergeConsecutiveStores
>          Index = STn;
>          break;
>        } else if (LoadSDNode *Ldn = dyn_cast<LoadSDNode>(NextInChain)) {
> +        if (Ldn->isVolatile()) {
> +          Index = NULL;
> +          break;
> +        }
> +
>          // Save the load node for later. Continue the scan.
>          AliasLoadNodes.push_back(Ldn);
>          NextInChain = Ldn->getChain().getNode();
>
> Added: llvm/trunk/test/CodeGen/X86/pr18023.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/pr18023.ll?rev=195599&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/pr18023.ll (added)
> +++ llvm/trunk/test/CodeGen/X86/pr18023.ll Sun Nov 24 23:01:21 2013
> @@ -0,0 +1,29 @@
> +; RUN: llc < %s -mtriple x86_64-apple-macosx10.9.0 | FileCheck %s
> +; PR18023
> +
> +; CHECK: movl $1, 4(%rax)
> +; CHECK: movl $1, 4(%rax)
> +; CHECK: movl $1, 4(%rax)
> +
> + at c = common global i32 0, align 4
> + at a = common global [3 x i32] zeroinitializer, align 4
> + at b = common global i32 0, align 4
> + at .str = private unnamed_addr constant [4 x i8] c"%d\0A\00", align 1
> +
> +define void @func() {
> +  store i32 1, i32* getelementptr inbounds ([3 x i32]* @a, i64 0, i64 1),
> align 4
> +  store i32 0, i32* getelementptr inbounds ([3 x i32]* @a, i64 0, i64 0),
> align 4
> +  %1 = load volatile i32* @b, align 4
> +  store i32 1, i32* getelementptr inbounds ([3 x i32]* @a, i64 0, i64 1),
> align 4
> +  store i32 0, i32* getelementptr inbounds ([3 x i32]* @a, i64 0, i64 1),
> align 4
> +  %2 = load volatile i32* @b, align 4
> +  store i32 1, i32* getelementptr inbounds ([3 x i32]* @a, i64 0, i64 1),
> align 4
> +  store i32 0, i32* getelementptr inbounds ([3 x i32]* @a, i64 0, i64 2),
> align 4
> +  %3 = load volatile i32* @b, align 4
> +  store i32 3, i32* @c, align 4
> +  %4 = load i32* getelementptr inbounds ([3 x i32]* @a, i64 0, i64 1),
> align 4
> +  %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x
> i8]* @.str, i64 0, i64 0), i32 %4)
> +  ret void
> +}
> +
> +declare i32 @printf(i8*, ...)
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20131124/213e6e2f/attachment.html>


More information about the llvm-commits mailing list