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) ...@@ -635,7 +635,7 @@ Ice::Operand *Optimizer::storeAddress(const Ice::Inst *instruction)
if(auto *storeSubVector = asStoreSubVector(instruction)) if(auto *storeSubVector = asStoreSubVector(instruction))
{ {
return storeSubVector->getSrc(2); return storeSubVector->getSrc(1);
} }
return nullptr; return nullptr;
...@@ -652,7 +652,7 @@ Ice::Operand *Optimizer::loadAddress(const Ice::Inst *instruction) ...@@ -652,7 +652,7 @@ Ice::Operand *Optimizer::loadAddress(const Ice::Inst *instruction)
if(auto *loadSubVector = asLoadSubVector(instruction)) if(auto *loadSubVector = asLoadSubVector(instruction))
{ {
return loadSubVector->getSrc(1); return loadSubVector->getSrc(0);
} }
return nullptr; return nullptr;
...@@ -669,7 +669,7 @@ Ice::Operand *Optimizer::storeData(const Ice::Inst *instruction) ...@@ -669,7 +669,7 @@ Ice::Operand *Optimizer::storeData(const Ice::Inst *instruction)
if(auto *storeSubVector = asStoreSubVector(instruction)) if(auto *storeSubVector = asStoreSubVector(instruction))
{ {
return storeSubVector->getSrc(1); return storeSubVector->getSrc(0);
} }
return nullptr; return nullptr;
...@@ -715,9 +715,9 @@ bool Optimizer::loadTypeMatchesStore(const Ice::Inst *load, const Ice::Inst *sto ...@@ -715,9 +715,9 @@ bool Optimizer::loadTypeMatchesStore(const Ice::Inst *load, const Ice::Inst *sto
if(auto *loadSubVector = asLoadSubVector(load)) if(auto *loadSubVector = asLoadSubVector(load))
{ {
// Check for matching type and sub-vector width. // Check for matching type and sub-vector width.
return storeSubVector->getSrc(1)->getType() == loadSubVector->getDest()->getType() && return storeSubVector->getSrc(0)->getType() == loadSubVector->getDest()->getType() &&
llvm::cast<Ice::ConstantInteger32>(storeSubVector->getSrc(3))->getValue() == llvm::cast<Ice::ConstantInteger32>(storeSubVector->getSrc(2))->getValue() ==
llvm::cast<Ice::ConstantInteger32>(loadSubVector->getSrc(2))->getValue(); llvm::cast<Ice::ConstantInteger32>(loadSubVector->getSrc(1))->getValue();
} }
} }
......
...@@ -610,20 +610,21 @@ private: ...@@ -610,20 +610,21 @@ private:
Operand *Source2, Operand *Source3); Operand *Source2, Operand *Source3);
}; };
/// Call to an intrinsic function. The call target is captured as getSrc(0), and /// Call to an intrinsic function.
/// arg I is captured as getSrc(I+1). class InstIntrinsicCall : public InstHighLevel {
class InstIntrinsicCall : public InstCall {
InstIntrinsicCall() = delete; InstIntrinsicCall() = delete;
InstIntrinsicCall(const InstIntrinsicCall &) = delete; InstIntrinsicCall(const InstIntrinsicCall &) = delete;
InstIntrinsicCall &operator=(const InstIntrinsicCall &) = delete; InstIntrinsicCall &operator=(const InstIntrinsicCall &) = delete;
public: public:
static InstIntrinsicCall *create(Cfg *Func, SizeT NumArgs, Variable *Dest, static InstIntrinsicCall *create(Cfg *Func, SizeT NumArgs, Variable *Dest,
Operand *CallTarget,
const Intrinsics::IntrinsicInfo &Info) { const Intrinsics::IntrinsicInfo &Info) {
return new (Func->allocate<InstIntrinsicCall>()) 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) { static bool classof(const Inst *Instr) {
return Instr->getKind() == IntrinsicCall; return Instr->getKind() == IntrinsicCall;
} }
...@@ -635,10 +636,8 @@ public: ...@@ -635,10 +636,8 @@ public:
private: private:
InstIntrinsicCall(Cfg *Func, SizeT NumArgs, Variable *Dest, InstIntrinsicCall(Cfg *Func, SizeT NumArgs, Variable *Dest,
Operand *CallTarget, const Intrinsics::IntrinsicInfo &Info) const Intrinsics::IntrinsicInfo &Info)
: InstCall(Func, NumArgs, Dest, CallTarget, false, false, false, : InstHighLevel(Func, Inst::IntrinsicCall, NumArgs, Dest), Info(Info) {}
Info.HasSideEffects, Inst::IntrinsicCall),
Info(Info) {}
const Intrinsics::IntrinsicInfo Info; const Intrinsics::IntrinsicInfo Info;
}; };
......
...@@ -6126,8 +6126,7 @@ void TargetX86Base<TraitsType>::doAddressOptLoadSubVector() { ...@@ -6126,8 +6126,7 @@ void TargetX86Base<TraitsType>::doAddressOptLoadSubVector() {
const Ice::Intrinsics::IntrinsicInfo Info = { const Ice::Intrinsics::IntrinsicInfo Info = {
Ice::Intrinsics::LoadSubVector, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::LoadSubVector, Ice::Intrinsics::SideEffects_F,
Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F}; Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F};
auto Target = Ctx->getConstantUndef(Ice::IceType_i32); auto *NewLoad = Context.insert<InstIntrinsicCall>(2, Dest, Info);
auto *NewLoad = Context.insert<InstIntrinsicCall>(2, Dest, Target, Info);
NewLoad->addArg(OptAddr); NewLoad->addArg(OptAddr);
NewLoad->addArg(Intrinsic->getArg(1)); NewLoad->addArg(Intrinsic->getArg(1));
} }
...@@ -7002,9 +7001,7 @@ void TargetX86Base<TraitsType>::doAddressOptStoreSubVector() { ...@@ -7002,9 +7001,7 @@ void TargetX86Base<TraitsType>::doAddressOptStoreSubVector() {
const Ice::Intrinsics::IntrinsicInfo Info = { const Ice::Intrinsics::IntrinsicInfo Info = {
Ice::Intrinsics::StoreSubVector, Ice::Intrinsics::SideEffects_T, Ice::Intrinsics::StoreSubVector, Ice::Intrinsics::SideEffects_T,
Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_T}; Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_T};
auto Target = Ctx->getConstantUndef(Ice::IceType_i32); auto *NewStore = Context.insert<InstIntrinsicCall>(3, nullptr, Info);
auto *NewStore =
Context.insert<InstIntrinsicCall>(3, nullptr, Target, Info);
NewStore->addArg(Data); NewStore->addArg(Data);
NewStore->addArg(OptAddr); NewStore->addArg(OptAddr);
NewStore->addArg(Intrinsic->getArg(2)); 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