| 1234567891011121314151617181920212223 |
- ; 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: opt < %s -licm -gvn -instcombine -S | grep load
- @X = global i32 7 ; <i32*> [#uses=2]
- declare void @foo()
- define i32 @test(i1 %c) {
- %A = load i32, i32* @X ; <i32> [#uses=1]
- br label %Loop
- Loop: ; preds = %Loop, %0
- call void @foo( )
- ;; Should not hoist this load!
- %B = load i32, i32* @X ; <i32> [#uses=1]
- br i1 %c, label %Loop, label %Out
- Out: ; preds = %Loop
- %C = sub i32 %A, %B ; <i32> [#uses=1]
- ret i32 %C
- }
|