Changeset View
Changeset View
Standalone View
Standalone View
llvm/trunk/test/Transforms/LoopUnswitch/infinite-loop.ll
; REQUIRES: asserts | ; REQUIRES: asserts | ||||
; RUN: opt -loop-unswitch -disable-output -stats -info-output-file - < %s | FileCheck --check-prefix=STATS %s | ; RUN: opt -loop-unswitch -disable-output -stats -info-output-file - < %s | FileCheck --check-prefix=STATS %s | ||||
; RUN: opt -loop-unswitch -simplifycfg -S < %s | FileCheck %s | ; RUN: opt -loop-unswitch -simplifycfg -S < %s | FileCheck %s | ||||
; PR5373 | ; PR5373 | ||||
; Loop unswitching shouldn't trivially unswitch the true case of condition %a | ; Loop unswitching shouldn't trivially unswitch the true case of condition %a | ||||
; in the code here because it leads to an infinite loop. While this doesn't | ; in the code here because it leads to an infinite loop. While this doesn't | ||||
; contain any instructions with side effects, it's still a kind of side effect. | ; contain any instructions with side effects, it's still a kind of side effect. | ||||
; It can trivially unswitch on the false cas of condition %a though. | ; It can trivially unswitch on the false case of condition %a though. | ||||
; STATS: 2 loop-unswitch - Number of branches unswitched | ; STATS: 2 loop-unswitch - Number of branches unswitched | ||||
; STATS: 2 loop-unswitch - Number of unswitches that are trivial | ; STATS: 2 loop-unswitch - Number of unswitches that are trivial | ||||
; CHECK-LABEL: @func_16( | ; CHECK-LABEL: @func_16( | ||||
; CHECK-NEXT: entry: | ; CHECK-NEXT: entry: | ||||
; CHECK-NEXT: br i1 %a, label %entry.split, label %abort0.split | ; CHECK-NEXT: br i1 %a, label %entry.split, label %abort0.split | ||||
; CHECK: entry.split: | ; CHECK: entry.split: | ||||
; CHECK-NEXT: br i1 %b, label %for.body, label %abort1.split | ; CHECK-NEXT: br i1 %b, label %entry.split.split, label %abort1.split | ||||
; CHECK: for.body: | ; CHECK: for.body: | ||||
; CHECK-NEXT: br label %for.body | ; CHECK-NEXT: br label %for.body | ||||
; CHECK: abort0.split: | ; CHECK: abort0.split: | ||||
; CHECK-NEXT: call void @end0() [[NOR_NUW:#[0-9]+]] | ; CHECK-NEXT: call void @end0() [[NOR_NUW:#[0-9]+]] | ||||
; CHECK-NEXT: unreachable | ; CHECK-NEXT: unreachable | ||||
Show All 31 Lines |