1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -passes=gvn -S | FileCheck %s 3 4define i1 @f(i1 %a) { 5; CHECK-LABEL: @f( 6; CHECK-NEXT: [[B:%.*]] = freeze i1 [[A:%.*]] 7; CHECK-NEXT: ret i1 [[B]] 8; 9 %b = freeze i1 %a 10 %c = freeze i1 %a 11 %d = and i1 %b, %c 12 ret i1 %d 13} 14 15define void @f_multipleuses(i1 %a) { 16; CHECK-LABEL: @f_multipleuses( 17; CHECK-NEXT: [[B:%.*]] = freeze i1 [[A:%.*]] 18; CHECK-NEXT: call void @use1(i1 [[B]]) 19; CHECK-NEXT: call void @use1(i1 [[B]]) 20; CHECK-NEXT: call void @use1(i1 [[B]]) 21; CHECK-NEXT: ret void 22; 23 %b = freeze i1 %a 24 %c = freeze i1 %a 25 call void @use1(i1 %b) 26 call void @use1(i1 %c) 27 call void @use1(i1 %c) 28 ret void 29} 30 31define void @f_dom(i1 %cond, i1 %a) { 32; CHECK-LABEL: @f_dom( 33; CHECK-NEXT: br i1 [[COND:%.*]], label [[BB1:%.*]], label [[BB2:%.*]] 34; CHECK: BB1: 35; CHECK-NEXT: [[X:%.*]] = freeze i1 [[A:%.*]] 36; CHECK-NEXT: call void @use1(i1 [[X]]) 37; CHECK-NEXT: ret void 38; CHECK: BB2: 39; CHECK-NEXT: [[Y:%.*]] = freeze i1 [[A]] 40; CHECK-NEXT: call void @use2(i1 [[Y]]) 41; CHECK-NEXT: ret void 42; 43 br i1 %cond, label %BB1, label %BB2 44BB1: 45 %x = freeze i1 %a 46 call void @use1(i1 %x) 47 ret void 48BB2: 49 %y = freeze i1 %a 50 call void @use2(i1 %y) ; cannot use %x 51 ret void 52} 53declare void @use1(i1) 54declare void @use2(i1) 55 56