@@ -15965,24 +15965,6 @@ static Value *createTblShuffleForZExt(IRBuilderBase &Builder, Value *Op,
15965
15965
return Result;
15966
15966
}
15967
15967
15968
- static Value *createTblShuffleForSExt(IRBuilderBase &Builder, Value *Op,
15969
- FixedVectorType *DstTy,
15970
- bool IsLittleEndian) {
15971
- auto *SrcTy = cast<FixedVectorType>(Op->getType());
15972
- auto SrcWidth = cast<IntegerType>(SrcTy->getElementType())->getBitWidth();
15973
- auto DstWidth = cast<IntegerType>(DstTy->getElementType())->getBitWidth();
15974
-
15975
- SmallVector<int> Mask;
15976
- if (!createTblShuffleMask(SrcWidth, DstWidth, SrcTy->getNumElements(),
15977
- !IsLittleEndian, Mask))
15978
- return nullptr;
15979
-
15980
- auto *FirstEltZero = Builder.CreateInsertElement(
15981
- PoisonValue::get(SrcTy), Builder.getInt8(0), uint64_t(0));
15982
-
15983
- return Builder.CreateShuffleVector(Op, FirstEltZero, Mask);
15984
- }
15985
-
15986
15968
static void createTblForTrunc(TruncInst *TI, bool IsLittleEndian) {
15987
15969
IRBuilder<> Builder(TI);
15988
15970
SmallVector<Value *> Parts;
@@ -16163,29 +16145,14 @@ bool AArch64TargetLowering::optimizeExtendOrTruncateConversion(
16163
16145
Value *ZExt = createTblShuffleForZExt(
16164
16146
Builder, I->getOperand(0), FixedVectorType::getInteger(DstTy),
16165
16147
FixedVectorType::getInteger(DstTy), Subtarget->isLittleEndian());
16166
- assert(ZExt && "Cannot fail for the i8 to float conversion");
16148
+ if (!ZExt)
16149
+ return false;
16167
16150
auto *UI = Builder.CreateUIToFP(ZExt, DstTy);
16168
16151
I->replaceAllUsesWith(UI);
16169
16152
I->eraseFromParent();
16170
16153
return true;
16171
16154
}
16172
16155
16173
- auto *SIToFP = dyn_cast<SIToFPInst>(I);
16174
- if (SIToFP && SrcTy->getElementType()->isIntegerTy(8) &&
16175
- DstTy->getElementType()->isFloatTy()) {
16176
- IRBuilder<> Builder(I);
16177
- auto *Shuffle = createTblShuffleForSExt(Builder, I->getOperand(0),
16178
- FixedVectorType::getInteger(DstTy),
16179
- Subtarget->isLittleEndian());
16180
- assert(Shuffle && "Cannot fail for the i8 to float conversion");
16181
- auto *Cast = Builder.CreateBitCast(Shuffle, VectorType::getInteger(DstTy));
16182
- auto *AShr = Builder.CreateAShr(Cast, 24, "", true);
16183
- auto *SI = Builder.CreateSIToFP(AShr, DstTy);
16184
- I->replaceAllUsesWith(SI);
16185
- I->eraseFromParent();
16186
- return true;
16187
- }
16188
-
16189
16156
// Convert 'fptoui <(8|16) x float> to <(8|16) x i8>' to a wide fptoui
16190
16157
// followed by a truncate lowered to using tbl.4.
16191
16158
auto *FPToUI = dyn_cast<FPToUIInst>(I);
0 commit comments