diff options
author | Volkan Keles <vkeles@apple.com> | 2017-03-10 21:23:13 +0000 |
---|---|---|
committer | Volkan Keles <vkeles@apple.com> | 2017-03-10 21:23:13 +0000 |
commit | 970fee4bfef59dcba53232fe74a1f3631880d6e4 (patch) | |
tree | 3802fc75fae25e7913299230ffba198502039dcc /llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp | |
parent | 62d547441da92ac039f9d2dc2a460c8c721a6db0 (diff) | |
download | bcm5719-llvm-970fee4bfef59dcba53232fe74a1f3631880d6e4.tar.gz bcm5719-llvm-970fee4bfef59dcba53232fe74a1f3631880d6e4.zip |
GlobalISel: Translate ConstantAggregateZero vectors
Reviewers: qcolombet, aditya_nandakumar, dsanders, ab, t.p.northover, javed.absar
Reviewed By: qcolombet
Subscribers: dberris, rovka, llvm-commits, kristof.beyls
Differential Revision: https://reviews.llvm.org/D30259
llvm-svn: 297509
Diffstat (limited to 'llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp index 5a4f950776f..4f9b907c4f8 100644 --- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp +++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp @@ -1067,7 +1067,16 @@ bool IRTranslator::translate(const Constant &C, unsigned Reg) { EntryBuilder.buildConstant(Reg, 0); else if (auto GV = dyn_cast<GlobalValue>(&C)) EntryBuilder.buildGlobalValue(Reg, GV); - else if (auto CE = dyn_cast<ConstantExpr>(&C)) { + else if (auto CAZ = dyn_cast<ConstantAggregateZero>(&C)) { + if (!CAZ->getType()->isVectorTy()) + return false; + std::vector<unsigned> Ops; + for (unsigned i = 0; i < CAZ->getNumElements(); ++i) { + Constant &Elt = *CAZ->getElementValue(i); + Ops.push_back(getOrCreateVReg(Elt)); + } + EntryBuilder.buildMerge(Reg, Ops); + } else if (auto CE = dyn_cast<ConstantExpr>(&C)) { switch(CE->getOpcode()) { #define HANDLE_INST(NUM, OPCODE, CLASS) \ case Instruction::OPCODE: return translate##OPCODE(*CE, EntryBuilder); |