mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-07 21:09:21 +00:00
[CVP] Fix assertion failure on vector with.overflow
Noticed on D62703. LVI only handles plain integers, not vectors of integers. This was previously not an issue, because vector support for with.overflow is only a relatively recent addition. llvm-svn: 362261
This commit is contained in:
parent
bfe0c48b1d
commit
d1d1320557
@ -434,7 +434,7 @@ static bool processCallSite(CallSite CS, LazyValueInfo *LVI) {
|
||||
unsigned ArgNo = 0;
|
||||
|
||||
if (auto *WO = dyn_cast<WithOverflowInst>(CS.getInstruction())) {
|
||||
if (willNotOverflow(WO, LVI)) {
|
||||
if (WO->getLHS()->getType()->isIntegerTy() && willNotOverflow(WO, LVI)) {
|
||||
processOverflowIntrinsic(WO);
|
||||
return true;
|
||||
}
|
||||
|
@ -21,6 +21,8 @@ declare { i32, i1 } @llvm.umul.with.overflow.i32(i32, i32)
|
||||
|
||||
declare { i8, i1 } @llvm.umul.with.overflow.i8(i8, i8)
|
||||
|
||||
declare { <2 x i32>, <2 x i1> } @llvm.uadd.with.overflow.v2i32(<2 x i32>, <2 x i32>)
|
||||
|
||||
declare i8 @llvm.uadd.sat.i8(i8, i8)
|
||||
declare i8 @llvm.sadd.sat.i8(i8, i8)
|
||||
declare i8 @llvm.usub.sat.i8(i8, i8)
|
||||
@ -731,6 +733,16 @@ define { i8, i1 } @signed_mul_constant_folding() {
|
||||
ret { i8, i1 } %mul
|
||||
}
|
||||
|
||||
define { <2 x i32>, <2 x i1> } @uaddo_vec(<2 x i32> %a) {
|
||||
; CHECK-LABEL: @uaddo_vec(
|
||||
; CHECK-NEXT: [[ADD:%.*]] = call { <2 x i32>, <2 x i1> } @llvm.uadd.with.overflow.v2i32(<2 x i32> [[A:%.*]], <2 x i32> <i32 1, i32 1>)
|
||||
; CHECK-NEXT: ret { <2 x i32>, <2 x i1> } [[ADD]]
|
||||
;
|
||||
%add = call { <2 x i32>, <2 x i1> } @llvm.uadd.with.overflow.v2i32(<2 x i32> %a, <2 x i32> <i32 1, i32 1>)
|
||||
ret { <2 x i32>, <2 x i1> } %add
|
||||
}
|
||||
|
||||
|
||||
define i8 @uadd_sat_no_overflow(i8 %x) {
|
||||
; CHECK-LABEL: @uadd_sat_no_overflow(
|
||||
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[X:%.*]], 100
|
||||
|
Loading…
x
Reference in New Issue
Block a user