xref: /llvm-project/llvm/test/Transforms/JumpThreading/is_constant.ll (revision 07e34d2de565a88da2724d52cdcf47b4bca873db)
1*07e34d2dSMatt Arsenault; RUN: opt -S -passes=jump-threading,verify < %s | FileCheck %s
2fa496ce3SBill Wendling
3fa496ce3SBill Wendling; This is reduced from the Linux net/ipv4/tcp.c file built with ASAN. We
4fa496ce3SBill Wendling; don't want jump threading to split up a basic block which has a PHI node with
5fa496ce3SBill Wendling; at least one constant incoming value, whose value is used by an is.constant
6fa496ce3SBill Wendling; intrinsic with non-local uses. It could lead to later passes no DCE'ing
7fa496ce3SBill Wendling; invalid paths.
8fa496ce3SBill Wendling
9fa496ce3SBill Wendling; CHECK-LABEL:    define void @test1(
10fa496ce3SBill Wendling; CHECK-LABEL:    bb_cond:
11fa496ce3SBill Wendling; CHECK-NOT:        %sext = phi i64 [ %var, %entry ]
12fa496ce3SBill Wendling; CHECK-NEXT:       %sext = phi i64 [ 24, %bb_constant ], [ %var, %entry ]
13fa496ce3SBill Wendling; CHECK-NEXT:       %cond2 = icmp
14fa496ce3SBill Wendling; CHECK-NEXT:       call i1 @llvm.is.constant.i64(
15fa496ce3SBill Wendling
16fa496ce3SBill Wendlingdefine void @test1(i32 %a, i64 %var) {
17fa496ce3SBill Wendlingentry:
18fa496ce3SBill Wendling  %cond1 = icmp ugt i32 %a, 24
19fa496ce3SBill Wendling  br i1 %cond1, label %bb_constant, label %bb_cond
20fa496ce3SBill Wendling
21fa496ce3SBill Wendlingbb_constant:
22fa496ce3SBill Wendling  br label %bb_cond
23fa496ce3SBill Wendling
24fa496ce3SBill Wendlingbb_cond:
25fa496ce3SBill Wendling  %sext = phi i64 [ 24, %bb_constant ], [ %var, %entry ]
26fa496ce3SBill Wendling  %cond2 = icmp ugt i64 %sext, 24
27fa496ce3SBill Wendling  %is_constant = call i1 @llvm.is.constant.i64(i64 %sext)
28fa496ce3SBill Wendling  br i1 %cond2, label %bb_then, label %bb_else
29fa496ce3SBill Wendling
30fa496ce3SBill Wendlingbb_then:
31fa496ce3SBill Wendling  unreachable
32fa496ce3SBill Wendling
33fa496ce3SBill Wendlingbb_else:
34fa496ce3SBill Wendling  unreachable
35fa496ce3SBill Wendling}
36fa496ce3SBill Wendling
37fa496ce3SBill Wendling; Function Attrs: nounwind readnone willreturn
38fa496ce3SBill Wendlingdeclare i1 @llvm.is.constant.i64(i64) #0
39fa496ce3SBill Wendling
40fa496ce3SBill Wendlingattributes #0 = { convergent nounwind readnone willreturn }
41