Skip to content

Commit e8e9345

Browse files
matborzyszkowskiigcbot
authored andcommitted
[Autobackout][FuncReg]Revert of change: 26c0d7a
Add addc intrinsic pattern match Add 2 addc pattern match: 1) from %add = add i32 %0, 1 %cmp = icmp eq i32 %0, -1 %conv = zext i1 %cmp to i32 to %call = call <2 x i32> @llvm.genx.GenISA.uaddc.v2i32.i32(i32 %0, i32 1) %zext.0 = extractelement <2 x i32> %call, i32 0 --> result %zext.1 = extractelement <2 x i32> %call, i32 1 --> carry 2) from %add.1 = add i32 %1, %conv %cmp.1 = icmp ult i32 %add.1, %1 %conv.1 = zext i1 %cmp.1 to i32 to %call.1 = call <2 x i32> @llvm.genx.GenISA.uaddc.v2i32.i32(i32 %1, i32 %zext.1) %zext.2 = extractelement <2 x i32> %call.1, i32 0 --> result %zext.3 = extractelement <2 x i32> %call.1, i32 1 --> carry
1 parent 8650eed commit e8e9345

File tree

3 files changed

+1
-121
lines changed

3 files changed

+1
-121
lines changed

IGC/Compiler/CustomSafeOptPass.cpp

