From c804d530c5a7df78a792799897bc761a4ebf3a73 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 20 Sep 2004 10:14:27 +0000 Subject: [PATCH] Two testcases for invalid transformations that instcombine is doing git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16446 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../InstCombine/2004-09-20-BadLoadCombine.llx | 20 ++++++++++++++++ .../2004-09-20-BadLoadCombine2.llx | 24 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 test/Transforms/InstCombine/2004-09-20-BadLoadCombine.llx create mode 100644 test/Transforms/InstCombine/2004-09-20-BadLoadCombine2.llx diff --git a/test/Transforms/InstCombine/2004-09-20-BadLoadCombine.llx b/test/Transforms/InstCombine/2004-09-20-BadLoadCombine.llx new file mode 100644 index 00000000000..5960135f1bc --- /dev/null +++ b/test/Transforms/InstCombine/2004-09-20-BadLoadCombine.llx @@ -0,0 +1,20 @@ +; RUN: llvm-as < %s | opt -instcombine -mem2reg | llvm-dis | not grep 'int 1' + +; When propagating the load through the select, make sure that the load is +; inserted where the original load was, not where the select is. Not doing +; so could produce incorrect results! + +implementation + +int %test(bool %C) { + %X = alloca int + %X2 = alloca int + store int 1, int* %X + store int 2, int* %X2 + + %Y = select bool %C, int* %X, int* %X2 + store int 3, int* %X + %Z = load int* %Y + ret int %Z +} + diff --git a/test/Transforms/InstCombine/2004-09-20-BadLoadCombine2.llx b/test/Transforms/InstCombine/2004-09-20-BadLoadCombine2.llx new file mode 100644 index 00000000000..297cf87912c --- /dev/null +++ b/test/Transforms/InstCombine/2004-09-20-BadLoadCombine2.llx @@ -0,0 +1,24 @@ +; RUN: llvm-as < %s | opt -instcombine -mem2reg -simplifycfg | llvm-dis | \ +; RUN: grep -v store | not grep 'int 1' + +; Test to make sure that instcombine does not accidentally propagate the load +; into the PHI, which would break the program. + +int %test(bool %C) { +entry: + %X = alloca int + %X2 = alloca int + store int 1, int* %X + store int 2, int* %X2 + br bool %C, label %cond_true.i, label %cond_continue.i + +cond_true.i: + br label %cond_continue.i + +cond_continue.i: + %mem_tmp.i.0 = phi int* [ %X, %cond_true.i ], [ %X2, %entry ] + store int 3, int* %X + %tmp.3 = load int* %mem_tmp.i.0 + ret int %tmp.3 +} +