95 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 @f2()6declare void @f3()7 8; br on cond.fr should be removed & ENTRY -> A -> B should be threaded9define i32 @simple(i1 %cond) {10; CHECK-LABEL: @simple(11; CHECK-NEXT: ENTRY:12; CHECK-NEXT: br i1 [[COND:%.*]], label [[B:%.*]], label [[EXIT:%.*]]13; CHECK: B:14; CHECK-NEXT: call void @f()15; CHECK-NEXT: ret i32 116; CHECK: EXIT:17; CHECK-NEXT: ret i32 018;19ENTRY:20 %cond.fr = freeze i1 %cond21 br i1 %cond, label %A, label %EXIT22A:23 br i1 %cond.fr, label %B, label %EXIT24B:25 call void @f()26 ret i32 127EXIT:28 ret i32 029}30 31define void @switch(i32 %cond) {32; CHECK-LABEL: @switch(33; CHECK-NEXT: ENTRY:34; CHECK-NEXT: [[COND_FR:%.*]] = freeze i32 [[COND:%.*]]35; CHECK-NEXT: switch i32 [[COND]], label [[DEFAULT:%.*]] [36; CHECK-NEXT: i32 0, label [[A_TAKEN:%.*]]37; CHECK-NEXT: i32 1, label [[B_TAKEN:%.*]]38; CHECK-NEXT: ]39; CHECK: DEFAULT:40; CHECK-NEXT: switch i32 [[COND_FR]], label [[PRESERVED1:%.*]] [41; CHECK-NEXT: i32 0, label [[PRESERVED2:%.*]]42; CHECK-NEXT: ]43; CHECK: PRESERVED1:44; CHECK-NEXT: call void @f()45; CHECK-NEXT: ret void46; CHECK: PRESERVED2:47; CHECK-NEXT: call void @f2()48; CHECK-NEXT: ret void49; CHECK: A_TAKEN:50; CHECK-NEXT: call void @f()51; CHECK-NEXT: ret void52; CHECK: B_TAKEN:53; CHECK-NEXT: call void @f()54; CHECK-NEXT: ret void55;56ENTRY:57 %cond.fr = freeze i32 %cond58 switch i32 %cond, label %DEFAULT [59 i32 0, label %A60 i32 1, label %B61 ]62DEFAULT:63 switch i32 %cond.fr, label %PRESERVED1 [64 i32 0, label %PRESERVED265 ]66PRESERVED1:67 call void @f()68 ret void69PRESERVED2:70 call void @f2()71 ret void72 73A:74 switch i32 %cond.fr, label %A_NOTTAKEN [75 i32 0, label %A_TAKEN76 ]77A_TAKEN:78 call void @f()79 ret void80A_NOTTAKEN:81 call void @f2()82 ret void83 84B:85 switch i32 %cond.fr, label %B_TAKEN [86 i32 0, label %B_NOTTAKEN87 ]88B_TAKEN:89 call void @f()90 ret void91B_NOTTAKEN:92 call void @f2()93 ret void94}95