diff options
Diffstat (limited to 'test/Transforms/LICM/2003-05-02-LoadHoist.ll')
-rw-r--r-- | test/Transforms/LICM/2003-05-02-LoadHoist.ll | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/test/Transforms/LICM/2003-05-02-LoadHoist.ll b/test/Transforms/LICM/2003-05-02-LoadHoist.ll new file mode 100644 index 0000000..71d3e78 --- /dev/null +++ b/test/Transforms/LICM/2003-05-02-LoadHoist.ll @@ -0,0 +1,23 @@ +; 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* @X ; <i32> [#uses=1] + br label %Loop +Loop: ; preds = %Loop, %0 + call void @foo( ) + ;; Should not hoist this load! + %B = load 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 +} |