1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
|
#include "llr/llr.h"
#include "cir/cir.h"
namespace goose::llr
namespace goose::cir
{
bool IsValueConstantOrExecutable( const ir::Value& val )
bool IsValueConstantOrExecutable( const eir::Value& val )
{
if( val.isConstant() )
return true;
return val.llr()->canBeExecuted();
return val.cir()->canBeExecuted();
}
bool CanValueBeEagerlyEvaluated( const ir::Value& val )
bool CanValueBeEagerlyEvaluated( const eir::Value& val )
{
if( val.isConstant() )
return true;
return val.llr()->canBeEagerlyEvaluated();
return val.cir()->canBeEagerlyEvaluated();
}
bool IsCompileTimeTempRef( const ir::Value& val )
bool IsCompileTimeTempRef( const eir::Value& val )
{
if( !val.isConstant() )
return false;
const auto* pRefInst = get_if< CalcAddress >( &val.llr()->content() );
const auto* pRefInst = get_if< CalcAddress >( &val.cir()->content() );
return pRefInst && pRefInst->isTempRef();
}
}
|