Recommit r307064, "[InstCombine] Add test cases demonstrating creation of extra bswap instrinsic calls when when optimizing bswap and bitwise ops when the bswaps have additional uses. NFC"

The test check lines have now been fixed.

llvm-svn: 307106
This commit is contained in:
Craig Topper 2017-07-04 20:15:24 +00:00
parent 3ba4a720ad
commit 5e1fa83bf2
1 changed files with 63 additions and 0 deletions

View File

@ -1,3 +1,4 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -instcombine -S | FileCheck %s
; rdar://5992453
@ -280,6 +281,68 @@ define <2 x i32> @bs_xor32ivec(<2 x i32> %a, <2 x i32> %b) #0 {
ret <2 x i32> %tmp2
}
define i64 @bs_and64_multiuse1(i64 %a, i64 %b) #0 {
; CHECK-LABEL: @bs_and64_multiuse1(
; CHECK-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.bswap.i64(i64 [[A:%.*]])
; CHECK-NEXT: [[TMP2:%.*]] = tail call i64 @llvm.bswap.i64(i64 [[B:%.*]])
; CHECK-NEXT: [[TMP3:%.*]] = and i64 [[A]], [[B]]
; CHECK-NEXT: [[TMP6:%.*]] = call i64 @llvm.bswap.i64(i64 [[TMP3]])
; CHECK-NEXT: [[TMP4:%.*]] = mul i64 [[TMP6]], [[TMP1]]
; CHECK-NEXT: [[TMP5:%.*]] = mul i64 [[TMP4]], [[TMP2]]
; CHECK-NEXT: ret i64 [[TMP5]]
;
%tmp1 = tail call i64 @llvm.bswap.i64(i64 %a)
%tmp2 = tail call i64 @llvm.bswap.i64(i64 %b)
%tmp3 = and i64 %tmp1, %tmp2
%tmp4 = mul i64 %tmp3, %tmp1 ; to increase use count of the bswaps
%tmp5 = mul i64 %tmp4, %tmp2 ; to increase use count of the bswaps
ret i64 %tmp5
}
define i64 @bs_and64_multiuse2(i64 %a, i64 %b) #0 {
; CHECK-LABEL: @bs_and64_multiuse2(
; CHECK-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.bswap.i64(i64 [[A:%.*]])
; CHECK-NEXT: [[TMP2:%.*]] = and i64 [[A]], [[B:%.*]]
; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.bswap.i64(i64 [[TMP2]])
; CHECK-NEXT: [[TMP4:%.*]] = mul i64 [[TMP3]], [[TMP1]]
; CHECK-NEXT: ret i64 [[TMP4]]
;
%tmp1 = tail call i64 @llvm.bswap.i64(i64 %a)
%tmp2 = tail call i64 @llvm.bswap.i64(i64 %b)
%tmp3 = and i64 %tmp1, %tmp2
%tmp4 = mul i64 %tmp3, %tmp1 ; to increase use count of the bswaps
ret i64 %tmp4
}
define i64 @bs_and64_multiuse3(i64 %a, i64 %b) #0 {
; CHECK-LABEL: @bs_and64_multiuse3(
; CHECK-NEXT: [[TMP2:%.*]] = tail call i64 @llvm.bswap.i64(i64 [[B:%.*]])
; CHECK-NEXT: [[TMP1:%.*]] = and i64 [[A:%.*]], [[B]]
; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.bswap.i64(i64 [[TMP1]])
; CHECK-NEXT: [[TMP4:%.*]] = mul i64 [[TMP3]], [[TMP2]]
; CHECK-NEXT: ret i64 [[TMP4]]
;
%tmp1 = tail call i64 @llvm.bswap.i64(i64 %a)
%tmp2 = tail call i64 @llvm.bswap.i64(i64 %b)
%tmp3 = and i64 %tmp1, %tmp2
%tmp4 = mul i64 %tmp3, %tmp2 ; to increase use count of the bswaps
ret i64 %tmp4
}
define i64 @bs_and64i_multiuse(i64 %a, i64 %b) #0 {
; CHECK-LABEL: @bs_and64i_multiuse(
; CHECK-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.bswap.i64(i64 [[A:%.*]])
; CHECK-NEXT: [[TMP2:%.*]] = and i64 [[A]], 129085117527228416
; CHECK-NEXT: [[TMP4:%.*]] = call i64 @llvm.bswap.i64(i64 [[TMP2]])
; CHECK-NEXT: [[TMP3:%.*]] = mul i64 [[TMP4]], [[TMP1]]
; CHECK-NEXT: ret i64 [[TMP3]]
;
%tmp1 = tail call i64 @llvm.bswap.i64(i64 %a)
%tmp2 = and i64 %tmp1, 1000000001
%tmp3 = mul i64 %tmp2, %tmp1 ; to increase use count of the bswap
ret i64 %tmp3
}
declare i16 @llvm.bswap.i16(i16)
declare i32 @llvm.bswap.i32(i32)
declare i64 @llvm.bswap.i64(i64)