diff options
author | Volkan Keles <vkeles@apple.com> | 2017-03-10 19:08:28 +0000 |
---|---|---|
committer | Volkan Keles <vkeles@apple.com> | 2017-03-10 19:08:28 +0000 |
commit | 04cb08cc83032168f3f7a1a5a6c8f11bbf8aa16c (patch) | |
tree | 1b1d947cd45ed34b3819495fd4320ac2714760bc /llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp | |
parent | 5c338ff7a3f56800989c8c2b0a3fe544e57d12c0 (diff) | |
download | bcm5719-llvm-04cb08cc83032168f3f7a1a5a6c8f11bbf8aa16c.tar.gz bcm5719-llvm-04cb08cc83032168f3f7a1a5a6c8f11bbf8aa16c.zip |
[GlobalISel] Translate insertelement and extractelement
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/D30761
llvm-svn: 297495
Diffstat (limited to 'llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp index b8bb71dcc2c..5a4f950776f 100644 --- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp +++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp @@ -976,6 +976,36 @@ bool IRTranslator::translateVAArg(const User &U, MachineIRBuilder &MIRBuilder) { return true; } +bool IRTranslator::translateInsertElement(const User &U, + MachineIRBuilder &MIRBuilder) { + // If it is a <1 x Ty> vector, use the scalar as it is + // not a legal vector type in LLT. + if (U.getType()->getVectorNumElements() == 1) { + unsigned Elt = getOrCreateVReg(*U.getOperand(1)); + ValToVReg[&U] = Elt; + return true; + } + MIRBuilder.buildInsertVectorElement( + getOrCreateVReg(U), getOrCreateVReg(*U.getOperand(0)), + getOrCreateVReg(*U.getOperand(1)), getOrCreateVReg(*U.getOperand(2))); + return true; +} + +bool IRTranslator::translateExtractElement(const User &U, + MachineIRBuilder &MIRBuilder) { + // If it is a <1 x Ty> vector, use the scalar as it is + // not a legal vector type in LLT. + if (U.getOperand(0)->getType()->getVectorNumElements() == 1) { + unsigned Elt = getOrCreateVReg(*U.getOperand(0)); + ValToVReg[&U] = Elt; + return true; + } + MIRBuilder.buildExtractVectorElement(getOrCreateVReg(U), + getOrCreateVReg(*U.getOperand(0)), + getOrCreateVReg(*U.getOperand(1))); + return true; +} + bool IRTranslator::translatePHI(const User &U, MachineIRBuilder &MIRBuilder) { const PHINode &PI = cast<PHINode>(U); auto MIB = MIRBuilder.buildInstr(TargetOpcode::PHI); |