mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
0f32a037ef
MemIntrinsic::getDest() looks through pointer casts, and using it directly when building the new GEP+memset results in stuff like: %0 = getelementptr i64* %p, i32 16 %1 = bitcast i64* %0 to i8* call ..memset(i8* %1, ...) instead of the correct: %0 = bitcast i64* %p to i8* %1 = getelementptr i8* %0, i32 16 call ..memset(i8* %1, ...) Instead, use getRawDest, which just gives you the i8* value. While there, use the memcpy's dest, as it's live anyway. In most cases, when the optimization triggers, the memset and memcpy sizes are the same, so the built memset is 0-sized and eliminated. The problem occurs when they're different. Fixes a regression caused by r235232: PR23300. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235419 91177308-0d34-0410-b5e6-96231b3b80d8 |
||
---|---|---|
.. | ||
2008-02-24-MultipleUseofSRet.ll | ||
2008-03-13-ReturnSlotBitcast.ll | ||
2011-06-02-CallSlotOverwritten.ll | ||
align.ll | ||
atomic.ll | ||
callslot_aa.ll | ||
callslot_deref.ll | ||
capturing-func.ll | ||
crash.ll | ||
form-memset.ll | ||
loadstore-sret.ll | ||
memcpy-to-memset-with-lifetimes.ll | ||
memcpy-to-memset.ll | ||
memcpy-undef.ll | ||
memcpy.ll | ||
memmove.ll | ||
memset-memcpy-redundant-memset.ll | ||
smaller.ll | ||
sret.ll |