MCPcopy Create free account
hub / github.com/KhronosGroup/SPIRV-Tools / EvalOperator

Method EvalOperator

source/opt/loop_peeling.cpp:1051–1074  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1049}
1050
1051bool LoopPeelingPass::LoopPeelingInfo::EvalOperator(CmpOperator cmp_op,
1052 SExpression lhs,
1053 SExpression rhs,
1054 bool* result) const {
1055 assert(scev_analysis_->IsLoopInvariant(loop_, lhs));
1056 assert(scev_analysis_->IsLoopInvariant(loop_, rhs));
1057 // We perform the test: 0 cmp_op rhs - lhs
1058 // What is left is then to determine the sign of the expression.
1059 switch (cmp_op) {
1060 case CmpOperator::kLT: {
1061 return scev_analysis_->IsAlwaysGreaterThanZero(rhs - lhs, result);
1062 }
1063 case CmpOperator::kGT: {
1064 return scev_analysis_->IsAlwaysGreaterThanZero(lhs - rhs, result);
1065 }
1066 case CmpOperator::kLE: {
1067 return scev_analysis_->IsAlwaysGreaterOrEqualToZero(rhs - lhs, result);
1068 }
1069 case CmpOperator::kGE: {
1070 return scev_analysis_->IsAlwaysGreaterOrEqualToZero(lhs - rhs, result);
1071 }
1072 }
1073 return false;
1074}
1075
1076LoopPeelingPass::LoopPeelingInfo::Direction
1077LoopPeelingPass::LoopPeelingInfo::HandleEquality(SExpression lhs,

Callers

nothing calls this directly

Calls 3

IsLoopInvariantMethod · 0.80

Tested by

no test coverage detected