[InstCombine] Let combineLoadToNewType preserve ABI alignment of the load (PR44543)
authorJuneyoung Lee <aqjune@gmail.com>
Tue, 14 Jan 2020 16:11:20 +0000 (01:11 +0900)
committerJuneyoung Lee <aqjune@gmail.com>
Tue, 14 Jan 2020 18:20:53 +0000 (03:20 +0900)
commit3e32b7e12701de772b1cdf855b42253650a1e997
treecfaa7f905c9dcbf2145a9e646ff929892f6ab608
parent40c5bd4212a51216a489fdaaf59060921d677009
[InstCombine] Let combineLoadToNewType preserve ABI alignment of the load (PR44543)

Summary:
If aligment on `LoadInst` isn't specified, load is assumed to be ABI-aligned.
And said aligment may be different for different types.
So if we change load type, but don't pay extra attention to the aligment
(i.e. keep it unspecified), we may either overpromise (if the default aligment
of the new type is higher), or underpromise (if the default aligment
of the new type is smaller).

Thus, if no alignment is specified, we need to manually preserve the implied ABI alignment.

This addresses https://bugs.llvm.org/show_bug.cgi?id=44543 by making combineLoadToNewType preserve ABI alignment of the load.

Reviewers: spatel, lebedev.ri

Subscribers: hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D72710
llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
llvm/test/Transforms/InstCombine/load-bitcast64.ll