1#ifndef PROTEUS_FRONTEND_VAR_HPP
2#define PROTEUS_FRONTEND_VAR_HPP
4#include <llvm/IR/IRBuilder.h>
5#include <llvm/IR/Module.h>
37 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
41 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
45 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
49 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
58 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
62 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
66 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
70 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
81 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
85 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
89 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
93 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
97 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
100 template <
typename T>
101 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
106 template <
typename T,
typename = std::enable_if<std::is_arithmetic_v<T>>>
115std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
operator+(
const T &ConstValue,
118std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
operator-(
const T &ConstValue,
121std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
operator*(
const T &ConstValue,
124std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
operator/(
const T &ConstValue,
128Value *
convert(IRBuilderBase IRB, Value *V, Type *TargetType);
129Type *
getCommonType(
const DataLayout &DL, Type *T1, Type *T2);
Definition Dispatcher.cpp:14
Type * getCommonType(const DataLayout &DL, Type *T1, Type *T2)
Get the common type following C++ usual arithmetic conversions.
Definition Var.cpp:530
std::enable_if_t< std::is_arithmetic_v< T >, Var & > operator/(const T &ConstValue, const Var &V)
Definition Var.cpp:490
Var & powf(const Var &L, const Var &R)
Definition Var.cpp:551
Var & sqrtf(const Var &R)
Definition Var.cpp:574
std::enable_if_t< std::is_arithmetic_v< T >, Var & > operator*(const T &ConstValue, const Var &V)
Definition Var.cpp:480
std::enable_if_t< std::is_arithmetic_v< T >, Var & > operator-(const T &ConstValue, const Var &V)
Definition Var.cpp:470
Value * convert(IRBuilderBase IRB, Value *V, Type *TargetType)
Definition Var.cpp:499
std::enable_if_t< std::is_arithmetic_v< T >, Var & > operator+(const T &ConstValue, const Var &V)
Definition Var.cpp:460
Var & operator-(const Var &Other) const
Definition Var.cpp:127
Var & operator*=(Var &Other)
Definition Var.cpp:188
Var & operator/=(Var &Other)
Definition Var.cpp:208
Var & operator!=(const Var &Other) const
Definition Var.cpp:350
Var & operator=(const Var &Other)
Definition Var.cpp:264
Var & operator<=(const Var &Other) const
Definition Var.cpp:326
Var & operator<(const Var &Other) const
Definition Var.cpp:314
void storePointer(Value *Ptr)
Definition Var.cpp:113
Var & operator+=(Var &Other)
Definition Var.cpp:148
bool isPointer() const
Definition Var.cpp:92
Var & operator+(const Var &Other) const
Definition Var.cpp:120
AllocaInst * Alloca
Definition Var.hpp:14
StringRef getName()
Definition Var.cpp:90
Type * PointerElemType
Definition Var.hpp:16
void storeValue(Value *Val)
Definition Var.cpp:102
Var & operator-=(Var &Other)
Definition Var.cpp:168
Var & operator[](size_t I)
End of comparison operators.
Definition Var.cpp:424
Var & operator==(const Var &Other) const
Definition Var.cpp:338
Var & operator*(const Var &Other) const
Definition Var.cpp:134
Var & operator>(const Var &Other) const
Define comparison operators.
Definition Var.cpp:290
Var & operator/(const Var &Other) const
Definition Var.cpp:141
Value * getValue() const
Definition Var.cpp:72
Func & Fn
Definition Var.hpp:15
Var & operator>=(const Var &Other) const
Definition Var.cpp:302
Type * getValueType() const
Definition Var.cpp:82