Lines changed: 1 addition & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -2506,10 +2506,6 @@ IGC_INITIALIZE_PASS_END(GenSpecificPattern, PASS_FLAG2, PASS_DESCRIPTION2, PASS_
25062506

25072507
char GenSpecificPattern::ID = 0;
25082508

2509-
// m_Add is able to match add and equivalent sub instructions.
2510-
// This predicate is useful for patterns where only add should be matched:
2511-
bool isActualAddInstr(const Instruction* inst) { return inst && inst->getOpcode() == Instruction::Add; }
2512-
25132509
GenSpecificPattern::GenSpecificPattern() : FunctionPass(ID)
25142510
{
25152511
initializeGenSpecificPatternPass(*PassRegistry::getPassRegistry());
@@ -2747,24 +2743,6 @@ void GenSpecificPattern::createBitcastExtractInsertPattern(BinaryOperator& I, Va
27472743
I.eraseFromParent();
27482744
}
27492745

2750-
void GenSpecificPattern::createAddcIntrinsicPattern(Instruction& ZEI, Value* val1, Value* val2, Instruction& addInst)
2751-
{
2752-
IRBuilder<> Builder(&addInst);
2753-
2754-
SmallVector<Value*, 2> packed_res_params;
2755-
packed_res_params.push_back(val1);
2756-
packed_res_params.push_back(val2);
2757-
Type* types[] = { IGCLLVM::FixedVectorType::get(val1->getType(), 2), val1->getType() };
2758-
Function* addcIntrinsic = llvm::GenISAIntrinsic::getDeclaration(ZEI.getModule(), GenISAIntrinsic::GenISA_uaddc, types);
2759-
Value* newVal = Builder.CreateCall(addcIntrinsic, packed_res_params);
2760-
CallInst* packed_res_call = cast<CallInst>(newVal);
2761-
2762-
Value* result = Builder.CreateExtractElement(packed_res_call, Builder.getInt32(0));
2763-
Value* carryFlag = Builder.CreateExtractElement(packed_res_call, Builder.getInt32(1));
2764-
ZEI.replaceAllUsesWith(carryFlag);
2765-
addInst.replaceAllUsesWith(result);
2766-
}
2767-
27682746
void GenSpecificPattern::visitBinaryOperator(BinaryOperator& I)
27692747
{
27702748
if (I.getOpcode() == Instruction::Or)
@@ -3570,61 +3548,8 @@ void GenSpecificPattern::visitZExtInst(ZExtInst& ZEI)
35703548
if (!Cmp)
35713549
return;
35723550

3573-
using namespace llvm::PatternMatch;
3574-
CmpInst::Predicate pred;
3575-
Instruction* I1 = nullptr;
3576-
Instruction* I2 = nullptr;
3577-
Instruction* I3 = nullptr;
3578-
ConstantInt* C1, *C2;
3579-
3580-
/*
3581-
* from
3582-
* %add = add i32 %0, 1
3583-
* %cmp = icmp eq i32 %0, -1
3584-
* %conv = zext i1 %cmp to i32
3585-
* to
3586-
* %call = call <2 x i32> @llvm.genx.GenISA.uaddc.v2i32.i32(i32 %0, i32 1)
3587-
* %zext.0 = extractelement <2 x i32> %call, i32 0 --> result
3588-
* %zext.1 = extractelement <2 x i32> %call, i32 1 --> carry
3589-
*/
3590-
auto addcPattern1 = m_Cmp(pred, m_Instruction(I1), m_ConstantInt(C2));
3591-
auto addcPattern2 = m_Add(m_Instruction(I2), m_ConstantInt(C1));
3592-
3593-
/*
3594-
* from
3595-
* %add.1 = add i32 %1, %conv
3596-
* %cmp.1 = icmp ult i32 %add.1, %1
3597-
* %conv.1 = zext i1 %cmp.1 to i32
3598-
* to
3599-
* %call.1 = call <2 x i32> @llvm.genx.GenISA.uaddc.v2i32.i32(i32 %1, i32 %zext.1)
3600-
* %zext.2 = extractelement <2 x i32> %call.1, i32 0 --> result
3601-
* %zext.3 = extractelement <2 x i32> %call.1, i32 1 --> carry
3602-
*/
3603-
auto addcPattern3 = m_Cmp(pred, m_Add(m_Instruction(I1), m_Instruction(I2)), m_Instruction(I3));
3604-
3605-
if (match(Cmp, addcPattern1) && pred == CmpInst::Predicate::ICMP_EQ && C2->isMinusOne())
3606-
{
3607-
for (auto U : I1->users())
3608-
{
3609-
Instruction* inst = dyn_cast<Instruction>(U);
3610-
if (isActualAddInstr(inst) && match(inst, addcPattern2) && I1 == I2)
3611-
{
3612-
createAddcIntrinsicPattern(ZEI, I1, C1, *inst);
3613-
return;
3614-
}
3615-
}
3616-
}
3617-
else if (match(Cmp, addcPattern3) && I1 == I3 && pred == CmpInst::Predicate::ICMP_ULT)
3618-
{
3619-
Instruction* inst = dyn_cast<Instruction>(Cmp->getOperand(0));
3620-
if (isActualAddInstr(inst))
3621-
{
3622-
createAddcIntrinsicPattern(ZEI, I1, I2, *inst);
3623-
return;
3624-
}
3625-
}
3626-
36273551
IRBuilder<> Builder(&ZEI);
3552+
36283553
Value* S = Builder.CreateSExt(Cmp, ZEI.getType());
36293554
Value* N = Builder.CreateNeg(S);
36303555
ZEI.replaceAllUsesWith(N);

IGC/Compiler/CustomSafeOptPass.hpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,8 +184,6 @@ namespace IGC
184184

185185
void createBitcastExtractInsertPattern(llvm::BinaryOperator& I,
186186
llvm::Value* Op1, llvm::Value* Op2, unsigned extractNum1, unsigned extractNum2);
187-
188-
void createAddcIntrinsicPattern(llvm::Instruction& I, llvm::Value* val1, llvm::Value* val2, llvm::Instruction& inst);
189187
};
190188

191189
class FCmpPaternMatch : public llvm::FunctionPass, public llvm::InstVisitor<FCmpPaternMatch>

IGC/Compiler/tests/CustomSafeOptPass/addc_pattern.ll

Lines changed: 0 additions & 43 deletions
This file was deleted.

0 commit comments

Comments
 (0)