xref: /llvm-project/llvm/test/CodeGen/RISCV/pr84653_pr85190.ll (revision 6e7312bda60249c25e2ae9078d9f70bc2a65838c)
139f1b2deSBjorn Pettersson; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
239f1b2deSBjorn Pettersson; RUN: llc < %s -mtriple=riscv64 | FileCheck %s --check-prefixes=CHECK-NOZBB
339f1b2deSBjorn Pettersson; RUN: llc < %s -mtriple=riscv64 -mattr=+zbb | FileCheck %s --check-prefixes=CHECK-ZBB
439f1b2deSBjorn Pettersson
539f1b2deSBjorn Pettersson; This test case miscompiled for ZBB (DAGCombiner turned a SELECT into a more
639f1b2deSBjorn Pettersson; poisonous AND operation).
739f1b2deSBjorn Petterssondefine i1 @pr84653(i32 %x) {
839f1b2deSBjorn Pettersson; CHECK-NOZBB-LABEL: pr84653:
939f1b2deSBjorn Pettersson; CHECK-NOZBB:       # %bb.0:
1039f1b2deSBjorn Pettersson; CHECK-NOZBB-NEXT:    sext.w a1, a0
119122c523SPengcheng Wang; CHECK-NOZBB-NEXT:    lui a2, 524288
129122c523SPengcheng Wang; CHECK-NOZBB-NEXT:    sgtz a3, a1
139122c523SPengcheng Wang; CHECK-NOZBB-NEXT:    addi a2, a2, -1
149122c523SPengcheng Wang; CHECK-NOZBB-NEXT:    xor a0, a0, a2
1539f1b2deSBjorn Pettersson; CHECK-NOZBB-NEXT:    sext.w a0, a0
1639f1b2deSBjorn Pettersson; CHECK-NOZBB-NEXT:    slt a0, a0, a1
179122c523SPengcheng Wang; CHECK-NOZBB-NEXT:    and a0, a3, a0
1839f1b2deSBjorn Pettersson; CHECK-NOZBB-NEXT:    ret
1939f1b2deSBjorn Pettersson;
2039f1b2deSBjorn Pettersson; CHECK-ZBB-LABEL: pr84653:
2139f1b2deSBjorn Pettersson; CHECK-ZBB:       # %bb.0:
2239f1b2deSBjorn Pettersson; CHECK-ZBB-NEXT:    sext.w a1, a0
2339f1b2deSBjorn Pettersson; CHECK-ZBB-NEXT:    lui a2, 524288
24*6e7312bdSPiotr Fusik; CHECK-ZBB-NEXT:    xnor a0, a0, a2
2539f1b2deSBjorn Pettersson; CHECK-ZBB-NEXT:    sext.w a0, a0
2639f1b2deSBjorn Pettersson; CHECK-ZBB-NEXT:    max a0, a0, zero
2739f1b2deSBjorn Pettersson; CHECK-ZBB-NEXT:    slt a0, a0, a1
2839f1b2deSBjorn Pettersson; CHECK-ZBB-NEXT:    ret
2939f1b2deSBjorn Pettersson  %cmp1 = icmp sgt i32 %x, 0
3039f1b2deSBjorn Pettersson  %sub = sub nsw i32 2147483647, %x  ; 0x7fffffff
3139f1b2deSBjorn Pettersson  %cmp2 = icmp sgt i32 %x, %sub
3239f1b2deSBjorn Pettersson  %r = select i1 %cmp1, i1 %cmp2, i1 false
3339f1b2deSBjorn Pettersson  ret i1 %r
3439f1b2deSBjorn Pettersson}
3539f1b2deSBjorn Pettersson
3639f1b2deSBjorn Pettersson; This test case miscompiled for ZBB (DAGCombiner turned a SELECT into a more
3739f1b2deSBjorn Pettersson; poisonous AND operation).
3839f1b2deSBjorn Petterssondefine i1 @pr85190(i64 %a) {
3939f1b2deSBjorn Pettersson; CHECK-NOZBB-LABEL: pr85190:
4039f1b2deSBjorn Pettersson; CHECK-NOZBB:       # %bb.0:
4139f1b2deSBjorn Pettersson; CHECK-NOZBB-NEXT:    ori a1, a0, 7
4239f1b2deSBjorn Pettersson; CHECK-NOZBB-NEXT:    slti a2, a0, 0
4339f1b2deSBjorn Pettersson; CHECK-NOZBB-NEXT:    li a3, -1
4439f1b2deSBjorn Pettersson; CHECK-NOZBB-NEXT:    slli a3, a3, 63
4539f1b2deSBjorn Pettersson; CHECK-NOZBB-NEXT:    sub a3, a3, a1
4639f1b2deSBjorn Pettersson; CHECK-NOZBB-NEXT:    slt a0, a0, a3
4739f1b2deSBjorn Pettersson; CHECK-NOZBB-NEXT:    and a0, a2, a0
4839f1b2deSBjorn Pettersson; CHECK-NOZBB-NEXT:    ret
4939f1b2deSBjorn Pettersson;
5039f1b2deSBjorn Pettersson; CHECK-ZBB-LABEL: pr85190:
5139f1b2deSBjorn Pettersson; CHECK-ZBB:       # %bb.0:
5239f1b2deSBjorn Pettersson; CHECK-ZBB-NEXT:    ori a1, a0, 7
5339f1b2deSBjorn Pettersson; CHECK-ZBB-NEXT:    li a2, -1
5439f1b2deSBjorn Pettersson; CHECK-ZBB-NEXT:    slli a2, a2, 63
5539f1b2deSBjorn Pettersson; CHECK-ZBB-NEXT:    sub a2, a2, a1
562b78303eSBjörn Pettersson; CHECK-ZBB-NEXT:    min a1, a2, zero
572b78303eSBjörn Pettersson; CHECK-ZBB-NEXT:    slt a0, a0, a1
5839f1b2deSBjorn Pettersson; CHECK-ZBB-NEXT:    ret
5939f1b2deSBjorn Pettersson  %or = or i64 %a, 7
6039f1b2deSBjorn Pettersson  %cmp1 = icmp slt i64 %a, 0
6139f1b2deSBjorn Pettersson  %sub = sub nsw i64 -9223372036854775808, %or  ; 0x8000000000000000
6239f1b2deSBjorn Pettersson  %cmp2 = icmp sgt i64 %sub, %a
6339f1b2deSBjorn Pettersson  %res = select i1 %cmp1, i1 %cmp2, i1 false
6439f1b2deSBjorn Pettersson  ret i1 %res
6539f1b2deSBjorn Pettersson}
6639f1b2deSBjorn Pettersson
6739f1b2deSBjorn Petterssondefine i1 @select_to_or(i32 %x) {
6839f1b2deSBjorn Pettersson; CHECK-NOZBB-LABEL: select_to_or:
6939f1b2deSBjorn Pettersson; CHECK-NOZBB:       # %bb.0:
7039f1b2deSBjorn Pettersson; CHECK-NOZBB-NEXT:    sext.w a1, a0
719122c523SPengcheng Wang; CHECK-NOZBB-NEXT:    lui a2, 524288
729122c523SPengcheng Wang; CHECK-NOZBB-NEXT:    sgtz a3, a1
739122c523SPengcheng Wang; CHECK-NOZBB-NEXT:    addi a2, a2, -1
749122c523SPengcheng Wang; CHECK-NOZBB-NEXT:    xor a0, a0, a2
7539f1b2deSBjorn Pettersson; CHECK-NOZBB-NEXT:    sext.w a0, a0
7639f1b2deSBjorn Pettersson; CHECK-NOZBB-NEXT:    slt a0, a0, a1
779122c523SPengcheng Wang; CHECK-NOZBB-NEXT:    or a0, a3, a0
7839f1b2deSBjorn Pettersson; CHECK-NOZBB-NEXT:    ret
7939f1b2deSBjorn Pettersson;
8039f1b2deSBjorn Pettersson; CHECK-ZBB-LABEL: select_to_or:
8139f1b2deSBjorn Pettersson; CHECK-ZBB:       # %bb.0:
8239f1b2deSBjorn Pettersson; CHECK-ZBB-NEXT:    sext.w a1, a0
8339f1b2deSBjorn Pettersson; CHECK-ZBB-NEXT:    lui a2, 524288
84*6e7312bdSPiotr Fusik; CHECK-ZBB-NEXT:    xnor a0, a0, a2
8539f1b2deSBjorn Pettersson; CHECK-ZBB-NEXT:    sext.w a0, a0
8639f1b2deSBjorn Pettersson; CHECK-ZBB-NEXT:    min a0, a0, zero
8739f1b2deSBjorn Pettersson; CHECK-ZBB-NEXT:    slt a0, a0, a1
8839f1b2deSBjorn Pettersson; CHECK-ZBB-NEXT:    ret
8939f1b2deSBjorn Pettersson  %cmp1 = icmp sgt i32 %x, 0
9039f1b2deSBjorn Pettersson  %sub = sub nsw i32 2147483647, %x  ; 0x7fffffff
9139f1b2deSBjorn Pettersson  %cmp2 = icmp sgt i32 %x, %sub
9239f1b2deSBjorn Pettersson  %r = select i1 %cmp1, i1 true, i1 %cmp2
9339f1b2deSBjorn Pettersson  ret i1 %r
9439f1b2deSBjorn Pettersson}
95