Index: src/IceInst.cpp |
diff --git a/src/IceInst.cpp b/src/IceInst.cpp |
index aac42c3bd2f98823a6a1a0d622c6f4558210f1d2..6eb805846007bd4d7191b71a5645b1ac0cd9cf70 100644 |
--- a/src/IceInst.cpp |
+++ b/src/IceInst.cpp |
@@ -112,6 +112,7 @@ const char *Inst::getInstName() const { |
X(FakeUse, "fakeuse"); |
X(FakeKill, "fakekill"); |
X(JumpTable, "jumptable"); |
+ X(ShuffleVector, "shufflevector"); |
#undef X |
default: |
assert(Kind >= Target); |
@@ -574,6 +575,15 @@ InstFakeUse::InstFakeUse(Cfg *Func, Variable *Src, uint32_t Weight) |
InstFakeKill::InstFakeKill(Cfg *Func, const Inst *Linked) |
: InstHighLevel(Func, Inst::FakeKill, 0, nullptr), Linked(Linked) {} |
+InstShuffleVector::InstShuffleVector(Cfg *Func, Variable *Dest, Variable *Src0, |
+ Variable *Src1) |
+ : InstHighLevel(Func, Inst::ShuffleVector, 2, Dest), |
+ NumIndexes(typeNumElements(Dest->getType())) { |
+ addSource(Src0); |
+ addSource(Src1); |
+ Indexes = Func->allocateArrayOf<ConstantInteger32 *>(NumIndexes); |
+} |
+ |
namespace { |
GlobalString makeName(Cfg *Func, const SizeT Id) { |
const auto FuncName = Func->getFunctionName(); |
@@ -1032,6 +1042,21 @@ void InstFakeKill::dump(const Cfg *Func) const { |
Str << "kill.pseudo scratch_regs"; |
} |
+void InstShuffleVector::dump(const Cfg *Func) const { |
+ if (!BuildDefs::dump()) |
+ return; |
+ Ostream &Str = Func->getContext()->getStrDump(); |
+ Str << "shufflevector "; |
+ dumpDest(Func); |
+ Str << " = "; |
+ dumpSources(Func); |
+ for (SizeT I = 0; I < NumIndexes; ++I) { |
+ Str << ", "; |
+ Indexes[I]->dump(Func); |
+ } |
+ Str << "\n"; |
+} |
+ |
void InstJumpTable::dump(const Cfg *Func) const { |
if (!BuildDefs::dump()) |
return; |