summaryrefslogtreecommitdiff
path: root/test/Transforms/LICM/2003-05-02-LoadHoist.ll
blob: 90a64e834cf710bf4616b89bf25a2bf48684a7e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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: llvm-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
}