forked from OSchip/llvm-project
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:
parent
3ba4a720ad
commit
5e1fa83bf2
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue