Fix miscompilation found in Fhourstones by bugpoint
authorChris Lattner <sabre@nondot.org>
Sat, 3 May 2003 03:39:35 +0000 (03:39 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 3 May 2003 03:39:35 +0000 (03:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5993 91177308-0d34-0410-b5e6-96231b3b80d8

test/Transforms/LICM/2003-05-02-LoadHoist.ll [new file with mode: 0644]

diff --git a/test/Transforms/LICM/2003-05-02-LoadHoist.ll b/test/Transforms/LICM/2003-05-02-LoadHoist.ll
new file mode 100644 (file)
index 0000000..5488974
--- /dev/null
@@ -0,0 +1,21 @@
+; This testcase tests for a problem where LICM hoists loads out of a loop 
+; despite the fact that calls to unknown functions may modify what is being 
+; loaded from.  Basically if the load gets hoisted, the subtract gets turned
+; into a constant zero.
+;
+; RUN: as < %s | opt -licm -load-vn -gcse -instcombine | llvm-dis | grep load
+
+%X = global int 7
+declare void %foo()
+
+int %test(bool %c) {
+       %A = load int *%X
+       br label %Loop
+Loop:
+       call void %foo()
+       %B = load int *%X  ;; Should not hoist this load!
+       br bool %c, label %Loop, label %Out
+Out:
+       %C = sub int %A, %B
+       ret int %C
+}