aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenFunction.cpp
diff options
context:
space:
mode:
authorStanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com>2020-02-10 13:37:00 -0800
committerStanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com>2020-02-12 13:29:57 -0800
commitf8d044bbcfdc9e1ddc02247ffb86fe39e1f277f0 (patch)
tree01d1af19062165e43159266d93bf601354ba4839 /clang/lib/CodeGen/CodeGenFunction.cpp
parentbaf3a53b5750a0b1363248d45b0fa0cbda0253e1 (diff)
downloadllvm-f8d044bbcfdc9e1ddc02247ffb86fe39e1f277f0.zip
llvm-f8d044bbcfdc9e1ddc02247ffb86fe39e1f277f0.tar.gz
llvm-f8d044bbcfdc9e1ddc02247ffb86fe39e1f277f0.tar.bz2
[TBLGEN] Fix subreg value overflow in DAGISelMatcher
Tablegen's DAGISelMatcher emits integers in a VBR format, so if an integer is below 128 it can fit into a single byte, otherwise high bit is set, next byte is used etc. MatcherTable is essentially an unsigned char table. When SelectionDAGISel parses the table it does a reverse translation. In a situation when numeric value of an integer to emit is unknown it can be emitted not as OPC_EmitInteger but as OPC_EmitStringInteger using a symbolic name of the value. In this situation the value should not exceed 127. One of the situations when OPC_EmitStringInteger is used is if we need to emit a subreg into a matcher table. However, number of subregs can exceed 127. Currently last defined subreg for AMDGPU is 192. That results in a silent bug in the ISel with matcher reading from an invalid offset. Fixed this bug to emit actual VBR encoded value for a subregs which value exceeds 127. Differential Revision: https://reviews.llvm.org/D74368
Diffstat (limited to 'clang/lib/CodeGen/CodeGenFunction.cpp')
0 files changed, 0 insertions, 0 deletions