[GISel]: Add a getConstantFPVRegVal utility
authorAditya Nandakumar <aditya_nandakumar@apple.com>
Fri, 12 May 2017 22:54:52 +0000 (22:54 +0000)
committerAditya Nandakumar <aditya_nandakumar@apple.com>
Fri, 12 May 2017 22:54:52 +0000 (22:54 +0000)
This might be useful across various GISel Passes

https://reviews.llvm.org/D33051

llvm-svn: 302964

llvm/include/llvm/CodeGen/GlobalISel/Utils.h
llvm/lib/CodeGen/GlobalISel/Utils.cpp

index 92bc973..69d5070 100644 (file)
@@ -30,6 +30,7 @@ class TargetInstrInfo;
 class TargetPassConfig;
 class TargetRegisterInfo;
 class Twine;
+class ConstantFP;
 
 /// Try to constrain Reg so that it is usable by argument OpIdx of the
 /// provided MCInstrDesc \p II. If this fails, create a new virtual
@@ -62,6 +63,8 @@ void reportGISelFailure(MachineFunction &MF, const TargetPassConfig &TPC,
 
 Optional<int64_t> getConstantVRegVal(unsigned VReg,
                                      const MachineRegisterInfo &MRI);
+const ConstantFP* getConstantFPVRegVal(unsigned VReg,
+                                       const MachineRegisterInfo &MRI);
 
 } // End namespace llvm.
 #endif
index 3c93f81..254bdf1 100644 (file)
@@ -110,3 +110,11 @@ Optional<int64_t> llvm::getConstantVRegVal(unsigned VReg,
 
   return None;
 }
+
+const llvm::ConstantFP* llvm::getConstantFPVRegVal(unsigned VReg,
+                                       const MachineRegisterInfo &MRI) {
+  MachineInstr *MI = MRI.getVRegDef(VReg);
+  if (TargetOpcode::G_FCONSTANT != MI->getOpcode())
+    return nullptr;
+  return MI->getOperand(1).getFPImm();
+}