diff options
author | Erich Keane <erich.keane@intel.com> | 2019-12-13 12:15:41 -0800 |
---|---|---|
committer | Erich Keane <erich.keane@intel.com> | 2019-12-13 12:27:31 -0800 |
commit | 348f22eac83d9a3ee946e41be43fe507f04a89b6 (patch) | |
tree | f677d57c6810956a083d6a6e253c0695d17aa4d6 /lldb/packages/Python/lldbsuite/test/lldbplatformutil.py | |
parent | a0f43b0043581b37b10d105a85f0653704d3657b (diff) | |
download | bcm5719-llvm-348f22eac83d9a3ee946e41be43fe507f04a89b6.tar.gz bcm5719-llvm-348f22eac83d9a3ee946e41be43fe507f04a89b6.zip |
Correct gcc vector splat conversion from float to int-vector
In looking into some other code, I came across this issue where a
float converted to a gcc integer vector via a splat causes it to miss
the float-to-integral cast, which causes some REALLY strange codegen
bugs.
The AST looked like:
`-ImplicitCastExpr <col:13>
'gcc_int_2':'__attribute__((__vector_size__(2 * sizeof(int)))) int' <VectorSplat>
`-ImplicitCastExpr <col:13> 'float' <LValueToRValue>
`-DeclRefExpr <col:13> 'float' lvalue ParmVar
0x556f16a5dc90 'f' 'float'
Despite the type of the VectorSplat cast as printed, it ended up
becoming a vector of float, which caused non-matching instructions. For
example, IntVector + a float constant resulted in:
add <2 x i32> %8, <2 x float> <float 3.000000e+00, float 3.000000e+00>
This patch corrects the conversion so that the float is first converted
to an integral, THEN splatted.
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/lldbplatformutil.py')
0 files changed, 0 insertions, 0 deletions