]> granicus.if.org Git - llvm/commitdiff
[PowerPC] add memcmp test with one constant operand and equality cmp; NFC
authorSanjay Patel <spatel@rotateright.com>
Fri, 9 Jun 2017 23:15:14 +0000 (23:15 +0000)
committerSanjay Patel <spatel@rotateright.com>
Fri, 9 Jun 2017 23:15:14 +0000 (23:15 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@305131 91177308-0d34-0410-b5e6-96231b3b80d8

test/CodeGen/PowerPC/memCmpUsedInZeroEqualityComparison.ll

index 9e5a31d00b68850e55f06eced9c0ee2a0bbb59b7..ad9078c8206634d23319532465e017b28340990a 100644 (file)
@@ -166,9 +166,8 @@ define signext i32 @zeroEqualityTest05() {
 }
 
 ; Validate with memcmp()?:
-; Function Attrs: nounwind readonly
-define signext i32 @zeroEqualityTest06() {
-; CHECK-LABEL: zeroEqualityTest06:
+define signext i32 @equalityFoldTwoConstants() {
+; CHECK-LABEL: equalityFoldTwoConstants:
 ; CHECK:       # BB#0: # %loadbb
 ; CHECK-NEXT:    addis 3, 2, .LzeroEqualityTest04.buffer1@toc@ha
 ; CHECK-NEXT:    addis 4, 2, .LzeroEqualityTest04.buffer2@toc@ha
@@ -196,6 +195,33 @@ define signext i32 @zeroEqualityTest06() {
   ret i32 %cond
 }
 
+define signext i32 @equalityFoldOneConstant(i8* %X) {
+; CHECK-LABEL: equalityFoldOneConstant:
+; CHECK:       # BB#0: # %loadbb
+; CHECK-NEXT:    addis 4, 2, .LzeroEqualityTest04.buffer1@toc@ha
+; CHECK-NEXT:    ld 5, 0(3)
+; CHECK-NEXT:    ld 4, .LzeroEqualityTest04.buffer1@toc@l(4)
+; CHECK-NEXT:    cmpld 4, 5
+; CHECK-NEXT:    bne 0, .LBB6_2
+; CHECK-NEXT:  # BB#1: # %loadbb1
+; CHECK-NEXT:    addis 4, 2, .LzeroEqualityTest04.buffer1@toc@ha+8
+; CHECK-NEXT:    ld 3, 8(3)
+; CHECK-NEXT:    ld 4, .LzeroEqualityTest04.buffer1@toc@l+8(4)
+; CHECK-NEXT:    cmpld 4, 3
+; CHECK-NEXT:    li 3, 0
+; CHECK-NEXT:    beq 0, .LBB6_3
+; CHECK-NEXT:  .LBB6_2: # %res_block
+; CHECK-NEXT:    li 3, 1
+; CHECK-NEXT:  .LBB6_3: # %endblock
+; CHECK-NEXT:    cntlzw 3, 3
+; CHECK-NEXT:    srwi 3, 3, 5
+; CHECK-NEXT:    blr
+  %call = tail call signext i32 @memcmp(i8* bitcast ([15 x i32]* @zeroEqualityTest04.buffer1 to i8*), i8* %X, i64 16)
+  %not.tobool = icmp eq i32 %call, 0
+  %cond = zext i1 %not.tobool to i32
+  ret i32 %cond
+}
+
 define i1 @length2_eq_nobuiltin_attr(i8* %X, i8* %Y) {
 ; CHECK-LABEL: length2_eq_nobuiltin_attr:
 ; CHECK:       # BB#0: