brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · 9da46bd Raw
135 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes='default<O1>' -S < %s | FileCheck %s3; RUN: opt -passes='default<O2>' -S < %s | FileCheck %s4; RUN: opt -passes="default<O3>" -S < %s | FileCheck %s5 6; We are worse at propagating correlation facts when in select form7; as compared to the PHI form, so if we lower switches to early,8; we may make further optimizations problematic.9 10; propagate value to bb2.11define i64 @test1(i64 %x) {12; CHECK-LABEL: @test1(13; CHECK-NEXT:  entry:14; CHECK-NEXT:    [[SWITCH_SELECTCMP:%.*]] = icmp eq i64 [[X:%.*]], 015; CHECK-NEXT:    [[SWITCH_SELECT:%.*]] = select i1 [[SWITCH_SELECTCMP]], i64 0, i64 1016; CHECK-NEXT:    ret i64 [[SWITCH_SELECT]]17;18entry:19  switch i64 %x, label %bb3 [20  i64 0, label %bb121  i64 1, label %bb222  ]23bb1:24  ret i64 025bb2:26  %0 = icmp eq i64 %x, 10027  br i1 %0, label %bb4, label %bb528bb3:29  unreachable30bb4:31  ret i64 20032bb5:33  ret i64 1034}35 36; propagate value both to bb1 and bb2.37define i64 @test2(i64 %x) {38; CHECK-LABEL: @test2(39; CHECK-NEXT:  entry:40; CHECK-NEXT:    [[SWITCH_SELECTCMP:%.*]] = icmp eq i64 [[X:%.*]], 141; CHECK-NEXT:    [[SWITCH_SELECT:%.*]] = select i1 [[SWITCH_SELECTCMP]], i64 0, i64 1042; CHECK-NEXT:    ret i64 [[SWITCH_SELECT]]43;44entry:45  switch i64 %x, label %bb3 [46  i64 1, label %bb147  i64 2, label %bb248  ]49bb1:50  %0 = icmp eq i64 %x, 10051  br i1 %0, label %bb4, label %return52return:53  ret i64 054bb2:55  %1 = icmp eq i64 %x, 10156  br i1 %1, label %bb4, label %bb557bb3:58  unreachable59bb4:60  ret i64 20061bb5:62  ret i64 1063}64 65define i64 @test3(i64 %x) {66; CHECK-LABEL: @test3(67; CHECK-NEXT:  entry:68; CHECK-NEXT:    [[COND:%.*]] = icmp eq i64 [[X:%.*]], 169; CHECK-NEXT:    [[SPEC_SELECT:%.*]] = select i1 [[COND]], i64 10, i64 070; CHECK-NEXT:    ret i64 [[SPEC_SELECT]]71;72entry:73  switch i64 %x, label %bb1 [74  i64 1, label %bb275  ]76bb1:77  ret i64 078bb2:79  %0 = icmp eq i64 %x, 10080  br i1 %0, label %bb4, label %bb581bb4:82  ret i64 20083bb5:84  ret i64 1085}86 87; bb2 has two predecessors with case value 1 and 2.88define i64 @test_fail1(i64 %x) {89; CHECK-LABEL: @test_fail1(90; CHECK-NEXT:  entry:91; CHECK-NEXT:    [[SWITCH:%.*]] = icmp eq i64 [[X:%.*]], 092; CHECK-NEXT:    [[SPEC_SELECT:%.*]] = select i1 [[SWITCH]], i64 0, i64 1093; CHECK-NEXT:    ret i64 [[SPEC_SELECT]]94;95entry:96  switch i64 %x, label %bb3 [97  i64 0, label %bb198  i64 1, label %bb299  i64 2, label %bb2100  ]101bb1:102  ret i64 0103bb2:104  %0 = icmp eq i64 %x, 100105  br i1 %0, label %bb4, label %bb5106bb3:107  unreachable108bb4:109  ret i64 200110bb5:111  ret i64 10112}113 114; return block has two predecessors.115define i64 @test_fail2(i64 %x) {116; CHECK-LABEL: @test_fail2(117; CHECK-NEXT:  entry:118; CHECK-NEXT:    [[SWITCH_SELECTCMP:%.*]] = icmp eq i64 [[X:%.*]], 0119; CHECK-NEXT:    [[SWITCH_SELECT:%.*]] = select i1 [[SWITCH_SELECTCMP]], i64 2, i64 1120; CHECK-NEXT:    ret i64 [[SWITCH_SELECT]]121;122entry:123  switch i64 %x, label %bb2 [124  i64 0, label %bb1125  i64 1, label %return126  ]127bb1:128  br label %return129return:130  %retval.0 = phi i64 [ %x, %entry ], [ 2, %bb1 ]131  ret i64 %retval.0132bb2:133  unreachable134}135