xref: /llvm-project/llvm/test/Transforms/LICM/freeze.ll (revision 80e8f2beeb954f8c241897099bb01b24da400e8a)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -passes=licm -S < %s | FileCheck %s
3
4define void @hoist(i1 %a) {
5; CHECK-LABEL: @hoist(
6; CHECK-NEXT:  entry:
7; CHECK-NEXT:    [[B:%.*]] = freeze i1 [[A:%.*]]
8; CHECK-NEXT:    br label [[LOOP:%.*]]
9; CHECK:       loop:
10; CHECK-NEXT:    call void @use(i1 [[B]])
11; CHECK-NEXT:    br label [[LOOP]]
12;
13entry:
14  br label %loop
15loop:
16  %b = freeze i1 %a
17  call void @use(i1 %b)
18  br label %loop
19}
20
21define i1 @sink(i1 %a) {
22; CHECK-LABEL: @sink(
23; CHECK-NEXT:  entry:
24; CHECK-NEXT:    br label [[LOOP:%.*]]
25; CHECK:       loop:
26; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()
27; CHECK-NEXT:    br i1 [[C]], label [[LOOP]], label [[EXIT:%.*]]
28; CHECK:       exit:
29; CHECK-NEXT:    [[FR_LE:%.*]] = freeze i1 [[A:%.*]]
30; CHECK-NEXT:    ret i1 [[FR_LE]]
31;
32entry:
33  br label %loop
34loop:
35  %fr = freeze i1 %a
36  %c = call i1 @cond()
37  br i1 %c, label %loop, label %exit
38exit:
39  ret i1 %fr
40}
41
42declare i1 @cond()
43declare void @use(i1)
44