47 lines · plain
1; RUN: opt -S -passes='require<profile-summary>,function(codegenprepare)' -mtriple=x86_64-linux < %s | FileCheck %s2;3; Ensure that blocks that only contain @llvm.assume are removed completely4; during CodeGenPrepare.5 6; CHECK-LABEL: @simple(7; CHECK-NEXT: end:8; CHECK-NEXT: ret void9define void @simple(i64 %addr, i1 %assumption) {10 %cmp1 = icmp eq i64 %addr, 011 br i1 %cmp1, label %do_assume, label %end12 13do_assume:14 tail call void @llvm.assume(i1 %assumption)15 br label %end16 17end:18 ret void19}20 21; CHECK-LABEL: @complex_assume(22; CHECK-NEXT: end:23; CHECK-NEXT: ret void24define void @complex_assume(i64 %addr, i1 %assumption_a, i1 %assumption_b,25 i64 %val_a, i64 %val_b) {26 %cmp1 = icmp eq i64 %addr, 027 br i1 %cmp1, label %do_assume, label %end28 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_b33 %val_shifted = lshr i64 %val_xor, 734 %assumption_c = trunc i64 %val_shifted to i135 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 %end39 40end:41 ret void42}43 44declare void @llvm.assume(i1 noundef)45declare i1 @readonly_func(i64) nounwind readonly willreturn;46 47