1; RUN: opt -S -passes='require<profile-summary>,function(codegenprepare)' -mtriple=x86_64-linux < %s | FileCheck %s 2; 3; Ensure that blocks that only contain @llvm.assume are removed completely 4; during CodeGenPrepare. 5 6; CHECK-LABEL: @simple( 7; CHECK-NEXT: end: 8; CHECK-NEXT: ret void 9define void @simple(i64 %addr, i1 %assumption) { 10 %cmp1 = icmp eq i64 %addr, 0 11 br i1 %cmp1, label %do_assume, label %end 12 13do_assume: 14 tail call void @llvm.assume(i1 %assumption) 15 br label %end 16 17end: 18 ret void 19} 20 21; CHECK-LABEL: @complex_assume( 22; CHECK-NEXT: end: 23; CHECK-NEXT: ret void 24define void @complex_assume(i64 %addr, i1 %assumption_a, i1 %assumption_b, 25 i64 %val_a, i64 %val_b) { 26 %cmp1 = icmp eq i64 %addr, 0 27 br i1 %cmp1, label %do_assume, label %end 28 29do_assume: 30 call void @llvm.assume(i1 %assumption_a) 31 call void @llvm.assume(i1 %assumption_b) 32 %val_xor = xor i64 %val_a, %val_b 33 %val_shifted = lshr i64 %val_xor, 7 34 %assumption_c = trunc i64 %val_shifted to i1 35 call void @llvm.assume(i1 %assumption_c) 36 %assumption_d = call i1 @readonly_func(i64 %val_b) 37 call void @llvm.assume(i1 %assumption_d) 38 br label %end 39 40end: 41 ret void 42} 43 44declare void @llvm.assume(i1 noundef) 45declare i1 @readonly_func(i64) nounwind readonly willreturn; 46 47