<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/140415>140415</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[DirectX] Validation Failure: Explicit gep type does not match pointee type of pointer operand
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
farzonl
</td>
</tr>
</table>
<pre>
```bash
clang-dxc DirectML/Product/Shaders/Generated/Cast_float16_native_accum16_uint8_packed32_256_Strided4D.hlsl -E CSMain -T cs_6_2 -enable-16bit-types -O3 -D DXC_COMPILER=1 -D __SHADER_TARGET_MAJOR=6 -D __SHADER_TARGET_MINOR=2 -I DirectML/Product/Shaders/ -Fo Cast_float16_native_accum16_uint8_packed32_256_Strided4D.dat
lldb -- dxv validation/Cast_float16_native_accum16_uint8_packed32_256_Strided4D.dat
```
```gdb
(lldb) expr *(BasePtr->getType()->getScalarType())
(llvm::Type) $18 = {
Context = 0x000000016fdfdce0
IDAndSubclassData = 14
NumContainedTys = 1
ContainedTys = 0x000000015280e5b8
}
(lldb) expr *Ty
(llvm::Type) $19 = {
Context = 0x000000016fdfdce0
IDAndSubclassData = 2058
NumContainedTys = 0
ContainedTys = nullptr
}
```
## Validation Error
https://github.com/microsoft/DirectXShaderCompiler/blob/adffd31eb02f690d9d1afe86c7fa6f12b4e70aa1/lib/Bitcode/Reader/BitcodeReader.cpp#L3931
## Function failing to validate
```llvm
Materializable
; Function Attrs: noinline nounwind
define void @CSMain() unnamed_addr #1 {
%1 = alloca [4 x i32], align 4
%2 = alloca [4 x i32], align 4
%3 = alloca [4 x i32], align 4
%4 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 0, i32 0, i1 false) #2
%5 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 0, i1 false) #2
%6 = call i32 @dx.op.threadId.i32(i32 93, i32 0) #3
%7 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %5, i32 10) #2
%8 = extractvalue %dx.types.CBufRet.i32 %7, 3
%9 = add i32 %8, %6
%10 = shl i32 %9, 2
%11 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %5, i32 10) #2
%12 = extractvalue %dx.types.CBufRet.i32 %11, 2
%13 = icmp ult i32 %10, %12
br i1 %13, label %14, label %46
; <label>:14 ; preds = %0
%15 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 1, i32 1, i1 false) #2
%16 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %5, i32 5) #2
%17 = extractvalue %dx.types.CBufRet.i32 %16, 1
%18 = extractvalue %dx.types.CBufRet.i32 %16, 2
%19 = extractvalue %dx.types.CBufRet.i32 %16, 3
%20 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %5, i32 9) #2
%21 = extractvalue %dx.types.CBufRet.i32 %20, 0
%22 = extractvalue %dx.types.CBufRet.i32 %20, 1
%23 = extractvalue %dx.types.CBufRet.i32 %20, 2
%24 = extractvalue %dx.types.CBufRet.i32 %20, 3
%25 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %5, i32 1) #2
%26 = extractvalue %dx.types.CBufRet.i32 %25, 0
%27 = extractvalue %dx.types.CBufRet.i32 %25, 1
%28 = extractvalue %dx.types.CBufRet.i32 %25, 2
%29 = extractvalue %dx.types.CBufRet.i32 %25, 3
%30 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %5, i32 3) #2
%31 = extractvalue %dx.types.CBufRet.i32 %30, 0
%32 = extractvalue %dx.types.CBufRet.i32 %30, 1
%33 = extractvalue %dx.types.CBufRet.i32 %30, 2
%34 = extractvalue %dx.types.CBufRet.i32 %30, 3
%35 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %15, i32 %9, i32 0, i8 1, i32 4)
%36 = extractvalue %dx.types.ResRet.i32 %35, 0
%37 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %5, i32 10) #2
%38 = extractvalue %dx.types.CBufRet.i32 %37, 1
; No predecessors!
; No predecessors!
; No predecessors!
; No predecessors!
; No predecessors!
; No predecessors!
; No predecessors!
; <label>:46 ; preds = %0
}
```
## Basic Block failing to validate
```llvm
(lldb) expr getLastInstruction->CurBB->dump()
; <label>:14 ; preds = %0
%15 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 1, i32 1, i1 false) #2
%16 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %5, i32 5) #2
%17 = extractvalue %dx.types.CBufRet.i32 %16, 1
%18 = extractvalue %dx.types.CBufRet.i32 %16, 2
%19 = extractvalue %dx.types.CBufRet.i32 %16, 3
%20 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %5, i32 9) #2
%21 = extractvalue %dx.types.CBufRet.i32 %20, 0
%22 = extractvalue %dx.types.CBufRet.i32 %20, 1
%23 = extractvalue %dx.types.CBufRet.i32 %20, 2
%24 = extractvalue %dx.types.CBufRet.i32 %20, 3
%25 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %5, i32 1) #2
%26 = extractvalue %dx.types.CBufRet.i32 %25, 0
%27 = extractvalue %dx.types.CBufRet.i32 %25, 1
%28 = extractvalue %dx.types.CBufRet.i32 %25, 2
%29 = extractvalue %dx.types.CBufRet.i32 %25, 3
%30 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %5, i32 3) #2
%31 = extractvalue %dx.types.CBufRet.i32 %30, 0
%32 = extractvalue %dx.types.CBufRet.i32 %30, 1
%33 = extractvalue %dx.types.CBufRet.i32 %30, 2
%34 = extractvalue %dx.types.CBufRet.i32 %30, 3
%35 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %15, i32 %9, i32 0, i8 1, i32 4)
%36 = extractvalue %dx.types.ResRet.i32 %35, 0
%37 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %5, i32 10) #2
%38 = extractvalue %dx.types.CBufRet.i32 %37, 1
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWctu2zwWfhp6Q8jgRZKthRe-_s0gaYskGHRnUCRlc0qLAkmlTp9-QMmW7VzaUTrTYvDHMGDp8Ny-w4_UocWcU5tSyglIZiBZDFjtt8ZOCma_m1IPciMeJyBF7TdnbgvQlGtWbiKx53ChrOT-5hqQ1WdrRM09IKu7LRPSOkBWf8lSWualAGQ1Z86vC22Yx-m6ZF49yDXjvN7hdF2r0o_XFeNfpaBkTZJ0feetElLEi-FWOw2jJZzf3TBVwugecrdO1wTCSJYs1zLCaa585B8r6SCMPlEYLeDiy3w9_3Tz-ep6eQvoAgfZen33YbpY3q7vp7d_Le_XN9N_fAqD6YuDVx-bQQKjq5_hhNHKwDcDFMwDNNVa5DCKoNg_wAemlWBemfJXCtf67Sbv_Hoj8nBLxiEqIBmU-8pCQIJoxpz87G0E6HIj_f1jJQEZA5IdBHecaWZP4vA9uHrYAToFdNoOZhCQGI8hoAsIRjOAphDOTenl3jcytEftB6eFKASXqFG5WkxLcVfnXDPnFsyzRhnHzeDHehdcMFVKcf_o2qEw8kx68p6QMZJJPg5ZjhYvw75__BGG7BzDmyEQlIxfBYG68lyIy1rryttT6ueTSSggFP6z4wpcWmuC7tb7ygUYZAXIaqP8ts6H3OwAWe0Ut8aZIvC3JfWXlsZzs6uUlhaQVa5NDsiKiaIQFMsckSLNkMgEZoUcp3xUsLTAJI_lCDGGAVlpFQxmynMjJCCrWxlcnkTt_ZBXFSD0mmY0zNkJwqoueQOgYEqrcgO9OS4BeVA84m4mCE3hDfPSKqbV97ADBA06O_mZem9DAWBpVKlVKWFp6vKbKgVAUyGLIHkwSkAQo3ZbabkM67JkOynWTIjAC4o75gKS4GZKmNaGMwiSWQz3UFECkgUgc8i02pQwPiqTPsq0j3LcKHOmdbgT-2Gz8Q0_sFJoGRCJ_dBUQ24l87KVAjJWlMBkFNypMcTNLyUQXV5gWDDtDryn5Bgx-fWIpF_E9BQx6HYh_NZKJq7EMFSnDZHRM4-NF3r0Mno57_msLm6lH1545nldFNJeGyau5Ybxx7MQSRZCvASdJMkxOkZPQbRbn9x7y7h_YLqWr6dB2kp1qbdbDhMCHobHhxTSjo2oUXFbfVRpsuyiY_xn0WPSCz7Gl9m3S0LxXQVr7Y8QMTrkghvN3AYGNepBrlkuG7A4vriN08MuQmcQ0HkjB3QJ6BSHxTSDlZWi3XABSVCXw3-B991Ke3LxCu9x-jsnLXkWftRvztLgCXfW_QjfWp9iZ2-w7tYLQb-zcNnTwhHcK3nS0LgjGum3VFrrruyEvsH6lHn8ButT2V9ZIv-jTeZZ2dN-ySeXZe_H9tb6VPZ-bG-tT5n3Y3tr3ZWd_la206dlp_3YTi_ZTvuxnV6ynfZjO71kO-3HdnrJdvoK22-le1Z1y77NurqfVRzTH5QcdzU_Ps5PndLZsyRuz1xtTj9ZAue5BQSXU_GHOyTabw3RUUeF8NT-aJoHt-TSORPO4W8e6f35-7p6sY2K0__c67Ne64WTbXcynDGnOJxpw7--djh8cjJ8erjfSH_NnL8qnbd1czqMAF3OazubhQtR76rD_xjvLeJ7i_jeIr63iO8t4nuL-N4i_t-3iOcNxUBMqMhoxgZygkfxKCEUZWiwnWQxpwkjNEkKXEicYcwZT4p0hMYFRowM1IQgkqAEjwhFcYKGdFzksSCjOEnGKBtzECO5Y0oPQ_8xNHYzUM7VcoJjFONk0DQSrnm5Rkgpv8FmFBACksXAToJRlNcbB2KklfPu5MYrr5u3coe_6UGyOP-vf8WUrq0EdAqX-0orrjzcyAqGqkBhpIOl8XDHPN_CyqjSS9mOmeJwb6GppGWlGNRWT37wzqDprNqfqLLmX7J5-9UAcYCsDkgfJuTfAQAA__8hv_xw">