[llvm] [AArch64] Improve codegen of vectorised early exit loops (PR #119534)
David Sherwood via llvm-commits
llvm-commits at lists.llvm.org
Fri Dec 20 08:38:51 PST 2024
================
@@ -105,7 +105,9 @@ define i64 @select_or_reduce_nxv2i1(ptr nocapture noundef readonly %src) {
; CHECK-NEXT: [[EXIT_COND:%.*]] = or i1 [[OR_REDUC]], [[IV_CMP]]
; CHECK-NEXT: br i1 [[EXIT_COND]], label %[[MIDDLE_SPLIT:.*]], label %[[VECTOR_BODY]]
; CHECK: [[MIDDLE_SPLIT]]:
-; CHECK-NEXT: [[SEL:%.*]] = select i1 [[OR_REDUC]], i64 1, i64 0
+; CHECK-NEXT: [[TMP2:%.*]] = icmp eq <vscale x 2 x ptr> [[WIDE_LOAD]], zeroinitializer
+; CHECK-NEXT: [[TMP3:%.*]] = tail call i1 @llvm.vector.reduce.or.nxv2i1(<vscale x 2 x i1> [[TMP2]])
+; CHECK-NEXT: [[SEL:%.*]] = select i1 [[TMP3]], i64 1, i64 0
----------------
david-arm wrote:
It seems to be the existing `sinkCmpExpression` that's causing the problem, since now we sink the reduce.or we also start to sink the cmp too.
https://github.com/llvm/llvm-project/pull/119534
More information about the llvm-commits
mailing list