1#ifndef PROTEUS_FRONTEND_VAR_HPP
2#define PROTEUS_FRONTEND_VAR_HPP
4#include <llvm/IR/IRBuilder.h>
5#include <llvm/IR/Module.h>
13template <
typename T>
struct VarT {};
39 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
43 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
47 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
51 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
60 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
64 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
68 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
72 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
83 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
87 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
91 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
95 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
99 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
102 template <
typename T>
103 std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
108 template <
typename T,
typename = std::enable_if<std::is_arithmetic_v<T>>>
117std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
operator+(
const T &ConstValue,
120std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
operator-(
const T &ConstValue,
123std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
operator*(
const T &ConstValue,
126std::enable_if_t<std::is_arithmetic_v<T>,
Var &>
operator/(
const T &ConstValue,
130Value *
convert(IRBuilderBase IRB, Value *V, Type *TargetType);
131Type *
getCommonType(
const DataLayout &DL, Type *T1, Type *T2);
Definition CppJitModule.cpp:21
Type * getCommonType(const DataLayout &DL, Type *T1, Type *T2)
Get the common type following C++ usual arithmetic conversions.
Definition Var.cpp:538
std::enable_if_t< std::is_arithmetic_v< T >, Var & > operator/(const T &ConstValue, const Var &V)
Definition Var.cpp:498
Var & powf(const Var &L, const Var &R)
Definition Var.cpp:559
Var & sqrtf(const Var &R)
Definition Var.cpp:582
std::enable_if_t< std::is_arithmetic_v< T >, Var & > operator*(const T &ConstValue, const Var &V)
Definition Var.cpp:488
std::enable_if_t< std::is_arithmetic_v< T >, Var & > operator-(const T &ConstValue, const Var &V)
Definition Var.cpp:478
Value * convert(IRBuilderBase IRB, Value *V, Type *TargetType)
Definition Var.cpp:507
std::enable_if_t< std::is_arithmetic_v< T >, Var & > operator+(const T &ConstValue, const Var &V)
Definition Var.cpp:468
Var & operator-(const Var &Other) const
Definition Var.cpp:135
Var & operator*=(Var &Other)
Definition Var.cpp:196
Var & operator/=(Var &Other)
Definition Var.cpp:216
Var & operator!=(const Var &Other) const
Definition Var.cpp:358
Var & operator=(const Var &Other)
Definition Var.cpp:272
Var & operator<=(const Var &Other) const
Definition Var.cpp:334
Var & operator<(const Var &Other) const
Definition Var.cpp:322
void storePointer(Value *Ptr)
Definition Var.cpp:121
Var & operator+=(Var &Other)
Definition Var.cpp:156
bool isPointer() const
Definition Var.cpp:92
Var & operator+(const Var &Other) const
Definition Var.cpp:128
AllocaInst * Alloca
Definition Var.hpp:16
StringRef getName()
Definition Var.cpp:90
Type * PointerElemType
Definition Var.hpp:18
void storeValue(Value *Val)
Definition Var.cpp:102
Var & operator-=(Var &Other)
Definition Var.cpp:176
Var & operator[](size_t I)
End of comparison operators.
Definition Var.cpp:432
FuncBase & Fn
Definition Var.hpp:17
Var & operator==(const Var &Other) const
Definition Var.cpp:346
Var & operator*(const Var &Other) const
Definition Var.cpp:142
Var & operator>(const Var &Other) const
Define comparison operators.
Definition Var.cpp:298
Var & operator/(const Var &Other) const
Definition Var.cpp:149
Value * getValue() const
Definition Var.cpp:72
Var & operator>=(const Var &Other) const
Definition Var.cpp:310
Type * getValueType() const
Definition Var.cpp:82