Skip to content

Commit 55193c2

Browse files
dtcxzywtstellar
authored andcommitted
[InstCombine] Handle scalable splat in getFlippedStrictnessPredicateAndConstant
(cherry picked from commit d51fcd4)
1 parent 78859f1 commit 55193c2

File tree

4 files changed

+24
-2
lines changed

4 files changed

+24
-2
lines changed

llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6491,6 +6491,13 @@ InstCombiner::getFlippedStrictnessPredicateAndConstant(CmpInst::Predicate Pred,
64916491
if (!SafeReplacementConstant)
64926492
SafeReplacementConstant = CI;
64936493
}
6494+
} else if (isa<VectorType>(C->getType())) {
6495+
// Handle scalable splat
6496+
Value *SplatC = C->getSplatValue();
6497+
auto *CI = dyn_cast_or_null<ConstantInt>(SplatC);
6498+
// Bail out if the constant can't be safely incremented/decremented.
6499+
if (!CI || !ConstantIsOk(CI))
6500+
return std::nullopt;
64946501
} else {
64956502
// ConstantExpr?
64966503
return std::nullopt;
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
2+
; RUN: opt -S -passes=instcombine < %s | FileCheck %s
3+
4+
define <vscale x 2 x i1> @dont_crash(<vscale x 2 x i64> %x) {
5+
; CHECK-LABEL: define <vscale x 2 x i1> @dont_crash(
6+
; CHECK-SAME: <vscale x 2 x i64> [[X:%.*]]) {
7+
; CHECK-NEXT: entry:
8+
; CHECK-NEXT: [[RET:%.*]] = icmp sgt <vscale x 2 x i64> [[X]], shufflevector (<vscale x 2 x i64> insertelement (<vscale x 2 x i64> poison, i64 -309383, i64 0), <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer)
9+
; CHECK-NEXT: ret <vscale x 2 x i1> [[RET]]
10+
;
11+
entry:
12+
%div = sdiv <vscale x 2 x i64> %x, splat (i64 309383)
13+
%ret = icmp sge <vscale x 2 x i64> %div, zeroinitializer
14+
ret <vscale x 2 x i1> %ret
15+
}

llvm/test/Transforms/InstCombine/select.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3459,7 +3459,7 @@ define <vscale x 2 x i32> @scalable_sign_bits(<vscale x 2 x i8> %x) {
34593459
define <vscale x 2 x i1> @scalable_non_zero(<vscale x 2 x i32> %x) {
34603460
; CHECK-LABEL: @scalable_non_zero(
34613461
; CHECK-NEXT: [[A:%.*]] = or <vscale x 2 x i32> [[X:%.*]], shufflevector (<vscale x 2 x i32> insertelement (<vscale x 2 x i32> poison, i32 1, i32 0), <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer)
3462-
; CHECK-NEXT: [[CMP:%.*]] = icmp ule <vscale x 2 x i32> [[A]], shufflevector (<vscale x 2 x i32> insertelement (<vscale x 2 x i32> poison, i32 56, i64 0), <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer)
3462+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult <vscale x 2 x i32> [[A]], shufflevector (<vscale x 2 x i32> insertelement (<vscale x 2 x i32> poison, i32 57, i64 0), <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer)
34633463
; CHECK-NEXT: ret <vscale x 2 x i1> [[CMP]]
34643464
;
34653465
%a = or <vscale x 2 x i32> %x, shufflevector (<vscale x 2 x i32> insertelement (<vscale x 2 x i32> poison, i32 1, i32 0), <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer)

llvm/test/Transforms/InstCombine/vscale_cmp.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
define <vscale x 2 x i1> @sge(<vscale x 2 x i8> %x) {
55
; CHECK-LABEL: @sge(
6-
; CHECK-NEXT: [[CMP:%.*]] = icmp sge <vscale x 2 x i8> [[X:%.*]], zeroinitializer
6+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt <vscale x 2 x i8> [[X:%.*]], shufflevector (<vscale x 2 x i8> insertelement (<vscale x 2 x i8> poison, i8 -1, i64 0), <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer)
77
; CHECK-NEXT: ret <vscale x 2 x i1> [[CMP]]
88
;
99
%cmp = icmp sge <vscale x 2 x i8> %x, zeroinitializer

0 commit comments

Comments
 (0)