summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAditya Nandakumar <aditya_nandakumar@apple.com>2017-05-12 22:54:52 +0000
committerAditya Nandakumar <aditya_nandakumar@apple.com>2017-05-12 22:54:52 +0000
commit2a735421d1aace9d64c4ee7adc1f905974311db3 (patch)
treed7af7e68e4f9be539ccb5484227eaccf04a25b50
parent479ddd20fc60dfb57d1f92188277acea91370a5b (diff)
downloadbcm5719-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.h3
-rw-r--r--llvm/lib/CodeGen/GlobalISel/Utils.cpp8
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();
+}
OpenPOWER on IntegriCloud