; 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
}

Fix miscompilation found in Fhourstones by bugpoint
Fix miscompilation found in Fhourstones by bugpoint


git-svn-id: 0ff597fd157e6f4fc38580e8d64ab130330d2411@5993 91177308-0d34-0410-b5e6-96231b3b80d8
