[llvm] acdcd23 - Add tests to ExpandMemCmp/X86/memcmp.ll before submitting D76113
Juneyoung Lee via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 16 06:19:46 PDT 2020
Author: Juneyoung Lee
Date: 2020-03-16T22:19:37+09:00
New Revision: acdcd23b7b078f3d9e5dd03980047e1ec1314267
URL: https://github.com/llvm/llvm-project/commit/acdcd23b7b078f3d9e5dd03980047e1ec1314267
DIFF: https://github.com/llvm/llvm-project/commit/acdcd23b7b078f3d9e5dd03980047e1ec1314267.diff
LOG: Add tests to ExpandMemCmp/X86/memcmp.ll before submitting D76113
Added:
Modified:
llvm/test/Transforms/ExpandMemCmp/X86/memcmp.ll
Removed:
################################################################################
diff --git a/llvm/test/Transforms/ExpandMemCmp/X86/memcmp.ll b/llvm/test/Transforms/ExpandMemCmp/X86/memcmp.ll
index a95dc518573b..dd3bb3973754 100644
--- a/llvm/test/Transforms/ExpandMemCmp/X86/memcmp.ll
+++ b/llvm/test/Transforms/ExpandMemCmp/X86/memcmp.ll
@@ -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*
More information about the llvm-commits
mailing list