diff options
author | Aditya Nandakumar <aditya_nandakumar@apple.com> | 2017-11-15 23:45:04 +0000 |
---|---|---|
committer | Aditya Nandakumar <aditya_nandakumar@apple.com> | 2017-11-15 23:45:04 +0000 |
commit | 954eea074b3dd1ea73609fafddf7d81e3468b695 (patch) | |
tree | b3c852f07749afb92bafa67f618b6296a85adb0e /llvm/lib/CodeGen | |
parent | 7fb4d3d16e5f21c8a50a87d9a8f31da36fcdfa91 (diff) | |
download | bcm5719-llvm-954eea074b3dd1ea73609fafddf7d81e3468b695.tar.gz bcm5719-llvm-954eea074b3dd1ea73609fafddf7d81e3468b695.zip |
[GISel][NFC]: Move getOpcodeDef from the LegalizationArtifactCombiner into GlobalISel/Utils for use elsewhere
llvm-svn: 318350
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/Utils.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/Utils.cpp b/llvm/lib/CodeGen/GlobalISel/Utils.cpp index 9ae0f970f42..5f3b6a2a22c 100644 --- a/llvm/lib/CodeGen/GlobalISel/Utils.cpp +++ b/llvm/lib/CodeGen/GlobalISel/Utils.cpp @@ -129,3 +129,19 @@ const llvm::ConstantFP* llvm::getConstantFPVRegVal(unsigned VReg, return nullptr; return MI->getOperand(1).getFPImm(); } + +llvm::MachineInstr *llvm::getOpcodeDef(unsigned Opcode, unsigned Reg, + const MachineRegisterInfo &MRI) { + auto *DefMI = MRI.getVRegDef(Reg); + auto DstTy = MRI.getType(DefMI->getOperand(0).getReg()); + if (!DstTy.isValid()) + return nullptr; + while (DefMI->getOpcode() == TargetOpcode::COPY) { + unsigned SrcReg = DefMI->getOperand(1).getReg(); + auto SrcTy = MRI.getType(SrcReg); + if (!SrcTy.isValid() || SrcTy != DstTy) + break; + DefMI = MRI.getVRegDef(SrcReg); + } + return DefMI->getOpcode() == Opcode ? DefMI : nullptr; +} |