llvm-project
13a63428 - [DirectX] Fix the writing of ConstantExpr GEPs to DXIL bitcode (#154446)

Commit
144 days ago
[DirectX] Fix the writing of ConstantExpr GEPs to DXIL bitcode (#154446) Fixes #153304 Changes: - When writing `ConstantExpr` GEPs to DXIL bitcode, the bitcode writer will use the old Constant Code `CST_CODE_CE_GEP_OLD = 12` instead of the newer `CST_CODE_CE_GEP = 32` which is interpreted as an undef in DXIL. Additional context: [CST_CODE_CE_GEP = 12 in DXC](https://github.com/microsoft/DirectXShaderCompiler/blob/0c9e75e7e91bb18fab101abc81d399a0296f499e/include/llvm/Bitcode/LLVMBitCodes.h#L187) while the same constant code is labeled [CST_CODE_CE_GEP_OLD in LLVM](https://github.com/llvm/llvm-project/blob/65de318d186c815f43b892aa20b98c50f22ab6fe/llvm/include/llvm/Bitcode/LLVMBitCodes.h#L411) - Modifies the `PointerTypeAnalysis` to be able to analyze pointer-typed constants that appear in the operands of instructions so that the correct type of the `ConstantExpr` GEP is determined and written into the DXIL bitcode. - Adds a `PointerTypeAnalysis` test and dxil-dis test to ensure that the pointer type of `ConstantExpr` GEPs are resolved and `ConstantExpr` GEPs are written to DXIL bitcode correctly In addition, this PR also adds a missing call to `GV.removeDeadConstantUsers()` in the DXILFinalizeLinkage pass, and removes an unnecessary manual removal of a ConstantExpr in the DXILFlattenArrays pass.
Author
Parents
Loading