Commit 5e07342
Fix byref rewrite: load from addrspace(4) into alloca instead of addrspacecast
The addrspacecast from addrspace(4) to addrspace(0) caused "illegal
VGPR to SGPR copy" errors because LLVM couldn't properly lower
generic pointer accesses back to the constant address space.
Instead, follow Metal's approach: load the struct from the
addrspace(4) kernarg pointer into a local alloca (addrspace 5),
and let SROA decompose it during the optimization pipeline. This
avoids the address space mismatch while still benefiting from byref
semantics — the load from addrspace(4) is a scalar load from the
kernarg segment, and SROA will eliminate dead fields.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>1 parent d0fbeb8 commit 5e07342
1 file changed
Lines changed: 22 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
46 | 46 | | |
47 | 47 | | |
48 | 48 | | |
49 | | - | |
| 49 | + | |
| 50 | + | |
50 | 51 | | |
51 | 52 | | |
52 | 53 | | |
53 | 54 | | |
54 | | - | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
55 | 61 | | |
| 62 | + | |
56 | 63 | | |
57 | 64 | | |
58 | 65 | | |
| |||
61 | 68 | | |
62 | 69 | | |
63 | 70 | | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
64 | 76 | | |
65 | 77 | | |
66 | 78 | | |
| |||
87 | 99 | | |
88 | 100 | | |
89 | 101 | | |
90 | | - | |
| 102 | + | |
91 | 103 | | |
92 | 104 | | |
93 | 105 | | |
94 | 106 | | |
95 | 107 | | |
96 | 108 | | |
97 | 109 | | |
98 | | - | |
99 | | - | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
100 | 117 | | |
101 | 118 | | |
102 | 119 | | |
| |||
0 commit comments