xref: /llvm-project/llvm/test/Transforms/CodeGenPrepare/X86/remove-assume-block.ll (revision f1ec0d12bb0843f0deab83ef2b5cf1339cbc4f0b)
1*f1ec0d12SNick Anderson; RUN: opt -S -passes='require<profile-summary>,function(codegenprepare)' -mtriple=x86_64-linux < %s | FileCheck %s
2202ae987SJann Horn;
3202ae987SJann Horn; Ensure that blocks that only contain @llvm.assume are removed completely
4202ae987SJann Horn; during CodeGenPrepare.
5202ae987SJann Horn
6202ae987SJann Horn; CHECK-LABEL: @simple(
7202ae987SJann Horn; CHECK-NEXT: end:
8202ae987SJann Horn; CHECK-NEXT: ret void
9202ae987SJann Horndefine void @simple(i64 %addr, i1 %assumption) {
10202ae987SJann Horn  %cmp1 = icmp eq i64 %addr, 0
11202ae987SJann Horn  br i1 %cmp1, label %do_assume, label %end
12202ae987SJann Horn
13202ae987SJann Horndo_assume:
14202ae987SJann Horn  tail call void @llvm.assume(i1 %assumption)
15202ae987SJann Horn  br label %end
16202ae987SJann Horn
17202ae987SJann Hornend:
18202ae987SJann Horn  ret void
19202ae987SJann Horn}
20202ae987SJann Horn
21202ae987SJann Horn; CHECK-LABEL: @complex_assume(
22202ae987SJann Horn; CHECK-NEXT: end:
23202ae987SJann Horn; CHECK-NEXT: ret void
24202ae987SJann Horndefine void @complex_assume(i64 %addr, i1 %assumption_a, i1 %assumption_b,
25202ae987SJann Horn                          i64 %val_a, i64 %val_b) {
26202ae987SJann Horn  %cmp1 = icmp eq i64 %addr, 0
27202ae987SJann Horn  br i1 %cmp1, label %do_assume, label %end
28202ae987SJann Horn
29202ae987SJann Horndo_assume:
30202ae987SJann Horn  call void @llvm.assume(i1 %assumption_a)
31202ae987SJann Horn  call void @llvm.assume(i1 %assumption_b)
32202ae987SJann Horn  %val_xor = xor i64 %val_a, %val_b
33202ae987SJann Horn  %val_shifted = lshr i64 %val_xor, 7
34202ae987SJann Horn  %assumption_c = trunc i64 %val_shifted to i1
35202ae987SJann Horn  call void @llvm.assume(i1 %assumption_c)
36202ae987SJann Horn  %assumption_d = call i1 @readonly_func(i64 %val_b)
37202ae987SJann Horn  call void @llvm.assume(i1 %assumption_d)
38202ae987SJann Horn  br label %end
39202ae987SJann Horn
40202ae987SJann Hornend:
41202ae987SJann Horn  ret void
42202ae987SJann Horn}
43202ae987SJann Horn
44202ae987SJann Horndeclare void @llvm.assume(i1 noundef)
45202ae987SJann Horndeclare i1 @readonly_func(i64) nounwind readonly willreturn;
46202ae987SJann Horn
47