1 ; RUN: opt -S -jump-threading -dce < %s | FileCheck %s 2 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 3 target triple = "x86_64-unknown-linux-gnu" 4 5 ; Function Attrs: nounwind uwtable 6 define i32 @test1(i32 %a, i32 %b) #0 { 7 entry: 8 %cmp = icmp sgt i32 %a, 5 9 tail call void @llvm.assume(i1 %cmp) 10 %cmp1 = icmp sgt i32 %b, 1234 11 br i1 %cmp1, label %if.then, label %if.else 12 13 ; CHECK-LABEL: @test1 14 ; CHECK: icmp sgt i32 %a, 5 15 ; CHECK: call void @llvm.assume 16 ; CHECK-NOT: icmp sgt i32 %a, 3 17 ; CHECK: ret i32 18 19 if.then: ; preds = %entry 20 %cmp2 = icmp sgt i32 %a, 3 21 br i1 %cmp2, label %if.then3, label %return 22 23 if.then3: ; preds = %if.then 24 tail call void (...) @bar() #1 25 br label %return 26 27 if.else: ; preds = %entry 28 tail call void (...) @car() #1 29 br label %return 30 31 return: ; preds = %if.else, %if.then, %if.then3 32 %retval.0 = phi i32 [ 1, %if.then3 ], [ 0, %if.then ], [ 0, %if.else ] 33 ret i32 %retval.0 34 } 35 36 define i32 @test2(i32 %a) #0 { 37 entry: 38 %cmp = icmp sgt i32 %a, 5 39 tail call void @llvm.assume(i1 %cmp) 40 %cmp1 = icmp sgt i32 %a, 3 41 br i1 %cmp1, label %if.then, label %return 42 43 ; CHECK-LABEL: @test2 44 ; CHECK: icmp sgt i32 %a, 5 45 ; CHECK: tail call void @llvm.assume 46 ; CHECK: tail call void (...) @bar() 47 ; CHECK: ret i32 1 48 49 50 if.then: ; preds = %entry 51 tail call void (...) @bar() #1 52 br label %return 53 54 return: ; preds = %entry, %if.then 55 %retval.0 = phi i32 [ 1, %if.then ], [ 0, %entry ] 56 ret i32 %retval.0 57 } 58 59 ; Function Attrs: nounwind 60 declare void @llvm.assume(i1) #1 61 62 declare void @bar(...) 63 64 declare void @car(...) 65 66 attributes #0 = { nounwind uwtable } 67 attributes #1 = { nounwind } 68 69