diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-04-16 16:01:22 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-04-16 16:01:22 +0000 |
commit | 71d5a2540a98c81f5bcaeb48805e0e2881f530ef (patch) | |
tree | 5343938942df402b49ec7300a1c25a2d4ccd5821 /test/Transforms/LoadCombine/deadcode.ll | |
parent | 31bbf64f3a4974a2d6c8b3b27ad2f519caf74057 (diff) |
Diffstat (limited to 'test/Transforms/LoadCombine/deadcode.ll')
-rw-r--r-- | test/Transforms/LoadCombine/deadcode.ll | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/test/Transforms/LoadCombine/deadcode.ll b/test/Transforms/LoadCombine/deadcode.ll new file mode 100644 index 000000000000..ed72824ffb44 --- /dev/null +++ b/test/Transforms/LoadCombine/deadcode.ll @@ -0,0 +1,39 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: opt -load-combine -S < %s | FileCheck %s + +; It has been detected that dead loops like the one in this test case can be +; created by -jump-threading (it was detected by a csmith generated program). +; +; According to -verify this is valid input (even if it could be discussed if +; the dead loop really satisfies SSA form). +; +; The problem found was that the -load-combine pass ends up in an infinite loop +; when analysing the 'bb1' basic block. +define void @test1() { +; CHECK-LABEL: @test1( +; CHECK-NEXT: ret void +; CHECK: bb1: +; CHECK-NEXT: [[_TMP4:%.*]] = load i16, i16* [[_TMP10:%.*]], align 1 +; CHECK-NEXT: [[_TMP10]] = getelementptr i16, i16* [[_TMP10]], i16 1 +; CHECK-NEXT: br label [[BB1:%.*]] +; CHECK: bb2: +; CHECK-NEXT: [[_TMP7:%.*]] = load i16, i16* [[_TMP12:%.*]], align 1 +; CHECK-NEXT: [[_TMP12]] = getelementptr i16, i16* [[_TMP12]], i16 1 +; CHECK-NEXT: br label [[BB2:%.*]] +; + ret void + +bb1: + %_tmp4 = load i16, i16* %_tmp10, align 1 + %_tmp10 = getelementptr i16, i16* %_tmp10, i16 1 + br label %bb1 + +; A second basic block. Running the test with -debug-pass=Executions shows +; that we only run the Dominator Tree Construction one time for each function, +; also when having multiple basic blocks in the function. +bb2: + %_tmp7 = load i16, i16* %_tmp12, align 1 + %_tmp12 = getelementptr i16, i16* %_tmp12, i16 1 + br label %bb2 + +} |