Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/lib/Analysis/FloatingPointPredicateUtils.cpp
213764 views
1
//===- FloatingPointPredicateUtils.cpp ------------------------------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#include "llvm/Analysis/FloatingPointPredicateUtils.h"
10
#include "llvm/IR/PatternMatch.h"
11
#include <optional>
12
13
namespace llvm {
14
15
using namespace PatternMatch;
16
17
template <>
18
DenormalMode FloatingPointPredicateUtils::queryDenormalMode(const Function &F,
19
Value *Val) {
20
Type *Ty = Val->getType()->getScalarType();
21
return F.getDenormalMode(Ty->getFltSemantics());
22
}
23
24
template <>
25
bool FloatingPointPredicateUtils::lookThroughFAbs(const Function &F, Value *LHS,
26
Value *&Src) {
27
return match(LHS, m_FAbs(m_Value(Src)));
28
}
29
30
template <>
31
std::optional<APFloat>
32
FloatingPointPredicateUtils::matchConstantFloat(const Function &F, Value *Val) {
33
const APFloat *ConstVal;
34
35
if (!match(Val, m_APFloatAllowPoison(ConstVal)))
36
return std::nullopt;
37
38
return *ConstVal;
39
}
40
41
} // namespace llvm
42
43