}
; 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
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: