aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
diff options
context:
space:
mode:
authorDrew Wock <ajwock@gmail.com>2020-01-15 12:51:42 -0500
committerKevin P. Neal <kevin.neal@sas.com>2020-01-17 12:22:52 -0500
commit0bcfafc5e71d4f636d456317a3a2e6fd903d4755 (patch)
tree4d9c790fb791c403bdb8cd714ab140ab6d7410aa /llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
parentf343544b813891387add8ef01406d36b82ed0a7e (diff)
downloadllvm-0bcfafc5e71d4f636d456317a3a2e6fd903d4755.zip
llvm-0bcfafc5e71d4f636d456317a3a2e6fd903d4755.tar.gz
llvm-0bcfafc5e71d4f636d456317a3a2e6fd903d4755.tar.bz2
[SeparateConstOffsetFromGEP] Fix: sext(a) + sext(b) -> sext(a + b) matches add and sub instructions with one another
During the SeparateConstOffsetFromGEP pass, signed extensions are distributed to the values that feed into them and then later recombined. The recombination stage is somewhat problematic- it doesn't differ add and sub instructions from another when matching the sext(a) +/- sext(b) -> sext(a +/- b) pattern in some instances. An example- the IR contains: %unextendedA %unextendedB %subuAuB = unextendedA - unextendedB %extA = extend A %extB = extend B %addeAeB = extA + extB The problematic optimization will transform that into: %unextendedA %unextendedB %subuAuB = unextendedA - unextendedB %extA = extend A %extB = extend B %addeAeB = extend subuAuB ; Obviously not semantically equivalent to the IR input. This patch fixes that. Patch by Drew Wock <drew.wock@sas.com> Differential Revision: https://reviews.llvm.org/D65967
Diffstat (limited to 'llvm/lib/Bitcode/Writer/BitcodeWriter.cpp')
0 files changed, 0 insertions, 0 deletions