[PATCH] D17583: [InstCombine] transform bitcasted bitwise logic ops with constants (PR26702)
Sanjay Patel via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 24 15:17:01 PST 2016
spatel created this revision.
spatel added reviewers: majnemer, hfinkel, joker.eph.
spatel added a subscriber: llvm-commits.
Herald added a subscriber: mcrosier.
Given that we're not actually deleting any instructions in the included regression tests, I think we would call this a canonicalization step.
The motivation comes from the example in PR26702:
https://llvm.org/bugs/show_bug.cgi?id=26702
If we hoist the bitwise logic ahead of the bitcast, the previously unoptimizable example of:
define <4 x i32> @is_negative(<4 x i32> %x) {
%lobit = ashr <4 x i32> %x, <i32 31, i32 31, i32 31, i32 31>
%not = xor <4 x i32> %lobit, <i32 -1, i32 -1, i32 -1, i32 -1>
%bc = bitcast <4 x i32> %not to <2 x i64>
%notnot = xor <2 x i64> %bc, <i64 -1, i64 -1>
%bc2 = bitcast <2 x i64> %notnot to <4 x i32>
ret <4 x i32> %bc2
}
Simplifies to the expected:
define <4 x i32> @is_negative(<4 x i32> %x) {
%lobit = ashr <4 x i32> %x, <i32 31, i32 31, i32 31, i32 31>
ret <4 x i32> %lobit
}
http://reviews.llvm.org/D17583
Files:
lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
test/Transforms/InstCombine/bitcast-bigendian.ll
test/Transforms/InstCombine/bitcast.ll
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D17583.48985.patch
Type: text/x-patch
Size: 5332 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160224/cfd825cc/attachment.bin>
More information about the llvm-commits
mailing list