[llvm] [IR] Store fast-math flags in subclasses of Instruction (PR #191190)

Alexis Engelke via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 13 01:09:09 PDT 2026


================
@@ -300,3 +300,51 @@ void FastMathFlags::print(raw_ostream &O) const {
       O << " afn";
   }
 }
+
+unsigned short &FPMathOperator::getFMFValue() {
+  auto *V = static_cast<Value *>(this);
+  auto *I = dyn_cast<Instruction>(V);
+
+  if (FastMathFlagsStorage *Op = dyn_cast<UnaryOperator>(I))
+    return Op->FMFValue;
+  if (FastMathFlagsStorage *Op = dyn_cast<FPBinaryOperator>(I))
+    return Op->FMFValue;
+  if (FastMathFlagsStorage *Op = dyn_cast<FPTruncInst>(I))
+    return Op->FMFValue;
+  if (FastMathFlagsStorage *Op = dyn_cast<FPExtInst>(I))
+    return Op->FMFValue;
+  if (FastMathFlagsStorage *Op = dyn_cast<FCmpInst>(I))
+    return Op->FMFValue;
+  if (FastMathFlagsStorage *Op = dyn_cast<PHINode>(I))
+    return Op->FMFValue;
+  if (FastMathFlagsStorage *Op = dyn_cast<SelectInst>(I))
+    return Op->FMFValue;
+  if (FastMathFlagsStorage *Op = dyn_cast<CallInst>(I))
+    return Op->FMFValue;
+
+  llvm_unreachable("Unknown FPMathOperator!");
+}
+
+unsigned short FPMathOperator::getFMFValue() const {
+  const auto *V = static_cast<const Value *>(this);
+  const auto *I = dyn_cast<Instruction>(V);
+
+  if (const FastMathFlagsStorage *Op = dyn_cast<UnaryOperator>(I))
+    return Op->FMFValue;
+  if (const FastMathFlagsStorage *Op = dyn_cast<FPBinaryOperator>(I))
+    return Op->FMFValue;
+  if (const FastMathFlagsStorage *Op = dyn_cast<FPTruncInst>(I))
+    return Op->FMFValue;
+  if (const FastMathFlagsStorage *Op = dyn_cast<FPExtInst>(I))
+    return Op->FMFValue;
+  if (const FastMathFlagsStorage *Op = dyn_cast<FCmpInst>(I))
+    return Op->FMFValue;
+  if (const FastMathFlagsStorage *Op = dyn_cast<PHINode>(I))
+    return Op->FMFValue;
+  if (const FastMathFlagsStorage *Op = dyn_cast<SelectInst>(I))
+    return Op->FMFValue;
+  if (const FastMathFlagsStorage *Op = dyn_cast<CallInst>(I))
+    return Op->FMFValue;
+
+  llvm_unreachable("Unknown FPMathOperator!");
+}
----------------
aengelke wrote:

newline

https://github.com/llvm/llvm-project/pull/191190


More information about the llvm-commits mailing list