mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
Add tests to ExpandMemCmp/X86/memcmp.ll before submitting D76113
This commit is contained in:
parent
dc9c3115ae
commit
74ad14994d
@ -22,6 +22,23 @@ define i32 @cmp2(i8* nocapture readonly %x, i8* nocapture readonly %y) {
|
||||
ret i32 %call
|
||||
}
|
||||
|
||||
define i32 @cmp2_align2(i8* nocapture readonly align 2 %x, i8* nocapture readonly align 2 %y) {
|
||||
; ALL-LABEL: @cmp2_align2(
|
||||
; ALL-NEXT: [[TMP1:%.*]] = bitcast i8* [[X:%.*]] to i16*
|
||||
; ALL-NEXT: [[TMP2:%.*]] = bitcast i8* [[Y:%.*]] to i16*
|
||||
; ALL-NEXT: [[TMP3:%.*]] = load i16, i16* [[TMP1]]
|
||||
; ALL-NEXT: [[TMP4:%.*]] = load i16, i16* [[TMP2]]
|
||||
; ALL-NEXT: [[TMP5:%.*]] = call i16 @llvm.bswap.i16(i16 [[TMP3]])
|
||||
; ALL-NEXT: [[TMP6:%.*]] = call i16 @llvm.bswap.i16(i16 [[TMP4]])
|
||||
; ALL-NEXT: [[TMP7:%.*]] = zext i16 [[TMP5]] to i32
|
||||
; ALL-NEXT: [[TMP8:%.*]] = zext i16 [[TMP6]] to i32
|
||||
; ALL-NEXT: [[TMP9:%.*]] = sub i32 [[TMP7]], [[TMP8]]
|
||||
; ALL-NEXT: ret i32 [[TMP9]]
|
||||
;
|
||||
%call = tail call i32 @memcmp(i8* %x, i8* %y, i64 2)
|
||||
ret i32 %call
|
||||
}
|
||||
|
||||
define i32 @cmp3(i8* nocapture readonly %x, i8* nocapture readonly %y) {
|
||||
; ALL-LABEL: @cmp3(
|
||||
; ALL-NEXT: br label [[LOADBB:%.*]]
|
||||
@ -661,6 +678,83 @@ define i32 @cmp_eq6(i8* nocapture readonly %x, i8* nocapture readonly %y) {
|
||||
ret i32 %conv
|
||||
}
|
||||
|
||||
define i32 @cmp_eq6_align4(i8* nocapture readonly align 4 %x, i8* nocapture readonly align 4 %y) {
|
||||
; X32-LABEL: @cmp_eq6_align4(
|
||||
; X32-NEXT: [[TMP1:%.*]] = bitcast i8* [[X:%.*]] to i32*
|
||||
; X32-NEXT: [[TMP2:%.*]] = bitcast i8* [[Y:%.*]] to i32*
|
||||
; X32-NEXT: [[TMP3:%.*]] = load i32, i32* [[TMP1]]
|
||||
; X32-NEXT: [[TMP4:%.*]] = load i32, i32* [[TMP2]]
|
||||
; X32-NEXT: [[TMP5:%.*]] = xor i32 [[TMP3]], [[TMP4]]
|
||||
; X32-NEXT: [[TMP6:%.*]] = getelementptr i8, i8* [[X]], i64 4
|
||||
; X32-NEXT: [[TMP7:%.*]] = getelementptr i8, i8* [[Y]], i64 4
|
||||
; X32-NEXT: [[TMP8:%.*]] = bitcast i8* [[TMP6]] to i16*
|
||||
; X32-NEXT: [[TMP9:%.*]] = bitcast i8* [[TMP7]] to i16*
|
||||
; X32-NEXT: [[TMP10:%.*]] = load i16, i16* [[TMP8]]
|
||||
; X32-NEXT: [[TMP11:%.*]] = load i16, i16* [[TMP9]]
|
||||
; X32-NEXT: [[TMP12:%.*]] = zext i16 [[TMP10]] to i32
|
||||
; X32-NEXT: [[TMP13:%.*]] = zext i16 [[TMP11]] to i32
|
||||
; X32-NEXT: [[TMP14:%.*]] = xor i32 [[TMP12]], [[TMP13]]
|
||||
; X32-NEXT: [[TMP15:%.*]] = or i32 [[TMP5]], [[TMP14]]
|
||||
; X32-NEXT: [[TMP16:%.*]] = icmp ne i32 [[TMP15]], 0
|
||||
; X32-NEXT: [[TMP17:%.*]] = zext i1 [[TMP16]] to i32
|
||||
; X32-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP17]], 0
|
||||
; X32-NEXT: [[CONV:%.*]] = zext i1 [[CMP]] to i32
|
||||
; X32-NEXT: ret i32 [[CONV]]
|
||||
;
|
||||
; X64_1LD-LABEL: @cmp_eq6_align4(
|
||||
; X64_1LD-NEXT: br label [[LOADBB:%.*]]
|
||||
; X64_1LD: res_block:
|
||||
; X64_1LD-NEXT: br label [[ENDBLOCK:%.*]]
|
||||
; X64_1LD: loadbb:
|
||||
; X64_1LD-NEXT: [[TMP1:%.*]] = bitcast i8* [[X:%.*]] to i32*
|
||||
; X64_1LD-NEXT: [[TMP2:%.*]] = bitcast i8* [[Y:%.*]] to i32*
|
||||
; X64_1LD-NEXT: [[TMP3:%.*]] = load i32, i32* [[TMP1]]
|
||||
; X64_1LD-NEXT: [[TMP4:%.*]] = load i32, i32* [[TMP2]]
|
||||
; X64_1LD-NEXT: [[TMP5:%.*]] = icmp ne i32 [[TMP3]], [[TMP4]]
|
||||
; X64_1LD-NEXT: br i1 [[TMP5]], label [[RES_BLOCK:%.*]], label [[LOADBB1:%.*]]
|
||||
; X64_1LD: loadbb1:
|
||||
; X64_1LD-NEXT: [[TMP6:%.*]] = getelementptr i8, i8* [[X]], i64 4
|
||||
; X64_1LD-NEXT: [[TMP7:%.*]] = getelementptr i8, i8* [[Y]], i64 4
|
||||
; X64_1LD-NEXT: [[TMP8:%.*]] = bitcast i8* [[TMP6]] to i16*
|
||||
; X64_1LD-NEXT: [[TMP9:%.*]] = bitcast i8* [[TMP7]] to i16*
|
||||
; X64_1LD-NEXT: [[TMP10:%.*]] = load i16, i16* [[TMP8]]
|
||||
; X64_1LD-NEXT: [[TMP11:%.*]] = load i16, i16* [[TMP9]]
|
||||
; X64_1LD-NEXT: [[TMP12:%.*]] = icmp ne i16 [[TMP10]], [[TMP11]]
|
||||
; X64_1LD-NEXT: br i1 [[TMP12]], label [[RES_BLOCK]], label [[ENDBLOCK]]
|
||||
; X64_1LD: endblock:
|
||||
; X64_1LD-NEXT: [[PHI_RES:%.*]] = phi i32 [ 0, [[LOADBB1]] ], [ 1, [[RES_BLOCK]] ]
|
||||
; X64_1LD-NEXT: [[CMP:%.*]] = icmp eq i32 [[PHI_RES]], 0
|
||||
; X64_1LD-NEXT: [[CONV:%.*]] = zext i1 [[CMP]] to i32
|
||||
; X64_1LD-NEXT: ret i32 [[CONV]]
|
||||
;
|
||||
; X64_2LD-LABEL: @cmp_eq6_align4(
|
||||
; X64_2LD-NEXT: [[TMP1:%.*]] = bitcast i8* [[X:%.*]] to i32*
|
||||
; X64_2LD-NEXT: [[TMP2:%.*]] = bitcast i8* [[Y:%.*]] to i32*
|
||||
; X64_2LD-NEXT: [[TMP3:%.*]] = load i32, i32* [[TMP1]]
|
||||
; X64_2LD-NEXT: [[TMP4:%.*]] = load i32, i32* [[TMP2]]
|
||||
; X64_2LD-NEXT: [[TMP5:%.*]] = xor i32 [[TMP3]], [[TMP4]]
|
||||
; X64_2LD-NEXT: [[TMP6:%.*]] = getelementptr i8, i8* [[X]], i64 4
|
||||
; X64_2LD-NEXT: [[TMP7:%.*]] = getelementptr i8, i8* [[Y]], i64 4
|
||||
; X64_2LD-NEXT: [[TMP8:%.*]] = bitcast i8* [[TMP6]] to i16*
|
||||
; X64_2LD-NEXT: [[TMP9:%.*]] = bitcast i8* [[TMP7]] to i16*
|
||||
; X64_2LD-NEXT: [[TMP10:%.*]] = load i16, i16* [[TMP8]]
|
||||
; X64_2LD-NEXT: [[TMP11:%.*]] = load i16, i16* [[TMP9]]
|
||||
; X64_2LD-NEXT: [[TMP12:%.*]] = zext i16 [[TMP10]] to i32
|
||||
; X64_2LD-NEXT: [[TMP13:%.*]] = zext i16 [[TMP11]] to i32
|
||||
; X64_2LD-NEXT: [[TMP14:%.*]] = xor i32 [[TMP12]], [[TMP13]]
|
||||
; X64_2LD-NEXT: [[TMP15:%.*]] = or i32 [[TMP5]], [[TMP14]]
|
||||
; X64_2LD-NEXT: [[TMP16:%.*]] = icmp ne i32 [[TMP15]], 0
|
||||
; X64_2LD-NEXT: [[TMP17:%.*]] = zext i1 [[TMP16]] to i32
|
||||
; X64_2LD-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP17]], 0
|
||||
; X64_2LD-NEXT: [[CONV:%.*]] = zext i1 [[CMP]] to i32
|
||||
; X64_2LD-NEXT: ret i32 [[CONV]]
|
||||
;
|
||||
%call = tail call i32 @memcmp(i8* %x, i8* %y, i64 6)
|
||||
%cmp = icmp eq i32 %call, 0
|
||||
%conv = zext i1 %cmp to i32
|
||||
ret i32 %conv
|
||||
}
|
||||
|
||||
define i32 @cmp_eq7(i8* nocapture readonly %x, i8* nocapture readonly %y) {
|
||||
; X32-LABEL: @cmp_eq7(
|
||||
; X32-NEXT: [[TMP1:%.*]] = bitcast i8* [[X:%.*]] to i32*
|
||||
|
Loading…
Reference in New Issue
Block a user