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