[OPENCL] Always use convert_T for type conversion#14972
[OPENCL] Always use convert_T for type conversion#14972MasterJH5574 merged 2 commits intoapache:mainfrom
Conversation
This PR changes the Cast in OpenCL to always relying on convert_T to get closer to the spec and more reliable.
| tvm.tir.all( | ||
| *[ | ||
| i // block_size == tvm.tir.const(3, "int32"), | ||
| i % block_size == tvm.tir.const(3, "int32"), |
There was a problem hiding this comment.
This test has covered a bug in TVM which was fixed. Why did you change the compute function? Can we keep it as it was?
There was a problem hiding this comment.
i also migrated the original test to the latest TensorIR so the test is future proof.
Interestingly TensorIR becomes smarter :) so the original condition get simplified and becomes i == 15 here. So I modified the test to ensure we cover most behavior we intend to cover around type casting
There was a problem hiding this comment.
Unfortunately relying on string pattern was too reliable given the set of possible transformations here. So we need to adapt the testcase as we go. If there is a new test cases in TVMScript, i think we can also put it here
There was a problem hiding this comment.
so the original condition get simplified and becomes i == 15 here
Do you mean that this condition:
tvm.tir.all(
*[
i // block_size == tvm.tir.const(3, "int32"),
i % block_size == tvm.tir.const(3, "int32"),
]
),
Was transformed to i == 15?
There was a problem hiding this comment.
I took a look at the git history and the original problem which should be covered by this test was that left and right parts of condition should have the same data type. You can see detailed description in #11021. And next this test was added in #11038.
By decreasing the number of conditions in tvm.tir.all, you prevent compiler to generate code such as lcond && rcond. Am I right? In this case, the original problem won't be tested. Sorry if I missed something.
There was a problem hiding this comment.
Sorry I wasn't being clear, right
tvm.tir.all(
*[
i // block_size == tvm.tir.const(3, "int32"),
i % block_size == tvm.tir.const(3, "int32"),
]
)
In TensorIR schedule the ^ condition get transformed to i == 15, as indeed that makes sense.
So we might need a different condition to test the chains.
There was a problem hiding this comment.
OK updated to a case where simplification won't happen
|
@tvm-bot rerun |
1 similar comment
|
@tvm-bot rerun |
This PR changes the Cast in OpenCL to always relying on convert_T to get closer to the spec and more reliable.