diff options
| author | Volkan Keles <vkeles@apple.com> | 2018-02-14 19:58:36 +0000 | 
|---|---|---|
| committer | Volkan Keles <vkeles@apple.com> | 2018-02-14 19:58:36 +0000 | 
| commit | 02bb1747a34974e5be571f6d90a5e7ffb3983fb7 (patch) | |
| tree | 866dce0fc474b064cfb1c26970782bc5887da56a /llvm/lib/CodeGen | |
| parent | af5d499cb9a7bf4edbabec9432f7eb42b5197592 (diff) | |
| download | bcm5719-llvm-02bb1747a34974e5be571f6d90a5e7ffb3983fb7.tar.gz bcm5719-llvm-02bb1747a34974e5be571f6d90a5e7ffb3983fb7.zip | |
GlobalISel: Add templated functions and pattern matcher support for some more opcodes
Summary:
This patch adds templated functions to MachineIRBuilder for some opcodes
and adds pattern matcher support for G_AND and G_OR.
Reviewers: aditya_nandakumar
Reviewed By: aditya_nandakumar
Subscribers: rovka, kristof.beyls, llvm-commits
Differential Revision: https://reviews.llvm.org/D43309
llvm-svn: 325162
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp | 18 | 
1 files changed, 7 insertions, 11 deletions
| diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp index ed1f0c9cb16..d8be22f8aa7 100644 --- a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp +++ b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp @@ -286,11 +286,9 @@ LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalar(MachineInstr &MI,      int NumParts = SizeOp0 / NarrowSize;      SmallVector<unsigned, 2> DstRegs; -    for (int i = 0; i < NumParts; ++i) { -      unsigned Dst = MRI.createGenericVirtualRegister(NarrowTy); -      MIRBuilder.buildUndef(Dst); -      DstRegs.push_back(Dst); -    } +    for (int i = 0; i < NumParts; ++i) +      DstRegs.push_back( +          MIRBuilder.buildUndef(NarrowTy)->getOperand(0).getReg());      MIRBuilder.buildMerge(MI.getOperand(0).getReg(), DstRegs);      MI.eraseFromParent();      return Legalized; @@ -755,7 +753,6 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {      return Legalized;    }    case TargetOpcode::G_FCONSTANT: { -    unsigned DstExt = MRI.createGenericVirtualRegister(WideTy);      const ConstantFP *CFP = MI.getOperand(1).getFPImm();      APFloat Val = CFP->getValueAPF();      LLVMContext &Ctx = MIRBuilder.getMF().getFunction().getContext(); @@ -773,8 +770,8 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {      };      bool LosesInfo;      Val.convert(*LLT2Sem(WideTy), APFloat::rmTowardZero, &LosesInfo); -    MIRBuilder.buildFConstant(DstExt, *ConstantFP::get(Ctx, Val)); -    MIRBuilder.buildFPTrunc(MI.getOperand(0).getReg(), DstExt); +    auto Cst = MIRBuilder.buildFConstant(WideTy, *ConstantFP::get(Ctx, Val)); +    MIRBuilder.buildFPTrunc(MI.getOperand(0).getReg(), Cst);      MI.eraseFromParent();      return Legalized;    } @@ -969,11 +966,10 @@ LegalizerHelper::lower(MachineInstr &MI, unsigned TypeIdx, LLT Ty) {      }      ConstantFP &ZeroForNegation =          *cast<ConstantFP>(ConstantFP::getZeroValueForNegation(ZeroTy)); -    unsigned Zero = MRI.createGenericVirtualRegister(Ty); -    MIRBuilder.buildFConstant(Zero, ZeroForNegation); +    auto Zero = MIRBuilder.buildFConstant(Ty, ZeroForNegation);      MIRBuilder.buildInstr(TargetOpcode::G_FSUB)          .addDef(Res) -        .addUse(Zero) +        .addUse(Zero->getOperand(0).getReg())          .addUse(MI.getOperand(1).getReg());      MI.eraseFromParent();      return Legalized; | 

