diff options
| author | Diana Picus <diana.picus@linaro.org> | 2019-06-27 09:49:07 +0000 |
|---|---|---|
| committer | Diana Picus <diana.picus@linaro.org> | 2019-06-27 09:49:07 +0000 |
| commit | 74a50a723bfd892b2b8f58967417ea1f3d5ad55c (patch) | |
| tree | 3ba51579574816490f65844858b6d7bb2e18d1e3 /llvm/lib/CodeGen | |
| parent | 253b53b2ecf6930df18b355bc01877f97d8f2066 (diff) | |
| download | bcm5719-llvm-74a50a723bfd892b2b8f58967417ea1f3d5ad55c.tar.gz bcm5719-llvm-74a50a723bfd892b2b8f58967417ea1f3d5ad55c.zip | |
[GlobalISel] Remove [un]packRegs from IRTranslator
Remove the last use of packRegs from IRTranslator and delete
pack/unpackRegs. This introduces a fallback to DAGISel for intrinsics
with aggregate arguments, since we don't have a testcase for them so
it's hard to tell how we'd want to handle them.
Discussed in https://reviews.llvm.org/D63551
llvm-svn: 364514
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp | 33 |
1 files changed, 4 insertions, 29 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp index 48b3a52f084..0827db38934 100644 --- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp +++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp @@ -1537,34 +1537,6 @@ bool IRTranslator::translateInlineAsm(const CallInst &CI, return true; } -Register IRTranslator::packRegs(const Value &V, - MachineIRBuilder &MIRBuilder) { - ArrayRef<Register> Regs = getOrCreateVRegs(V); - ArrayRef<uint64_t> Offsets = *VMap.getOffsets(V); - LLT BigTy = getLLTForType(*V.getType(), *DL); - - if (Regs.size() == 1) - return Regs[0]; - - Register Dst = MRI->createGenericVirtualRegister(BigTy); - MIRBuilder.buildUndef(Dst); - for (unsigned i = 0; i < Regs.size(); ++i) { - Register NewDst = MRI->createGenericVirtualRegister(BigTy); - MIRBuilder.buildInsert(NewDst, Dst, Regs[i], Offsets[i]); - Dst = NewDst; - } - return Dst; -} - -void IRTranslator::unpackRegs(const Value &V, Register Src, - MachineIRBuilder &MIRBuilder) { - ArrayRef<Register> Regs = getOrCreateVRegs(V); - ArrayRef<uint64_t> Offsets = *VMap.getOffsets(V); - - for (unsigned i = 0; i < Regs.size(); ++i) - MIRBuilder.buildExtract(Regs[i], Src, Offsets[i]); -} - bool IRTranslator::translateCall(const User &U, MachineIRBuilder &MIRBuilder) { const CallInst &CI = cast<CallInst>(U); auto TII = MF->getTarget().getIntrinsicInfo(); @@ -1631,7 +1603,10 @@ bool IRTranslator::translateCall(const User &U, MachineIRBuilder &MIRBuilder) { // Some intrinsics take metadata parameters. Reject them. if (isa<MetadataAsValue>(Arg)) return false; - MIB.addUse(packRegs(*Arg, MIRBuilder)); + ArrayRef<Register> VRegs = getOrCreateVRegs(*Arg); + if (VRegs.size() > 1) + return false; + MIB.addUse(VRegs[0]); } // Add a MachineMemOperand if it is a target mem intrinsic. |

