[llvm] r324099 - Add llc tests for comparison chains.

Clement Courbet via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 2 07:54:17 PST 2018


Author: courbet
Date: Fri Feb  2 07:54:17 2018
New Revision: 324099

URL: http://llvm.org/viewvc/llvm-project?rev=324099&view=rev
Log:
Add llc tests for comparison chains.

See https://reviews.llvm.org/D42793#996098 for context.

Added:
    llvm/trunk/test/CodeGen/PowerPC/memcmp-mergeexpand.ll
    llvm/trunk/test/CodeGen/X86/memcmp-mergeexpand.ll

Added: llvm/trunk/test/CodeGen/PowerPC/memcmp-mergeexpand.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/memcmp-mergeexpand.ll?rev=324099&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/PowerPC/memcmp-mergeexpand.ll (added)
+++ llvm/trunk/test/CodeGen/PowerPC/memcmp-mergeexpand.ll Fri Feb  2 07:54:17 2018
@@ -0,0 +1,50 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -verify-machineinstrs -mcpu=pwr8 -mtriple=powerpc64le-unknown-gnu-linux  < %s | FileCheck %s -check-prefix=PPC64LE
+
+; This tests interaction between MergeICmp and ExpandMemCmp.
+
+%"struct.std::pair" = type { i32, i32 }
+
+define zeroext i1 @opeq1(
+; PPC64LE-LABEL: opeq1:
+; PPC64LE:       # %bb.0: # %entry
+; PPC64LE-NEXT:    lwz 5, 0(3)
+; PPC64LE-NEXT:    lwz 6, 0(4)
+; PPC64LE-NEXT:    cmplw 5, 6
+; PPC64LE-NEXT:    bne 0, .LBB0_2
+; PPC64LE-NEXT:  # %bb.1: # %land.rhs.i
+; PPC64LE-NEXT:    lwz 3, 4(3)
+; PPC64LE-NEXT:    lwz 4, 4(4)
+; PPC64LE-NEXT:    cmpw 3, 4
+; PPC64LE-NEXT:    b .LBB0_3
+; PPC64LE-NEXT:  .LBB0_2:
+; PPC64LE-NEXT:    crxor 2, 2, 2
+; PPC64LE-NEXT:  .LBB0_3: # %opeq1.exit
+; PPC64LE-NEXT:    li 3, 0
+; PPC64LE-NEXT:    li 4, 1
+; PPC64LE-NEXT:    isel 3, 4, 3, 2
+; PPC64LE-NEXT:    blr
+  %"struct.std::pair"* nocapture readonly dereferenceable(8) %a,
+  %"struct.std::pair"* nocapture readonly dereferenceable(8) %b) local_unnamed_addr #0 {
+entry:
+  %first.i = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %a, i64 0, i32 0
+  %0 = load i32, i32* %first.i, align 4
+  %first1.i = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %b, i64 0, i32 0
+  %1 = load i32, i32* %first1.i, align 4
+  %cmp.i = icmp eq i32 %0, %1
+  br i1 %cmp.i, label %land.rhs.i, label %opeq1.exit
+
+land.rhs.i:
+  %second.i = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %a, i64 0, i32 1
+  %2 = load i32, i32* %second.i, align 4
+  %second2.i = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %b, i64 0, i32 1
+  %3 = load i32, i32* %second2.i, align 4
+  %cmp3.i = icmp eq i32 %2, %3
+  br label %opeq1.exit
+
+opeq1.exit:
+  %4 = phi i1 [ false, %entry ], [ %cmp3.i, %land.rhs.i ]
+  ret i1 %4
+}
+
+

Added: llvm/trunk/test/CodeGen/X86/memcmp-mergeexpand.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/memcmp-mergeexpand.ll?rev=324099&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/memcmp-mergeexpand.ll (added)
+++ llvm/trunk/test/CodeGen/X86/memcmp-mergeexpand.ll Fri Feb  2 07:54:17 2018
@@ -0,0 +1,66 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc < %s -mtriple=i686-unknown-unknown               | FileCheck %s --check-prefix=X86
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown             | FileCheck %s --check-prefix=X64
+
+; This tests interaction between MergeICmp and ExpandMemCmp.
+
+%"struct.std::pair" = type { i32, i32 }
+
+define zeroext i1 @opeq1(
+; X86-LABEL: opeq1:
+; X86:       # %bb.0: # %entry
+; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT:    movl (%ecx), %edx
+; X86-NEXT:    cmpl (%eax), %edx
+; X86-NEXT:    jne .LBB0_1
+; X86-NEXT:  # %bb.2: # %land.rhs.i
+; X86-NEXT:    movl 4(%ecx), %ecx
+; X86-NEXT:    cmpl 4(%eax), %ecx
+; X86-NEXT:    sete %al
+; X86-NEXT:    # kill: def $al killed $al killed $eax
+; X86-NEXT:    retl
+; X86-NEXT:  .LBB0_1:
+; X86-NEXT:    xorl %eax, %eax
+; X86-NEXT:    # kill: def $al killed $al killed $eax
+; X86-NEXT:    retl
+;
+; X64-LABEL: opeq1:
+; X64:       # %bb.0: # %entry
+; X64-NEXT:    movl (%rdi), %eax
+; X64-NEXT:    cmpl (%rsi), %eax
+; X64-NEXT:    jne .LBB0_1
+; X64-NEXT:  # %bb.2: # %land.rhs.i
+; X64-NEXT:    movl 4(%rdi), %eax
+; X64-NEXT:    cmpl 4(%rsi), %eax
+; X64-NEXT:    sete %al
+; X64-NEXT:    # kill: def $al killed $al killed $eax
+; X64-NEXT:    retq
+; X64-NEXT:  .LBB0_1:
+; X64-NEXT:    xorl %eax, %eax
+; X64-NEXT:    # kill: def $al killed $al killed $eax
+; X64-NEXT:    retq
+  %"struct.std::pair"* nocapture readonly dereferenceable(8) %a,
+  %"struct.std::pair"* nocapture readonly dereferenceable(8) %b) local_unnamed_addr #0 {
+entry:
+  %first.i = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %a, i64 0, i32 0
+  %0 = load i32, i32* %first.i, align 4
+  %first1.i = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %b, i64 0, i32 0
+  %1 = load i32, i32* %first1.i, align 4
+  %cmp.i = icmp eq i32 %0, %1
+  br i1 %cmp.i, label %land.rhs.i, label %opeq1.exit
+
+land.rhs.i:
+  %second.i = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %a, i64 0, i32 1
+  %2 = load i32, i32* %second.i, align 4
+  %second2.i = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %b, i64 0, i32 1
+  %3 = load i32, i32* %second2.i, align 4
+  %cmp3.i = icmp eq i32 %2, %3
+  br label %opeq1.exit
+
+opeq1.exit:
+  %4 = phi i1 [ false, %entry ], [ %cmp3.i, %land.rhs.i ]
+  ret i1 %4
+}
+
+




More information about the llvm-commits mailing list