diff options
author | Sanjay Patel <spatel@rotateright.com> | 2019-02-12 16:44:37 +0000 |
---|---|---|
committer | Sanjay Patel <spatel@rotateright.com> | 2019-02-12 16:44:37 +0000 |
commit | ab7e26a2ded40acf5528f3c1b06e18cb3d66919d (patch) | |
tree | e029e4b8e3949712344da25412db77e376088f95 | |
parent | 77ccc2eba4b2fd178f1d3ca86edffe737014bdf5 (diff) | |
download | bcm5719-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.ll | 70 |
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 +} |