[DAGCombiner] Add target hook function to decide folding (mul (add x, c1), c2)
[llvm-project.git] / llvm / test / Transforms / LICM / freeze.ll
blobf17c270c97bec75e79f23d1ffbee54b505cfe092
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -licm -S < %s | FileCheck %s
4 define 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]]
13 entry:
14   br label %loop
15 loop:
16   %b = freeze i1 %a
17   call void @use(i1 %b)
18   br label %loop
21 define 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]]
32 entry:
33   br label %loop
34 loop:
35   %fr = freeze i1 %a
36   %c = call i1 @cond()
37   br i1 %c, label %loop, label %exit
38 exit:
39   ret i1 %fr
42 declare i1 @cond()
43 declare void @use(i1)