diff options
author | Stanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com> | 2020-02-10 13:37:00 -0800 |
---|---|---|
committer | Stanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com> | 2020-02-12 13:29:57 -0800 |
commit | f8d044bbcfdc9e1ddc02247ffb86fe39e1f277f0 (patch) | |
tree | 01d1af19062165e43159266d93bf601354ba4839 /clang/lib/CodeGen/CodeGenFunction.cpp | |
parent | baf3a53b5750a0b1363248d45b0fa0cbda0253e1 (diff) | |
download | llvm-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