44 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=licm -S < %s | FileCheck %s3 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 %loop15loop:16 %b = freeze i1 %a17 call void @use(i1 %b)18 br label %loop19}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 %loop34loop:35 %fr = freeze i1 %a36 %c = call i1 @cond()37 br i1 %c, label %loop, label %exit38exit:39 ret i1 %fr40}41 42declare i1 @cond()43declare void @use(i1)44