; RUN: opt -S -codegenprepare -mtriple=x86_64-linux < %s | FileCheck %s ; ; Ensure that blocks that only contain @llvm.assume are removed completely ; during CodeGenPrepare. ; CHECK-LABEL: @simple( ; CHECK-NEXT: end: ; CHECK-NEXT: ret void define void @simple(i64 %addr, i1 %assumption) { %cmp1 = icmp eq i64 %addr, 0 br i1 %cmp1, label %do_assume, label %end do_assume: tail call void @llvm.assume(i1 %assumption) br label %end end: ret void } ; CHECK-LABEL: @complex_assume( ; CHECK-NEXT: end: ; CHECK-NEXT: ret void define void @complex_assume(i64 %addr, i1 %assumption_a, i1 %assumption_b, i64 %val_a, i64 %val_b) { %cmp1 = icmp eq i64 %addr, 0 br i1 %cmp1, label %do_assume, label %end do_assume: call void @llvm.assume(i1 %assumption_a) call void @llvm.assume(i1 %assumption_b) %val_xor = xor i64 %val_a, %val_b %val_shifted = lshr i64 %val_xor, 7 %assumption_c = trunc i64 %val_shifted to i1 call void @llvm.assume(i1 %assumption_c) %assumption_d = call i1 @readonly_func(i64 %val_b) call void @llvm.assume(i1 %assumption_d) br label %end end: ret void } declare void @llvm.assume(i1 noundef) declare i1 @readonly_func(i64) nounwind readonly willreturn;