1e3e9c940SNoah Goldstein; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2e3e9c940SNoah Goldstein; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \ 3e3e9c940SNoah Goldstein; RUN: | FileCheck %s -check-prefix=RV32I 4e3e9c940SNoah Goldstein; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \ 5e3e9c940SNoah Goldstein; RUN: | FileCheck %s -check-prefix=RV64I 6e3e9c940SNoah Goldstein 7e3e9c940SNoah Goldstein 8e3e9c940SNoah Goldsteindefine i32 @from_cmpeq(i32 %xx, i32 %y) { 9e3e9c940SNoah Goldstein; RV32I-LABEL: from_cmpeq: 10e3e9c940SNoah Goldstein; RV32I: # %bb.0: 11e3e9c940SNoah Goldstein; RV32I-NEXT: addi a0, a0, -9 12e3e9c940SNoah Goldstein; RV32I-NEXT: seqz a0, a0 13de7881ebSNoah Goldstein; RV32I-NEXT: and a0, a0, a1 14e3e9c940SNoah Goldstein; RV32I-NEXT: ret 15e3e9c940SNoah Goldstein; 16e3e9c940SNoah Goldstein; RV64I-LABEL: from_cmpeq: 17e3e9c940SNoah Goldstein; RV64I: # %bb.0: 18e3e9c940SNoah Goldstein; RV64I-NEXT: sext.w a0, a0 19e3e9c940SNoah Goldstein; RV64I-NEXT: addi a0, a0, -9 20e3e9c940SNoah Goldstein; RV64I-NEXT: seqz a0, a0 21de7881ebSNoah Goldstein; RV64I-NEXT: and a0, a0, a1 22e3e9c940SNoah Goldstein; RV64I-NEXT: ret 23e3e9c940SNoah Goldstein %x = icmp eq i32 %xx, 9 24e3e9c940SNoah Goldstein %masked = and i32 %y, 1 25e3e9c940SNoah Goldstein 26e3e9c940SNoah Goldstein %r = select i1 %x, i32 %masked, i32 0 27e3e9c940SNoah Goldstein ret i32 %r 28e3e9c940SNoah Goldstein} 29e3e9c940SNoah Goldstein 30e3e9c940SNoah Goldsteindefine i32 @from_cmpeq_fail_bad_andmask(i32 %xx, i32 %y) { 31e3e9c940SNoah Goldstein; RV32I-LABEL: from_cmpeq_fail_bad_andmask: 32e3e9c940SNoah Goldstein; RV32I: # %bb.0: 33e3e9c940SNoah Goldstein; RV32I-NEXT: addi a0, a0, -9 34e3e9c940SNoah Goldstein; RV32I-NEXT: snez a0, a0 35e3e9c940SNoah Goldstein; RV32I-NEXT: addi a0, a0, -1 36e3e9c940SNoah Goldstein; RV32I-NEXT: and a0, a1, a0 37e3e9c940SNoah Goldstein; RV32I-NEXT: andi a0, a0, 3 38e3e9c940SNoah Goldstein; RV32I-NEXT: ret 39e3e9c940SNoah Goldstein; 40e3e9c940SNoah Goldstein; RV64I-LABEL: from_cmpeq_fail_bad_andmask: 41e3e9c940SNoah Goldstein; RV64I: # %bb.0: 42e3e9c940SNoah Goldstein; RV64I-NEXT: sext.w a0, a0 43e3e9c940SNoah Goldstein; RV64I-NEXT: addi a0, a0, -9 44e3e9c940SNoah Goldstein; RV64I-NEXT: snez a0, a0 45*86240751SPhilip Reames; RV64I-NEXT: addi a0, a0, -1 46e3e9c940SNoah Goldstein; RV64I-NEXT: and a0, a1, a0 47e3e9c940SNoah Goldstein; RV64I-NEXT: andi a0, a0, 3 48e3e9c940SNoah Goldstein; RV64I-NEXT: ret 49e3e9c940SNoah Goldstein %x = icmp eq i32 %xx, 9 50e3e9c940SNoah Goldstein %masked = and i32 %y, 3 51e3e9c940SNoah Goldstein %r = select i1 %x, i32 %masked, i32 0 52e3e9c940SNoah Goldstein ret i32 %r 53e3e9c940SNoah Goldstein} 54e3e9c940SNoah Goldstein 55e3e9c940SNoah Goldsteindefine i32 @from_i1(i1 %x, i32 %y) { 56e3e9c940SNoah Goldstein; RV32I-LABEL: from_i1: 57e3e9c940SNoah Goldstein; RV32I: # %bb.0: 58de7881ebSNoah Goldstein; RV32I-NEXT: and a0, a0, a1 59e3e9c940SNoah Goldstein; RV32I-NEXT: andi a0, a0, 1 60e3e9c940SNoah Goldstein; RV32I-NEXT: ret 61e3e9c940SNoah Goldstein; 62e3e9c940SNoah Goldstein; RV64I-LABEL: from_i1: 63e3e9c940SNoah Goldstein; RV64I: # %bb.0: 64de7881ebSNoah Goldstein; RV64I-NEXT: and a0, a0, a1 65e3e9c940SNoah Goldstein; RV64I-NEXT: andi a0, a0, 1 66e3e9c940SNoah Goldstein; RV64I-NEXT: ret 67e3e9c940SNoah Goldstein %masked = and i32 %y, 1 68e3e9c940SNoah Goldstein %r = select i1 %x, i32 %masked, i32 0 69e3e9c940SNoah Goldstein ret i32 %r 70e3e9c940SNoah Goldstein} 71e3e9c940SNoah Goldstein 72e3e9c940SNoah Goldsteindefine i32 @from_trunc_i8(i8 %xx, i32 %y) { 73e3e9c940SNoah Goldstein; RV32I-LABEL: from_trunc_i8: 74e3e9c940SNoah Goldstein; RV32I: # %bb.0: 75de7881ebSNoah Goldstein; RV32I-NEXT: and a0, a0, a1 76e3e9c940SNoah Goldstein; RV32I-NEXT: andi a0, a0, 1 77e3e9c940SNoah Goldstein; RV32I-NEXT: ret 78e3e9c940SNoah Goldstein; 79e3e9c940SNoah Goldstein; RV64I-LABEL: from_trunc_i8: 80e3e9c940SNoah Goldstein; RV64I: # %bb.0: 81de7881ebSNoah Goldstein; RV64I-NEXT: and a0, a0, a1 82e3e9c940SNoah Goldstein; RV64I-NEXT: andi a0, a0, 1 83e3e9c940SNoah Goldstein; RV64I-NEXT: ret 84e3e9c940SNoah Goldstein %masked = and i32 %y, 1 85e3e9c940SNoah Goldstein %x = trunc i8 %xx to i1 86e3e9c940SNoah Goldstein %r = select i1 %x, i32 %masked, i32 0 87e3e9c940SNoah Goldstein ret i32 %r 88e3e9c940SNoah Goldstein} 89e3e9c940SNoah Goldstein 90e3e9c940SNoah Goldsteindefine i32 @from_trunc_i64(i64 %xx, i32 %y) { 91e3e9c940SNoah Goldstein; RV32I-LABEL: from_trunc_i64: 92e3e9c940SNoah Goldstein; RV32I: # %bb.0: 93de7881ebSNoah Goldstein; RV32I-NEXT: and a0, a0, a2 94e3e9c940SNoah Goldstein; RV32I-NEXT: andi a0, a0, 1 95e3e9c940SNoah Goldstein; RV32I-NEXT: ret 96e3e9c940SNoah Goldstein; 97e3e9c940SNoah Goldstein; RV64I-LABEL: from_trunc_i64: 98e3e9c940SNoah Goldstein; RV64I: # %bb.0: 99de7881ebSNoah Goldstein; RV64I-NEXT: and a0, a0, a1 100e3e9c940SNoah Goldstein; RV64I-NEXT: andi a0, a0, 1 101e3e9c940SNoah Goldstein; RV64I-NEXT: ret 102e3e9c940SNoah Goldstein %masked = and i32 %y, 1 103e3e9c940SNoah Goldstein %x = trunc i64 %xx to i1 104e3e9c940SNoah Goldstein %r = select i1 %x, i32 %masked, i32 0 105e3e9c940SNoah Goldstein ret i32 %r 106e3e9c940SNoah Goldstein} 107e3e9c940SNoah Goldstein 108e3e9c940SNoah Goldsteindefine i32 @from_i1_fail_bad_select0(i1 %x, i32 %y) { 109e3e9c940SNoah Goldstein; RV32I-LABEL: from_i1_fail_bad_select0: 110e3e9c940SNoah Goldstein; RV32I: # %bb.0: 111e3e9c940SNoah Goldstein; RV32I-NEXT: andi a0, a0, 1 112e3e9c940SNoah Goldstein; RV32I-NEXT: bnez a0, .LBB5_2 113e3e9c940SNoah Goldstein; RV32I-NEXT: # %bb.1: 114e3e9c940SNoah Goldstein; RV32I-NEXT: li a0, 1 115e3e9c940SNoah Goldstein; RV32I-NEXT: ret 116e3e9c940SNoah Goldstein; RV32I-NEXT: .LBB5_2: 117e3e9c940SNoah Goldstein; RV32I-NEXT: andi a0, a1, 1 118e3e9c940SNoah Goldstein; RV32I-NEXT: ret 119e3e9c940SNoah Goldstein; 120e3e9c940SNoah Goldstein; RV64I-LABEL: from_i1_fail_bad_select0: 121e3e9c940SNoah Goldstein; RV64I: # %bb.0: 122e3e9c940SNoah Goldstein; RV64I-NEXT: andi a0, a0, 1 123e3e9c940SNoah Goldstein; RV64I-NEXT: bnez a0, .LBB5_2 124e3e9c940SNoah Goldstein; RV64I-NEXT: # %bb.1: 125e3e9c940SNoah Goldstein; RV64I-NEXT: li a0, 1 126e3e9c940SNoah Goldstein; RV64I-NEXT: ret 127e3e9c940SNoah Goldstein; RV64I-NEXT: .LBB5_2: 128e3e9c940SNoah Goldstein; RV64I-NEXT: andi a0, a1, 1 129e3e9c940SNoah Goldstein; RV64I-NEXT: ret 130e3e9c940SNoah Goldstein %masked = and i32 %y, 1 131e3e9c940SNoah Goldstein %r = select i1 %x, i32 %masked, i32 1 132e3e9c940SNoah Goldstein ret i32 %r 133e3e9c940SNoah Goldstein} 134e3e9c940SNoah Goldstein 135e3e9c940SNoah Goldsteindefine i32 @from_i1_fail_bad_select1(i1 %x, i32 %y) { 136e3e9c940SNoah Goldstein; RV32I-LABEL: from_i1_fail_bad_select1: 137e3e9c940SNoah Goldstein; RV32I: # %bb.0: 138e3e9c940SNoah Goldstein; RV32I-NEXT: addi a0, a0, -1 139e3e9c940SNoah Goldstein; RV32I-NEXT: and a0, a1, a0 140e3e9c940SNoah Goldstein; RV32I-NEXT: andi a0, a0, 1 141e3e9c940SNoah Goldstein; RV32I-NEXT: ret 142e3e9c940SNoah Goldstein; 143e3e9c940SNoah Goldstein; RV64I-LABEL: from_i1_fail_bad_select1: 144e3e9c940SNoah Goldstein; RV64I: # %bb.0: 145*86240751SPhilip Reames; RV64I-NEXT: addi a0, a0, -1 146e3e9c940SNoah Goldstein; RV64I-NEXT: and a0, a1, a0 147e3e9c940SNoah Goldstein; RV64I-NEXT: andi a0, a0, 1 148e3e9c940SNoah Goldstein; RV64I-NEXT: ret 149e3e9c940SNoah Goldstein %masked = and i32 %y, 1 150e3e9c940SNoah Goldstein %r = select i1 %x, i32 0, i32 %masked 151e3e9c940SNoah Goldstein ret i32 %r 152e3e9c940SNoah Goldstein} 153