diff options
author | Aditya Nandakumar <aditya_nandakumar@apple.com> | 2017-05-12 22:54:52 +0000 |
---|---|---|
committer | Aditya Nandakumar <aditya_nandakumar@apple.com> | 2017-05-12 22:54:52 +0000 |
commit | 2a735421d1aace9d64c4ee7adc1f905974311db3 (patch) | |
tree | d7af7e68e4f9be539ccb5484227eaccf04a25b50 | |
parent | 479ddd20fc60dfb57d1f92188277acea91370a5b (diff) | |
download | bcm5719-llvm-2a735421d1aace9d64c4ee7adc1f905974311db3.tar.gz bcm5719-llvm-2a735421d1aace9d64c4ee7adc1f905974311db3.zip |
[GISel]: Add a getConstantFPVRegVal utility
This might be useful across various GISel Passes
https://reviews.llvm.org/D33051
llvm-svn: 302964
-rw-r--r-- | llvm/include/llvm/CodeGen/GlobalISel/Utils.h | 3 | ||||
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/Utils.cpp | 8 |
2 files changed, 11 insertions, 0 deletions
diff --git a/llvm/include/llvm/CodeGen/GlobalISel/Utils.h b/llvm/include/llvm/CodeGen/GlobalISel/Utils.h index 92bc9736141..69d50706980 100644 --- a/llvm/include/llvm/CodeGen/GlobalISel/Utils.h +++ b/llvm/include/llvm/CodeGen/GlobalISel/Utils.h @@ -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 diff --git a/llvm/lib/CodeGen/GlobalISel/Utils.cpp b/llvm/lib/CodeGen/GlobalISel/Utils.cpp index 3c93f8123b0..254bdf10d80 100644 --- a/llvm/lib/CodeGen/GlobalISel/Utils.cpp +++ b/llvm/lib/CodeGen/GlobalISel/Utils.cpp @@ -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(); +} |