Commit 368da36
authored
[SPIR-V]: Fix spirv codegen for
Fix the spirv codegen for `abs()` on `uint`, to **not** generate
`OpExtInst` instruction but simply load and pass the value. Fixes
microsoft#7512
# Example
```
[numthreads(1,1,1)]
void main() {
uint32_t A = uint32_t(0xffffffff);
uint32_t B = abs(A);
}
```
## Previously generated SPIR-V
```
%A = OpVariable %_ptr_Function_uint Function
%B = OpVariable %_ptr_Function_uint Function
OpStore %A %uint_4294967295
%13 = OpLoad %uint %A
%14 = OpExtInst %int %1 SAbs %13
OpStore %B %14
```
## Fix
```
%A = OpVariable %_ptr_Function_uint Function
%B = OpVariable %_ptr_Function_uint Function
OpStore %A %uint_4294967295
%13 = OpLoad %uint %A
OpStore %B %13
```
which is equivalent to
```
[numthreads(1,1,1)]
void main() {
uint32_t A = uint32_t(0xffffffff);
uint32_t B = A;
}
```uabs intrinsic when argument is unsigned. (microsoft#7750)1 parent 7670b16 commit 368da36
2 files changed
Lines changed: 23 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9685 | 9685 | | |
9686 | 9686 | | |
9687 | 9687 | | |
| 9688 | + | |
| 9689 | + | |
| 9690 | + | |
| 9691 | + | |
| 9692 | + | |
| 9693 | + | |
| 9694 | + | |
| 9695 | + | |
| 9696 | + | |
| 9697 | + | |
| 9698 | + | |
9688 | 9699 | | |
9689 | 9700 | | |
9690 | 9701 | | |
| |||
9693 | 9704 | | |
9694 | 9705 | | |
9695 | 9706 | | |
9696 | | - | |
9697 | 9707 | | |
9698 | 9708 | | |
9699 | 9709 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
64 | 64 | | |
65 | 65 | | |
66 | 66 | | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
67 | 79 | | |
68 | 80 | | |
69 | 81 | | |
| |||
0 commit comments