brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 8b7414a Raw
120 lines · plain
1; RUN: opt < %s -passes=correlated-propagation -S | FileCheck %s2 3; Removed several cases from switch.4define i32 @switch1(i32 %s) {5; CHECK-LABEL: @switch1(6; CHECK-NEXT:  entry:7; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i32 [[S:%.*]], 08; CHECK-NEXT:    br i1 [[CMP]], label [[NEGATIVE:%.*]], label [[OUT:%.*]]9;10entry:11  %cmp = icmp slt i32 %s, 012  br i1 %cmp, label %negative, label %out13 14negative:15; CHECK:       negative:16; CHECK-NEXT:    switch i32 [[S]], label [[OUT]] [17; CHECK-NEXT:    i32 -2, label [[NEXT:%.*]]18; CHECK-NEXT:    i32 -1, label [[NEXT]]19  switch i32 %s, label %out [20  i32 0, label %out21  i32 1, label %out22  i32 -1, label %next23  i32 -2, label %next24  i32 2, label %out25  i32 3, label %out26; CHECK-NEXT: !prof ![[MD0:[0-9]+]]27  ], !prof !{!"branch_weights", i32 99, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6}28 29out:30  %p = phi i32 [ 1, %entry ], [ -1, %negative ], [ -1, %negative ], [ -1, %negative ], [ -1, %negative ], [ -1, %negative ]31  ret i32 %p32 33next:34  %q = phi i32 [ 0, %negative ], [ 0, %negative ]35  ret i32 %q36}37 38; Removed all cases from switch.39define i32 @switch2(i32 %s) {40; CHECK-LABEL: @switch2(41; CHECK-NEXT:  entry:42; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[S:%.*]], 043; CHECK-NEXT:    br i1 [[CMP]], label [[POSITIVE:%.*]], label [[OUT:%.*]]44;45entry:46  %cmp = icmp sgt i32 %s, 047  br i1 %cmp, label %positive, label %out48 49positive:50  switch i32 %s, label %out [51  i32 0, label %out52  i32 -1, label %next53  i32 -2, label %next54  ], !prof !{!"branch_weights", i32 99, i32 1, i32 2, i32 3}55 56out:57  %p = phi i32 [ -1, %entry ], [ 1, %positive ], [ 1, %positive ]58  ret i32 %p59 60next:61  %q = phi i32 [ 0, %positive ], [ 0, %positive ]62  ret i32 %q63}64 65; Change switch into conditional branch.66define i32 @switch3(i32 %s) {67; CHECK-LABEL: @switch3(68;69entry:70  %cmp = icmp sgt i32 %s, 071  br i1 %cmp, label %positive, label %out72 73positive:74; CHECK:      positive:75; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i32 %s, 176; CHECK-NEXT:    br i1 [[CMP]], label [[NEXT:%.*]], label [[OUT:%.*]], !prof ![[MD1:[0-9]+]]77  switch i32 %s, label %out [78  i32 1, label %next79  i32 -1, label %next80  i32 -2, label %next81  ], !prof !{!"branch_weights", i32 99, i32 1, i32 2, i32 3}82 83out:84  %p = phi i32 [ -1, %entry ], [ 1, %positive ]85  ret i32 %p86 87next:88  %q = phi i32 [ 0, %positive ], [ 0, %positive ], [ 0, %positive ]89  ret i32 %q90}91 92; Removed all cases from switch.93define i32 @switch4(i32 %s) {94; CHECK-LABEL: @switch4(95; CHECK-NEXT:  entry:96; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i32 [[S:%.*]], 097; CHECK-NEXT:    br i1 [[CMP]], label [[NEGATIVE:%.*]], label [[OUT:%.*]]98;99entry:100  %cmp = icmp slt i32 %s, 0101  br i1 %cmp, label %negative, label %out102 103negative:104; CHECK:       negative:105; CHECK-NEXT:    br label %out106  switch i32 %s, label %out [107  i32 0, label %out108  i32 1, label %out109  i32 2, label %out110  i32 3, label %out111  ], !prof !{!"branch_weights", i32 99, i32 1, i32 2, i32 3, i32 4}112 113out:114  %p = phi i32 [ 1, %entry ], [ -1, %negative ], [ -1, %negative ], [ -1, %negative ], [ -1, %negative ], [ -1, %negative ]115  ret i32 %p116}117 118; CHECK: ![[MD0]] = !{!"branch_weights", i32 99, i32 4, i32 3}119; CHECK: ![[MD1]] = !{!"branch_weights", i32 1, i32 99}120