diff options
| author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-07-09 22:19:13 +0000 |
|---|---|---|
| committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-07-09 22:19:13 +0000 |
| commit | 14a4495155c957d7690184ded94f6c42981991ff (patch) | |
| tree | 9ea4488351af3abd6d4babe72b8afa7ca59fcd4b /llvm/lib/CodeGen/GlobalISel/Utils.cpp | |
| parent | d6c15b661ab0aabb00f1219ce4af7136938e67e2 (diff) | |
| download | bcm5719-llvm-14a4495155c957d7690184ded94f6c42981991ff.tar.gz bcm5719-llvm-14a4495155c957d7690184ded94f6c42981991ff.zip | |
GlobalISel: Combine unmerge of merge with intermediate cast
This eliminates some illegal intermediate vectors when operations are
scalarized.
llvm-svn: 365566
Diffstat (limited to 'llvm/lib/CodeGen/GlobalISel/Utils.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/Utils.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/Utils.cpp b/llvm/lib/CodeGen/GlobalISel/Utils.cpp index 1018c26ece4..ed168a6188b 100644 --- a/llvm/lib/CodeGen/GlobalISel/Utils.cpp +++ b/llvm/lib/CodeGen/GlobalISel/Utils.cpp @@ -281,8 +281,8 @@ const llvm::ConstantFP* llvm::getConstantFPVRegVal(unsigned VReg, return MI->getOperand(1).getFPImm(); } -llvm::MachineInstr *llvm::getOpcodeDef(unsigned Opcode, unsigned Reg, - const MachineRegisterInfo &MRI) { +llvm::MachineInstr *llvm::getDefIgnoringCopies(Register Reg, + const MachineRegisterInfo &MRI) { auto *DefMI = MRI.getVRegDef(Reg); auto DstTy = MRI.getType(DefMI->getOperand(0).getReg()); if (!DstTy.isValid()) @@ -294,7 +294,13 @@ llvm::MachineInstr *llvm::getOpcodeDef(unsigned Opcode, unsigned Reg, break; DefMI = MRI.getVRegDef(SrcReg); } - return DefMI->getOpcode() == Opcode ? DefMI : nullptr; + return DefMI; +} + +llvm::MachineInstr *llvm::getOpcodeDef(unsigned Opcode, Register Reg, + const MachineRegisterInfo &MRI) { + MachineInstr *DefMI = getDefIgnoringCopies(Reg, MRI); + return DefMI && DefMI->getOpcode() == Opcode ? DefMI : nullptr; } APFloat llvm::getAPFloatFromSize(double Val, unsigned Size) { |

