Commit 99bbb14b by Nicolas Capens Committed by Nicolas Capens

Eliminate the InstIntrinsicCall Target parameter

It is no longer used now that profiling support at the Subzero level is eliminated. This change adjusts all of the uses of getSrc() on intrinsics to obtain the correct operand, but does not yet make simplifications based on having them align with load/store instructions. Bug: b/179497998 Change-Id: I93705eaa1b7626184f612ab3a9755048004e531f Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/52529 Presubmit-Ready: Nicolas Capens <nicolascapens@google.com> Kokoro-Result: kokoro <noreply+kokoro@google.com> Tested-by: 's avatarNicolas Capens <nicolascapens@google.com> Reviewed-by: 's avatarAntonio Maiorano <amaiorano@google.com>
parent d4f27d7a
......@@ -635,7 +635,7 @@ Ice::Operand *Optimizer::storeAddress(const Ice::Inst *instruction)
if(auto *storeSubVector = asStoreSubVector(instruction))
{
return storeSubVector->getSrc(2);
return storeSubVector->getSrc(1);
}
return nullptr;
......@@ -652,7 +652,7 @@ Ice::Operand *Optimizer::loadAddress(const Ice::Inst *instruction)
if(auto *loadSubVector = asLoadSubVector(instruction))
{
return loadSubVector->getSrc(1);
return loadSubVector->getSrc(0);
}
return nullptr;
......@@ -669,7 +669,7 @@ Ice::Operand *Optimizer::storeData(const Ice::Inst *instruction)
if(auto *storeSubVector = asStoreSubVector(instruction))
{
return storeSubVector->getSrc(1);
return storeSubVector->getSrc(0);
}
return nullptr;
......@@ -715,9 +715,9 @@ bool Optimizer::loadTypeMatchesStore(const Ice::Inst *load, const Ice::Inst *sto
if(auto *loadSubVector = asLoadSubVector(load))
{
// Check for matching type and sub-vector width.
return storeSubVector->getSrc(1)->getType() == loadSubVector->getDest()->getType() &&
llvm::cast<Ice::ConstantInteger32>(storeSubVector->getSrc(3))->getValue() ==
llvm::cast<Ice::ConstantInteger32>(loadSubVector->getSrc(2))->getValue();
return storeSubVector->getSrc(0)->getType() == loadSubVector->getDest()->getType() &&
llvm::cast<Ice::ConstantInteger32>(storeSubVector->getSrc(2))->getValue() ==
llvm::cast<Ice::ConstantInteger32>(loadSubVector->getSrc(1))->getValue();
}
}
......
......@@ -610,20 +610,21 @@ private:
Operand *Source2, Operand *Source3);
};
/// Call to an intrinsic function. The call target is captured as getSrc(0), and
/// arg I is captured as getSrc(I+1).
class InstIntrinsicCall : public InstCall {
/// Call to an intrinsic function.
class InstIntrinsicCall : public InstHighLevel {
InstIntrinsicCall() = delete;
InstIntrinsicCall(const InstIntrinsicCall &) = delete;
InstIntrinsicCall &operator=(const InstIntrinsicCall &) = delete;
public:
static InstIntrinsicCall *create(Cfg *Func, SizeT NumArgs, Variable *Dest,
Operand *CallTarget,
const Intrinsics::IntrinsicInfo &Info) {
return new (Func->allocate<InstIntrinsicCall>())
InstIntrinsicCall(Func, NumArgs, Dest, CallTarget, Info);
InstIntrinsicCall(Func, NumArgs, Dest, Info);
}
void addArg(Operand *Arg) { addSource(Arg); }
Operand *getArg(SizeT I) const { return getSrc(I); }
SizeT getNumArgs() const { return getSrcSize(); }
static bool classof(const Inst *Instr) {
return Instr->getKind() == IntrinsicCall;
}
......@@ -635,10 +636,8 @@ public:
private:
InstIntrinsicCall(Cfg *Func, SizeT NumArgs, Variable *Dest,
Operand *CallTarget, const Intrinsics::IntrinsicInfo &Info)
: InstCall(Func, NumArgs, Dest, CallTarget, false, false, false,
Info.HasSideEffects, Inst::IntrinsicCall),
Info(Info) {}
const Intrinsics::IntrinsicInfo &Info)
: InstHighLevel(Func, Inst::IntrinsicCall, NumArgs, Dest), Info(Info) {}
const Intrinsics::IntrinsicInfo Info;
};
......
......@@ -6126,8 +6126,7 @@ void TargetX86Base<TraitsType>::doAddressOptLoadSubVector() {
const Ice::Intrinsics::IntrinsicInfo Info = {
Ice::Intrinsics::LoadSubVector, Ice::Intrinsics::SideEffects_F,
Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F};
auto Target = Ctx->getConstantUndef(Ice::IceType_i32);
auto *NewLoad = Context.insert<InstIntrinsicCall>(2, Dest, Target, Info);
auto *NewLoad = Context.insert<InstIntrinsicCall>(2, Dest, Info);
NewLoad->addArg(OptAddr);
NewLoad->addArg(Intrinsic->getArg(1));
}
......@@ -7002,9 +7001,7 @@ void TargetX86Base<TraitsType>::doAddressOptStoreSubVector() {
const Ice::Intrinsics::IntrinsicInfo Info = {
Ice::Intrinsics::StoreSubVector, Ice::Intrinsics::SideEffects_T,
Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_T};
auto Target = Ctx->getConstantUndef(Ice::IceType_i32);
auto *NewStore =
Context.insert<InstIntrinsicCall>(3, nullptr, Target, Info);
auto *NewStore = Context.insert<InstIntrinsicCall>(3, nullptr, Info);
NewStore->addArg(Data);
NewStore->addArg(OptAddr);
NewStore->addArg(Intrinsic->getArg(2));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment