forked from OSchip/llvm-project
Revert "[InstCombine] Improve vector undef handling for sext(ashr(shl(trunc()))) fold"
It seems i have missed checklines, temporairly reverting,
will reland momentairly..
This reverts commit aa1aa13509
.
This commit is contained in:
parent
55c06a3070
commit
52533b52b8
|
@ -1520,15 +1520,13 @@ Instruction *InstCombinerImpl::visitSExt(SExtInst &CI) {
|
|||
Constant *BA = nullptr, *CA = nullptr;
|
||||
if (match(Src, m_AShr(m_Shl(m_Trunc(m_Value(A)), m_Constant(BA)),
|
||||
m_Constant(CA))) &&
|
||||
BA->isElementWiseEqual(CA) && A->getType() == DestTy) {
|
||||
BA == CA && A->getType() == DestTy) {
|
||||
Constant *WideCurrShAmt = ConstantExpr::getSExt(CA, DestTy);
|
||||
Constant *NumLowbitsLeft = ConstantExpr::getSub(
|
||||
ConstantInt::get(DestTy, SrcTy->getScalarSizeInBits()), WideCurrShAmt);
|
||||
Constant *NewShAmt = ConstantExpr::getSub(
|
||||
ConstantInt::get(DestTy, DestTy->getScalarSizeInBits()),
|
||||
NumLowbitsLeft);
|
||||
NewShAmt =
|
||||
Constant::mergeUndefsWith(Constant::mergeUndefsWith(NewShAmt, BA), CA);
|
||||
A = Builder.CreateShl(A, NewShAmt, CI.getName());
|
||||
return BinaryOperator::CreateAShr(A, NewShAmt);
|
||||
}
|
||||
|
|
|
@ -167,8 +167,10 @@ define <2 x i32> @test10_vec_nonuniform(<2 x i32> %i) {
|
|||
|
||||
define <2 x i32> @test10_vec_undef0(<2 x i32> %i) {
|
||||
; CHECK-LABEL: @test10_vec_undef0(
|
||||
; CHECK-NEXT: [[D1:%.*]] = shl <2 x i32> [[I:%.*]], <i32 30, i32 undef>
|
||||
; CHECK-NEXT: [[D:%.*]] = ashr <2 x i32> [[D1]], <i32 30, i32 undef>
|
||||
; CHECK-NEXT: [[A:%.*]] = trunc <2 x i32> [[I:%.*]] to <2 x i8>
|
||||
; CHECK-NEXT: [[B:%.*]] = shl <2 x i8> [[A]], <i8 6, i8 0>
|
||||
; CHECK-NEXT: [[C:%.*]] = ashr <2 x i8> [[B]], <i8 6, i8 undef>
|
||||
; CHECK-NEXT: [[D:%.*]] = sext <2 x i8> [[C]] to <2 x i32>
|
||||
; CHECK-NEXT: ret <2 x i32> [[D]]
|
||||
;
|
||||
%A = trunc <2 x i32> %i to <2 x i8>
|
||||
|
@ -179,8 +181,10 @@ define <2 x i32> @test10_vec_undef0(<2 x i32> %i) {
|
|||
}
|
||||
define <2 x i32> @test10_vec_undef1(<2 x i32> %i) {
|
||||
; CHECK-LABEL: @test10_vec_undef1(
|
||||
; CHECK-NEXT: [[D1:%.*]] = shl <2 x i32> [[I:%.*]], <i32 30, i32 undef>
|
||||
; CHECK-NEXT: [[D:%.*]] = ashr <2 x i32> [[D1]], <i32 30, i32 undef>
|
||||
; CHECK-NEXT: [[A:%.*]] = trunc <2 x i32> [[I:%.*]] to <2 x i8>
|
||||
; CHECK-NEXT: [[B:%.*]] = shl <2 x i8> [[A]], <i8 6, i8 undef>
|
||||
; CHECK-NEXT: [[C:%.*]] = ashr <2 x i8> [[B]], <i8 6, i8 0>
|
||||
; CHECK-NEXT: [[D:%.*]] = sext <2 x i8> [[C]] to <2 x i32>
|
||||
; CHECK-NEXT: ret <2 x i32> [[D]]
|
||||
;
|
||||
%A = trunc <2 x i32> %i to <2 x i8>
|
||||
|
@ -191,8 +195,8 @@ define <2 x i32> @test10_vec_undef1(<2 x i32> %i) {
|
|||
}
|
||||
define <2 x i32> @test10_vec_undef2(<2 x i32> %i) {
|
||||
; CHECK-LABEL: @test10_vec_undef2(
|
||||
; CHECK-NEXT: [[D1:%.*]] = shl <2 x i32> [[I:%.*]], <i32 30, i32 undef>
|
||||
; CHECK-NEXT: [[D:%.*]] = ashr <2 x i32> [[D1]], <i32 30, i32 undef>
|
||||
; CHECK-NEXT: [[D1:%.*]] = shl <2 x i32> [[I:%.*]], <i32 30, i32 24>
|
||||
; CHECK-NEXT: [[D:%.*]] = ashr <2 x i32> [[D1]], <i32 30, i32 24>
|
||||
; CHECK-NEXT: ret <2 x i32> [[D]]
|
||||
;
|
||||
%A = trunc <2 x i32> %i to <2 x i8>
|
||||
|
|
Loading…
Reference in New Issue