brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · 6b7a122 Raw
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