[llvm] 0ef6a25 - [InstCombine] Add bswap test pattern using truncates

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 26 09:12:17 PDT 2020


Author: Simon Pilgrim
Date: 2020-10-26T16:11:03Z
New Revision: 0ef6a25e195bafa285d3b957f247bfb23b2cf704

URL: https://github.com/llvm/llvm-project/commit/0ef6a25e195bafa285d3b957f247bfb23b2cf704
DIFF: https://github.com/llvm/llvm-project/commit/0ef6a25e195bafa285d3b957f247bfb23b2cf704.diff

LOG: [InstCombine] Add bswap test pattern using truncates

Added: 
    

Modified: 
    llvm/test/Transforms/InstCombine/bswap.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/bswap.ll b/llvm/test/Transforms/InstCombine/bswap.ll
index 936ed12cacad..65e2a3607d89 100644
--- a/llvm/test/Transforms/InstCombine/bswap.ll
+++ b/llvm/test/Transforms/InstCombine/bswap.ll
@@ -594,6 +594,39 @@ define i64 @bswap_and_mask_2(i64 %0) {
   ret i64 %7
 }
 
+define i64 @bswap_trunc(i64 %x01234567) {
+; CHECK-LABEL: @bswap_trunc(
+; CHECK-NEXT:    [[X7ZZZZZZZ:%.*]] = shl i64 [[X01234567:%.*]], 56
+; CHECK-NEXT:    [[XZ0123456:%.*]] = lshr i64 [[X01234567]], 8
+; CHECK-NEXT:    [[XZZZZZ012:%.*]] = lshr i64 [[X01234567]], 40
+; CHECK-NEXT:    [[X3456:%.*]] = trunc i64 [[XZ0123456]] to i32
+; CHECK-NEXT:    [[XZ012:%.*]] = trunc i64 [[XZZZZZ012]] to i32
+; CHECK-NEXT:    [[X6543:%.*]] = call i32 @llvm.bswap.i32(i32 [[X3456]])
+; CHECK-NEXT:    [[X210Z:%.*]] = call i32 @llvm.bswap.i32(i32 [[XZ012]])
+; CHECK-NEXT:    [[XZ210:%.*]] = lshr exact i32 [[X210Z]], 8
+; CHECK-NEXT:    [[XZZZZ6543:%.*]] = zext i32 [[X6543]] to i64
+; CHECK-NEXT:    [[XZZZZZ210:%.*]] = zext i32 [[XZ210]] to i64
+; CHECK-NEXT:    [[XZ6543ZZZ:%.*]] = shl nuw nsw i64 [[XZZZZ6543]], 24
+; CHECK-NEXT:    [[XZ6543210:%.*]] = or i64 [[XZ6543ZZZ]], [[XZZZZZ210]]
+; CHECK-NEXT:    [[X76543210:%.*]] = or i64 [[XZ6543210]], [[X7ZZZZZZZ]]
+; CHECK-NEXT:    ret i64 [[X76543210]]
+;
+  %x7zzzzzzz = shl i64 %x01234567, 56
+  %xz0123456 = lshr i64 %x01234567, 8
+  %xzzzzz012 = lshr i64 %x01234567, 40
+  %x3456 = trunc i64 %xz0123456 to i32
+  %xz012 = trunc i64 %xzzzzz012 to i32
+  %x6543 = call i32 @llvm.bswap.i32(i32 %x3456)
+  %x210z = call i32 @llvm.bswap.i32(i32 %xz012)
+  %xz210 = lshr i32 %x210z, 8
+  %xzzzz6543 = zext i32 %x6543 to i64
+  %xzzzzz210 = zext i32 %xz210 to i64
+  %xz6543zzz = shl i64 %xzzzz6543, 24
+  %xz6543210 = or i64 %xzzzzz210, %xz6543zzz
+  %x76543210 = or i64 %xz6543210, %x7zzzzzzz
+  ret i64 %x76543210
+}
+
 define i32 @shuf_4bytes(<4 x i8> %x) {
 ; CHECK-LABEL: @shuf_4bytes(
 ; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i8> [[X:%.*]] to i32


        


More information about the llvm-commits mailing list