1; RUN: opt -S -jump-threading -dce < %s | FileCheck %s 2target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 3target triple = "x86_64-unknown-linux-gnu" 4 5; Function Attrs: nounwind uwtable 6define i32 @test1(i32 %a, i32 %b) #0 { 7entry: 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 19if.then: ; preds = %entry 20 %cmp2 = icmp sgt i32 %a, 3 21 br i1 %cmp2, label %if.then3, label %return 22 23if.then3: ; preds = %if.then 24 tail call void (...) @bar() #1 25 br label %return 26 27if.else: ; preds = %entry 28 tail call void (...) @car() #1 29 br label %return 30 31return: ; 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 36define i32 @test2(i32 %a) #0 { 37entry: 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 50if.then: ; preds = %entry 51 tail call void (...) @bar() #1 52 br label %return 53 54return: ; 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 60declare void @llvm.assume(i1) #1 61 62declare void @bar(...) 63 64declare void @car(...) 65 66attributes #0 = { nounwind uwtable } 67attributes #1 = { nounwind } 68 69