[llvm] 2b6215f - [NFC] Add tests for boolean comparisons
Roger Ferrer Ibanez via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 15 00:39:55 PDT 2020
Author: Roger Ferrer Ibanez
Date: 2020-07-15T07:33:43Z
New Revision: 2b6215f188bf862d5a551499764121d91fd6e6ea
URL: https://github.com/llvm/llvm-project/commit/2b6215f188bf862d5a551499764121d91fd6e6ea
DIFF: https://github.com/llvm/llvm-project/commit/2b6215f188bf862d5a551499764121d91fd6e6ea.diff
LOG: [NFC] Add tests for boolean comparisons
They currently show that the not equal case may be improved.
See PR42876
Differential Revision: https://reviews.llvm.org/D65801
Added:
llvm/test/CodeGen/AArch64/cmp-bool.ll
llvm/test/CodeGen/ARM/cmp-bool.ll
llvm/test/CodeGen/RISCV/cmp-bool.ll
llvm/test/CodeGen/X86/cmp-bool.ll
Modified:
Removed:
################################################################################
diff --git a/llvm/test/CodeGen/AArch64/cmp-bool.ll b/llvm/test/CodeGen/AArch64/cmp-bool.ll
new file mode 100644
index 000000000000..41c3ddc4528a
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/cmp-bool.ll
@@ -0,0 +1,45 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -mtriple=aarch64 < %s | FileCheck %s
+
+define void @bool_eq(i1 zeroext %a, i1 zeroext %b, void ()* nocapture %c) nounwind {
+; CHECK-LABEL: bool_eq:
+; CHECK: // %bb.0: // %entry
+; CHECK-NEXT: cmp w0, w1
+; CHECK-NEXT: b.eq .LBB0_2
+; CHECK-NEXT: // %bb.1: // %if.end
+; CHECK-NEXT: ret
+; CHECK-NEXT: .LBB0_2: // %if.then
+; CHECK-NEXT: br x2
+entry:
+ %0 = xor i1 %a, %b
+ br i1 %0, label %if.end, label %if.then
+
+if.then:
+ tail call void %c() #1
+ br label %if.end
+
+if.end:
+ ret void
+}
+
+define void @bool_ne(i1 zeroext %a, i1 zeroext %b, void ()* nocapture %c) nounwind {
+; CHECK-LABEL: bool_ne:
+; CHECK: // %bb.0: // %entry
+; CHECK-NEXT: eor w8, w0, w1
+; CHECK-NEXT: cmp w8, #1 // =1
+; CHECK-NEXT: b.ne .LBB1_2
+; CHECK-NEXT: // %bb.1: // %if.then
+; CHECK-NEXT: br x2
+; CHECK-NEXT: .LBB1_2: // %if.end
+; CHECK-NEXT: ret
+entry:
+ %cmp = xor i1 %a, %b
+ br i1 %cmp, label %if.then, label %if.end
+
+if.then:
+ tail call void %c() #1
+ br label %if.end
+
+if.end:
+ ret void
+}
diff --git a/llvm/test/CodeGen/ARM/cmp-bool.ll b/llvm/test/CodeGen/ARM/cmp-bool.ll
new file mode 100644
index 000000000000..a3ad9f7b8cab
--- /dev/null
+++ b/llvm/test/CodeGen/ARM/cmp-bool.ll
@@ -0,0 +1,77 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -mtriple=armv7a < %s | FileCheck %s --check-prefix=ARM
+; RUN: llc -mtriple=armv6m < %s | FileCheck %s --check-prefix=THUMB
+; RUN: llc -mtriple=armv7m < %s | FileCheck %s --check-prefix=THUMB2
+
+define void @bool_eq(i1 zeroext %a, i1 zeroext %b, void ()* nocapture %c) nounwind {
+; ARM-LABEL: bool_eq:
+; ARM: @ %bb.0: @ %entry
+; ARM-NEXT: cmp r0, r1
+; ARM-NEXT: bxne lr
+; ARM-NEXT: bx r2
+;
+; THUMB-LABEL: bool_eq:
+; THUMB: @ %bb.0: @ %entry
+; THUMB-NEXT: push {r7, lr}
+; THUMB-NEXT: cmp r0, r1
+; THUMB-NEXT: bne .LBB0_2
+; THUMB-NEXT: @ %bb.1: @ %if.then
+; THUMB-NEXT: blx r2
+; THUMB-NEXT: .LBB0_2: @ %if.end
+; THUMB-NEXT: pop {r7, pc}
+;
+; THUMB2-LABEL: bool_eq:
+; THUMB2: @ %bb.0: @ %entry
+; THUMB2-NEXT: cmp r0, r1
+; THUMB2-NEXT: it ne
+; THUMB2-NEXT: bxne lr
+; THUMB2-NEXT: bx r2
+entry:
+ %0 = xor i1 %a, %b
+ br i1 %0, label %if.end, label %if.then
+
+if.then:
+ tail call void %c() #1
+ br label %if.end
+
+if.end:
+ ret void
+}
+
+define void @bool_ne(i1 zeroext %a, i1 zeroext %b, void ()* nocapture %c) nounwind {
+; ARM-LABEL: bool_ne:
+; ARM: @ %bb.0: @ %entry
+; ARM-NEXT: eor r0, r0, r1
+; ARM-NEXT: cmp r0, #1
+; ARM-NEXT: bxne lr
+; ARM-NEXT: bx r2
+;
+; THUMB-LABEL: bool_ne:
+; THUMB: @ %bb.0: @ %entry
+; THUMB-NEXT: push {r7, lr}
+; THUMB-NEXT: eors r0, r1
+; THUMB-NEXT: cmp r0, #1
+; THUMB-NEXT: bne .LBB1_2
+; THUMB-NEXT: @ %bb.1: @ %if.then
+; THUMB-NEXT: blx r2
+; THUMB-NEXT: .LBB1_2: @ %if.end
+; THUMB-NEXT: pop {r7, pc}
+;
+; THUMB2-LABEL: bool_ne:
+; THUMB2: @ %bb.0: @ %entry
+; THUMB2-NEXT: eors r0, r1
+; THUMB2-NEXT: cmp r0, #1
+; THUMB2-NEXT: it ne
+; THUMB2-NEXT: bxne lr
+; THUMB2-NEXT: bx r2
+entry:
+ %cmp = xor i1 %a, %b
+ br i1 %cmp, label %if.then, label %if.end
+
+if.then:
+ tail call void %c() #1
+ br label %if.end
+
+if.end:
+ ret void
+}
diff --git a/llvm/test/CodeGen/RISCV/cmp-bool.ll b/llvm/test/CodeGen/RISCV/cmp-bool.ll
new file mode 100644
index 000000000000..785fcb1eaa89
--- /dev/null
+++ b/llvm/test/CodeGen/RISCV/cmp-bool.ll
@@ -0,0 +1,63 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -mtriple=riscv32 < %s | FileCheck --check-prefix=RV32 %s
+; RUN: llc -mtriple=riscv64 < %s | FileCheck --check-prefix=RV64 %s
+
+define void @bool_eq(i1 zeroext %a, i1 zeroext %b, void ()* nocapture %c) nounwind {
+; RV32-LABEL: bool_eq:
+; RV32: # %bb.0: # %entry
+; RV32-NEXT: beq a0, a1, .LBB0_2
+; RV32-NEXT: # %bb.1: # %if.end
+; RV32-NEXT: ret
+; RV32-NEXT: .LBB0_2: # %if.then
+; RV32-NEXT: jr a2
+;
+; RV64-LABEL: bool_eq:
+; RV64: # %bb.0: # %entry
+; RV64-NEXT: beq a0, a1, .LBB0_2
+; RV64-NEXT: # %bb.1: # %if.end
+; RV64-NEXT: ret
+; RV64-NEXT: .LBB0_2: # %if.then
+; RV64-NEXT: jr a2
+entry:
+ %0 = xor i1 %a, %b
+ br i1 %0, label %if.end, label %if.then
+
+if.then:
+ tail call void %c() #1
+ br label %if.end
+
+if.end:
+ ret void
+}
+
+define void @bool_ne(i1 zeroext %a, i1 zeroext %b, void ()* nocapture %c) nounwind {
+; RV32-LABEL: bool_ne:
+; RV32: # %bb.0: # %entry
+; RV32-NEXT: xor a0, a0, a1
+; RV32-NEXT: addi a1, zero, 1
+; RV32-NEXT: bne a0, a1, .LBB1_2
+; RV32-NEXT: # %bb.1: # %if.then
+; RV32-NEXT: jr a2
+; RV32-NEXT: .LBB1_2: # %if.end
+; RV32-NEXT: ret
+;
+; RV64-LABEL: bool_ne:
+; RV64: # %bb.0: # %entry
+; RV64-NEXT: xor a0, a0, a1
+; RV64-NEXT: addi a1, zero, 1
+; RV64-NEXT: bne a0, a1, .LBB1_2
+; RV64-NEXT: # %bb.1: # %if.then
+; RV64-NEXT: jr a2
+; RV64-NEXT: .LBB1_2: # %if.end
+; RV64-NEXT: ret
+entry:
+ %cmp = xor i1 %a, %b
+ br i1 %cmp, label %if.then, label %if.end
+
+if.then:
+ tail call void %c() #1
+ br label %if.end
+
+if.end:
+ ret void
+}
diff --git a/llvm/test/CodeGen/X86/cmp-bool.ll b/llvm/test/CodeGen/X86/cmp-bool.ll
new file mode 100644
index 000000000000..400844bbb79f
--- /dev/null
+++ b/llvm/test/CodeGen/X86/cmp-bool.ll
@@ -0,0 +1,45 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -mtriple=x86_64 < %s | FileCheck %s
+
+define void @bool_eq(i1 zeroext %a, i1 zeroext %b, void ()* nocapture %c) nounwind {
+; CHECK-LABEL: bool_eq:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: xorl %esi, %edi
+; CHECK-NEXT: je .LBB0_2
+; CHECK-NEXT: # %bb.1: # %if.end
+; CHECK-NEXT: retq
+; CHECK-NEXT: .LBB0_2: # %if.then
+; CHECK-NEXT: jmpq *%rdx # TAILCALL
+entry:
+ %0 = xor i1 %a, %b
+ br i1 %0, label %if.end, label %if.then
+
+if.then:
+ tail call void %c() #1
+ br label %if.end
+
+if.end:
+ ret void
+}
+
+define void @bool_ne(i1 zeroext %a, i1 zeroext %b, void ()* nocapture %c) nounwind {
+; CHECK-LABEL: bool_ne:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: xorl %esi, %edi
+; CHECK-NEXT: cmpb $1, %dil
+; CHECK-NEXT: jne .LBB1_1
+; CHECK-NEXT: # %bb.2: # %if.then
+; CHECK-NEXT: jmpq *%rdx # TAILCALL
+; CHECK-NEXT: .LBB1_1: # %if.end
+; CHECK-NEXT: retq
+entry:
+ %cmp = xor i1 %a, %b
+ br i1 %cmp, label %if.then, label %if.end
+
+if.then:
+ tail call void %c() #1
+ br label %if.end
+
+if.end:
+ ret void
+}
More information about the llvm-commits
mailing list