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