Commit 5f7bfeab authored by Zhengju Tang's avatar Zhengju Tang Committed by LeiWang1999
Browse files

[BugFix] Conditions Robustness in dynamic vectorize (#404)

parent c091668f
...@@ -396,10 +396,13 @@ private: ...@@ -396,10 +396,13 @@ private:
VectorizedConditionMutator condition_mutator(inner_var, vector_size_); VectorizedConditionMutator condition_mutator(inner_var, vector_size_);
// Adaptively set vectorized variable to the min/max value of the extent // Adaptively set vectorized variable to the min/max value of the extent
PrimExpr condition_bound = condition_mutator(conditions[0]); PrimExpr condition_bound;
if (conditions.size() > 0) {
condition_bound = condition_mutator(conditions[0]);
for (int i = 1; i < conditions.size(); ++i) { for (int i = 1; i < conditions.size(); ++i) {
condition_bound = condition_bound && condition_mutator(conditions[i]); condition_bound = condition_bound && condition_mutator(conditions[i]);
} }
}
if (!disable_dynamic_tail_split) { if (!disable_dynamic_tail_split) {
// If dynamic_tail_split is true, we will vectorize the loop with // If dynamic_tail_split is true, we will vectorize the loop with
...@@ -411,7 +414,11 @@ private: ...@@ -411,7 +414,11 @@ private:
For vectorize_for = For vectorize_for =
For(inner_var, 0, vector_size_, ForKind::kVectorized, vectorize_body); For(inner_var, 0, vector_size_, ForKind::kVectorized, vectorize_body);
For serial_for = For(inner_var, 0, vector_size_, ForKind::kSerial, body); For serial_for = For(inner_var, 0, vector_size_, ForKind::kSerial, body);
if (conditions.size() > 0) {
body = IfThenElse(condition_bound, vectorize_for, serial_for); body = IfThenElse(condition_bound, vectorize_for, serial_for);
} else {
body = vectorize_for;
}
body = For(outer_var, 0, extent / vector_size_, fnode->kind, body, body = For(outer_var, 0, extent / vector_size_, fnode->kind, body,
fnode->thread_binding, fnode->annotations, fnode->span); fnode->thread_binding, fnode->annotations, fnode->span);
return body; return body;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment