Skip to content

Commit a1756e6

Browse files
author
git apple-llvm automerger
committed
Merge commit 'd8e1b451e21b' from llvm.org/main into next
2 parents 59ff1d1 + d8e1b45 commit a1756e6

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

llvm/lib/Analysis/ValueTracking.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2739,6 +2739,8 @@ static bool isKnownNonZeroFromOperator(const Operator *I,
27392739
break;
27402740
case Intrinsic::vscale:
27412741
return true;
2742+
case Intrinsic::experimental_get_vector_length:
2743+
return isKnownNonZero(I->getOperand(0), Depth, Q);
27422744
default:
27432745
break;
27442746
}

llvm/test/Analysis/ValueTracking/known-non-zero.ll

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1269,3 +1269,27 @@ while.end.i:
12691269
%bool = icmp eq i32 %orval, 0
12701270
ret i1 %bool
12711271
}
1272+
1273+
define i1 @check_get_vector_length(i32 %x, i32 %y) {
1274+
; CHECK-LABEL: @check_get_vector_length(
1275+
; CHECK-NEXT: [[NE:%.*]] = icmp ne i32 [[X:%.*]], 0
1276+
; CHECK-NEXT: br i1 [[NE]], label [[TRUE:%.*]], label [[FALSE:%.*]]
1277+
; CHECK: true:
1278+
; CHECK-NEXT: [[Z:%.*]] = call i32 @llvm.experimental.get.vector.length.i32(i32 [[X]], i32 1, i1 true)
1279+
; CHECK-NEXT: [[CMP0:%.*]] = icmp ugt i32 [[Z]], [[Y:%.*]]
1280+
; CHECK-NEXT: ret i1 [[CMP0]]
1281+
; CHECK: false:
1282+
; CHECK-NEXT: ret i1 [[NE]]
1283+
;
1284+
%ne = icmp ne i32 %x, 0
1285+
br i1 %ne, label %true, label %false
1286+
true:
1287+
%z = call i32 @llvm.experimental.get.vector.length.i32(i32 %x, i32 1, i1 true)
1288+
%cmp0 = icmp ugt i32 %z, %y
1289+
%cmp1 = icmp eq i32 %y, 0
1290+
%r = or i1 %cmp0, %cmp1
1291+
ret i1 %r
1292+
false:
1293+
ret i1 %ne
1294+
}
1295+
declare i32 @llvm.experimental.get.vector.length.i32(i32, i32, i1)

0 commit comments

Comments
 (0)