From dcef4a7cd5d513eaa65a00ccd1d1ef93c2e9a43f Mon Sep 17 00:00:00 2001 From: Hans Wennborg Date: Tue, 16 Jan 2018 15:00:51 +0000 Subject: Merging r321789: ------------------------------------------------------------------------ r321789 | hiraditya | 2018-01-03 23:47:24 -0800 (Wed, 03 Jan 2018) | 8 lines [GVNHoist] Fix: PR35222 gvn-hoist incorrectly erases load in case of a loop Reviewers: dberlin sebpop eli.friedman Differential Revision: https://reviews.llvm.org/D41453 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_60@322558 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/Transforms/GVNHoist/pr35222-hoist-load.ll | 45 ++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'test/Transforms') diff --git a/test/Transforms/GVNHoist/pr35222-hoist-load.ll b/test/Transforms/GVNHoist/pr35222-hoist-load.ll index 7e9c6200616..b9b1a870a59 100644 --- a/test/Transforms/GVNHoist/pr35222-hoist-load.ll +++ b/test/Transforms/GVNHoist/pr35222-hoist-load.ll @@ -1,4 +1,5 @@ ; RUN: opt -S -gvn-hoist < %s | FileCheck %s +; CHECK-LABEL: build_tree ; CHECK: load ; CHECK: load ; Check that the load is not hoisted because the call can potentially @@ -23,3 +24,47 @@ do.end: ; preds = %do.body } declare i1 @pqdownheap(i32) + +@i = external hidden unnamed_addr global i32, align 4 +@j = external hidden unnamed_addr global [573 x i32], align 4 +@v = external global i1 + +; CHECK-LABEL: test +; CHECK-LABEL: do.end +; CHECK: load +; Check that the load is not hoisted because the call can potentially +; modify the global + +define i32 @test() { +entry: + br label %for.cond + +for.cond: + %a3 = load volatile i1, i1* @v + br i1 %a3, label %for.body, label %while.end + +for.body: + br label %if.then + +if.then: + %tmp4 = load i32, i32* @i, align 4 + br label %for.cond + +while.end: + br label %do.body + +do.body: + %tmp9 = load i32, i32* getelementptr inbounds ([573 x i32], [573 x i32]* @j, +i32 0, i32 1), align 4 + %tmp10 = load i32, i32* @i, align 4 + call void @fn() + %a1 = load volatile i1, i1* @v + br i1 %a1, label %do.body, label %do.end + +do.end: + %tmp20 = load i32, i32* getelementptr inbounds ([573 x i32], [573 x i32]* @j, +i32 0, i32 1), align 4 + ret i32 %tmp20 +} + +declare void @fn() -- cgit v1.2.3