70 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=jump-threading -S < %s | FileCheck %s3 4declare void @f()5declare void @g()6declare void @h()7 8define i32 @test(i1 %cond, i1 %a, i1 %b) {9; CHECK-LABEL: @test(10; CHECK-NEXT: br i1 [[COND:%.*]], label [[A:%.*]], label [[C:%.*]]11; CHECK: A:12; CHECK-NEXT: call void @f()13; CHECK-NEXT: br i1 [[A:%.*]], label [[EXIT1:%.*]], label [[EXIT2:%.*]]14; CHECK: C:15; CHECK-NEXT: call void @g()16; CHECK-NEXT: br i1 [[B:%.*]], label [[EXIT1]], label [[EXIT2]]17; CHECK: EXIT1:18; CHECK-NEXT: ret i32 019; CHECK: EXIT2:20; CHECK-NEXT: ret i32 121;22 br i1 %cond, label %A, label %B23A:24 call void @f()25 br label %C26B:27 call void @g()28 br label %C29C:30 %p = phi i1 [%a, %A], [%b, %B] ; Check that this is removed31 br i1 %p, label %EXIT1, label %EXIT232EXIT1:33 ret i32 034EXIT2:35 ret i32 136}37 38define i32 @test2(i1 %cond, i1 %a, i1 %b) {39; CHECK-LABEL: @test2(40; CHECK-NEXT: br i1 [[COND:%.*]], label [[A:%.*]], label [[C:%.*]]41; CHECK: A:42; CHECK-NEXT: call void @f()43; CHECK-NEXT: [[P_FR1:%.*]] = freeze i1 [[A:%.*]]44; CHECK-NEXT: br i1 [[P_FR1]], label [[EXIT1:%.*]], label [[EXIT2:%.*]]45; CHECK: C:46; CHECK-NEXT: call void @g()47; CHECK-NEXT: [[P_FR:%.*]] = freeze i1 [[B:%.*]]48; CHECK-NEXT: br i1 [[P_FR]], label [[EXIT1]], label [[EXIT2]]49; CHECK: EXIT1:50; CHECK-NEXT: ret i32 051; CHECK: EXIT2:52; CHECK-NEXT: ret i32 153;54 br i1 %cond, label %A, label %B55A:56 call void @f()57 br label %C58B:59 call void @g()60 br label %C61C:62 %p = phi i1 [%a, %A], [%b, %B] ; Check that this is removed63 %p.fr = freeze i1 %p64 br i1 %p.fr, label %EXIT1, label %EXIT265EXIT1:66 ret i32 067EXIT2:68 ret i32 169}70