summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen
diff options
context:
space:
mode:
authorYonghong Song <yhs@fb.com>2018-03-13 06:47:02 +0000
committerYonghong Song <yhs@fb.com>2018-03-13 06:47:02 +0000
commit905d13c1230685eb11b2a00b26773f5f052e80db (patch)
treea129820224a17d002c54bd5515eadeb7d7b1b517 /llvm/test/CodeGen
parent89e47ac67150ec2287db0d4541196d0a4d3f96cc (diff)
downloadbcm5719-llvm-905d13c1230685eb11b2a00b26773f5f052e80db.tar.gz
bcm5719-llvm-905d13c1230685eb11b2a00b26773f5f052e80db.zip
bpf: J*_RR should check both operands
There is a mistake in current code that we "break" out the optimization when the first operand of J*_RR doesn't qualify the elimination. This caused some elimination opportunities missed, for example the one in the testcase. The code should just fall through to handle the second operand. Signed-off-by: Jiong Wang <jiong.wang@netronome.com> Signed-off-by: Yonghong Song <yhs@fb.com> llvm-svn: 327366
Diffstat (limited to 'llvm/test/CodeGen')
-rw-r--r--llvm/test/CodeGen/BPF/32-bit-subreg-peephole.ll20
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/BPF/32-bit-subreg-peephole.ll b/llvm/test/CodeGen/BPF/32-bit-subreg-peephole.ll
index 6b3edaf9cf9..78c344b1577 100644
--- a/llvm/test/CodeGen/BPF/32-bit-subreg-peephole.ll
+++ b/llvm/test/CodeGen/BPF/32-bit-subreg-peephole.ll
@@ -8,6 +8,14 @@
; return d;
; }
;
+; long long select_u_2(unsigned a, unsigned long long b, long long c, long long d)
+; {
+; if (a > b)
+; return c;
+; else
+; return d;
+; }
+;
; long long select_s(signed a, signed b, long long c, long long d)
; {
; if (a > b)
@@ -41,6 +49,18 @@ entry:
}
; Function Attrs: norecurse nounwind readnone
+define dso_local i64 @select_u_2(i32 %a, i64 %b, i64 %c, i64 %d) local_unnamed_addr #0 {
+; CHECK-LABEL: select_u_2:
+entry:
+ %conv = zext i32 %a to i64
+; CHECK-NOT: r{{[0-9]+}} <<= 32
+; CHECK-NOT: r{{[0-9]+}} >>= 32
+ %cmp = icmp ugt i64 %conv, %b
+ %c.d = select i1 %cmp, i64 %c, i64 %d
+ ret i64 %c.d
+}
+
+; Function Attrs: norecurse nounwind readnone
define dso_local i64 @select_s(i32 %a, i32 %b, i64 %c, i64 %d) local_unnamed_addr #0 {
; CHECK-LABEL: select_s:
entry:
OpenPOWER on IntegriCloud