[PATCH] SROA: Handle a case of store size being smaller than allocation size
Thomas Jablin
tjablin at gmail.com
Thu Aug 21 16:03:24 PDT 2014
I think this patch might not be the right approach. The underlying issue is
that clang translates:
union U { long m0[3]; long double m1; };
to:
%union.U = type { x86_fp80, [16 x i8] }
The x86_fp80 type is 10 bytes of data aligned to 16 bytes. Is it
permissible to copy only the lower 10 bytes of an x86_fp80? I think the
answer should be yes. This is the behavior of the underlying x87 fldt and
fstpt instructions. If copying only the lower 10 bytes of a x86_fp80 is
permissible, then the C union was not correctly lowered to LLVM IR. I think
the correct resolution is to lower the union to:
%union.U = type { [4 x i64] }
http://reviews.llvm.org/D5012
More information about the llvm-commits
mailing list