diff options
author | Chris Lattner <sabre@nondot.org> | 2007-03-03 05:27:34 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-03-03 05:27:34 +0000 |
commit | c739cd6d0701c940d3b76fec5a8793ba66c1172f (patch) | |
tree | bf39374da4edb94ba70a1f07a1bb4d94a735ef20 /lib/ExecutionEngine/ExecutionEngine.cpp | |
parent | cc08feb999572c8cc3dfb60417aa8c55d1df6371 (diff) |
my recent change caused a failure in a bswap testcase, because it changed
the order that instcombine processed instructions in the testcase. The end
result is that instcombine finished with:
define i16 @test1(i16 %a) {
%tmp = zext i16 %a to i32 ; <i32> [#uses=2]
%tmp21 = lshr i32 %tmp, 8 ; <i32> [#uses=1]
%tmp5 = shl i32 %tmp, 8 ; <i32> [#uses=1]
%tmp.upgrd.32 = or i32 %tmp21, %tmp5 ; <i32> [#uses=1]
%tmp.upgrd.3 = trunc i32 %tmp.upgrd.32 to i16 ; <i16> [#uses=1]
ret i16 %tmp.upgrd.3
}
which can't get matched as a bswap.
This patch makes instcombine more sophisticated about removing truncating
casts, allowing it to turn this into:
define i16 @test2(i16 %a) {
%tmp211 = lshr i16 %a, 8
%tmp52 = shl i16 %a, 8
%tmp.upgrd.323 = or i16 %tmp211, %tmp52
ret i16 %tmp.upgrd.323
}
which then matches as bswap. This fixes bswap.ll and implements
InstCombine/cast2.ll:test[12]. This also implements cast elimination of
add/sub.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34870 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/ExecutionEngine/ExecutionEngine.cpp')
0 files changed, 0 insertions, 0 deletions