bpf: Improve expanding logic in LowerSELECT_CC
LowerSELECT_CC is not generating optimal Select_Ri pattern at the moment. It
is not guaranteed to place ConstantNode at RHS which would miss matching
Select_Ri.
A new testcase added into the existing select_ri.ll, also there is an
existing case in cmp.ll which would be improved to use Select_Ri after this
patch, it is adjusted accordingly.
Reported-by: Alexei Starovoitov <alexei.starovoitov@gmail.com>
Reviewed-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Jiong Wang <jiong.wang@netronome.com>
llvm-svn: 324560
diff --git a/llvm/test/CodeGen/BPF/cmp.ll b/llvm/test/CodeGen/BPF/cmp.ll
index 66345ab..e12f4a9 100644
--- a/llvm/test/CodeGen/BPF/cmp.ll
+++ b/llvm/test/CodeGen/BPF/cmp.ll
@@ -97,7 +97,7 @@
%a.b = select i1 %1, i8 %a, i8 %b
ret i8 %a.b
; CHECK-LABEL:minu:
-; CHECK: if r3 > r1
+; CHECK: if r{{[0-9]+}} {{<|>}} 100
}
; Function Attrs: nounwind readnone uwtable
diff --git a/llvm/test/CodeGen/BPF/select_ri.ll b/llvm/test/CodeGen/BPF/select_ri.ll
index 7b1f852..dbd2111 100644
--- a/llvm/test/CodeGen/BPF/select_ri.ll
+++ b/llvm/test/CodeGen/BPF/select_ri.ll
@@ -60,3 +60,28 @@
; Function Attrs: nounwind readonly
declare i64 @llvm.bpf.load.word(i8*, i64) #1
+
+; Source file:
+; int m, n;
+; int test2() {
+; int a = m;
+; if (a < 6)
+; a = n;
+; return a;
+; }
+
+@m = common local_unnamed_addr global i32 0, align 4
+@n = common local_unnamed_addr global i32 0, align 4
+
+; Function Attrs: norecurse nounwind readonly
+define i32 @test2() local_unnamed_addr #0 {
+entry:
+ %0 = load i32, i32* @m, align 4
+ %cmp = icmp slt i32 %0, 6
+; CHECK: if r{{[0-9]+}} s{{<|>}} 6 goto
+ %1 = load i32, i32* @n, align 4
+ %spec.select = select i1 %cmp, i32 %1, i32 %0
+ ret i32 %spec.select
+}
+
+attributes #0 = { norecurse nounwind readonly }