summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSanjay Patel <spatel@rotateright.com>2019-02-12 16:44:37 +0000
committerSanjay Patel <spatel@rotateright.com>2019-02-12 16:44:37 +0000
commitab7e26a2ded40acf5528f3c1b06e18cb3d66919d (patch)
treee029e4b8e3949712344da25412db77e376088f95
parent77ccc2eba4b2fd178f1d3ca86edffe737014bdf5 (diff)
downloadbcm5719-llvm-ab7e26a2ded40acf5528f3c1b06e18cb3d66919d.tar.gz
bcm5719-llvm-ab7e26a2ded40acf5528f3c1b06e18cb3d66919d.zip
[x86] add negative tests for setcc folds; NFC
llvm-svn: 353855
-rw-r--r--llvm/test/CodeGen/X86/setcc-logic.ll70
1 files changed, 70 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/setcc-logic.ll b/llvm/test/CodeGen/X86/setcc-logic.ll
index 290a8c38a29..f95ce9bfae2 100644
--- a/llvm/test/CodeGen/X86/setcc-logic.ll
+++ b/llvm/test/CodeGen/X86/setcc-logic.ll
@@ -512,3 +512,73 @@ define i1 @and_icmps_const_1bit_diff(i32 %x) {
ret i1 %r
}
+; Negative test - extra use prevents optimization
+
+define i1 @or_icmps_const_1bit_diff_extra_use(i8 %x, i8* %p) {
+; CHECK-LABEL: or_icmps_const_1bit_diff_extra_use:
+; CHECK: # %bb.0:
+; CHECK-NEXT: cmpb $45, %dil
+; CHECK-NEXT: sete %cl
+; CHECK-NEXT: cmpb $43, %dil
+; CHECK-NEXT: sete %al
+; CHECK-NEXT: sete (%rsi)
+; CHECK-NEXT: orb %cl, %al
+; CHECK-NEXT: retq
+ %a = icmp eq i8 %x, 43
+ %b = icmp eq i8 %x, 45
+ %r = or i1 %a, %b
+ %z = zext i1 %a to i8
+ store i8 %z, i8* %p
+ ret i1 %r
+}
+
+; Negative test - constant diff is >1 bit
+
+define i1 @and_icmps_const_not1bit_diff(i32 %x) {
+; CHECK-LABEL: and_icmps_const_not1bit_diff:
+; CHECK: # %bb.0:
+; CHECK-NEXT: cmpl $44, %edi
+; CHECK-NEXT: setne %cl
+; CHECK-NEXT: cmpl $92, %edi
+; CHECK-NEXT: setne %al
+; CHECK-NEXT: andb %cl, %al
+; CHECK-NEXT: retq
+ %a = icmp ne i32 %x, 44
+ %b = icmp ne i32 %x, 92
+ %r = and i1 %a, %b
+ ret i1 %r
+}
+
+; Negative test - wrong comparison
+
+define i1 @and_icmps_const_1bit_diff_wrong_pred(i32 %x) {
+; CHECK-LABEL: and_icmps_const_1bit_diff_wrong_pred:
+; CHECK: # %bb.0:
+; CHECK-NEXT: cmpl $43, %edi
+; CHECK-NEXT: sete %cl
+; CHECK-NEXT: cmpl $45, %edi
+; CHECK-NEXT: setl %al
+; CHECK-NEXT: orb %cl, %al
+; CHECK-NEXT: retq
+ %a = icmp eq i32 %x, 43
+ %b = icmp slt i32 %x, 45
+ %r = or i1 %a, %b
+ ret i1 %r
+}
+
+; Negative test - no common operand
+
+define i1 @and_icmps_const_1bit_diff_common_op(i32 %x, i32 %y) {
+; CHECK-LABEL: and_icmps_const_1bit_diff_common_op:
+; CHECK: # %bb.0:
+; CHECK-NEXT: cmpl $43, %edi
+; CHECK-NEXT: sete %cl
+; CHECK-NEXT: cmpl $45, %esi
+; CHECK-NEXT: sete %al
+; CHECK-NEXT: orb %cl, %al
+; CHECK-NEXT: retq
+ %a = icmp eq i32 %x, 43
+ %b = icmp eq i32 %y, 45
+ %r = or i1 %a, %b
+ ret i1 %r
+}
OpenPOWER on IntegriCloud