107 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py2// RUN: %clang_cc1 -triple riscv64-none-linux-gnu -target-feature +f -target-feature +d -target-feature +zve64d -mvscale-min=1 -mvscale-max=1 -O1 -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-643// RUN: %clang_cc1 -triple riscv64-none-linux-gnu -target-feature +f -target-feature +d -target-feature +zve64d -mvscale-min=2 -mvscale-max=2 -O1 -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-1284 5// REQUIRES: riscv-registered-target6 7#include <riscv_vector.h>8 9typedef vbool32_t fixed_bool32_t __attribute__((riscv_rvv_vector_bits(__riscv_v_fixed_vlen/32)));10typedef vbool64_t fixed_bool64_t __attribute__((riscv_rvv_vector_bits(__riscv_v_fixed_vlen/64)));11 12//===----------------------------------------------------------------------===//13// fixed, fixed14//===----------------------------------------------------------------------===//15 16// CHECK-64-LABEL: @call_bool32_ff(17// CHECK-64-NEXT: entry:18// CHECK-64-NEXT: [[TMP2:%.*]] = tail call <vscale x 2 x i1> @llvm.riscv.vmand.nxv2i1.i64(<vscale x 2 x i1> [[TMP0:%.*]], <vscale x 2 x i1> [[TMP1:%.*]], i64 2)19// CHECK-64-NEXT: ret <vscale x 2 x i1> [[TMP2]]20//21// CHECK-128-LABEL: @call_bool32_ff(22// CHECK-128-NEXT: entry:23// CHECK-128-NEXT: [[TMP2:%.*]] = tail call <vscale x 2 x i1> @llvm.riscv.vmand.nxv2i1.i64(<vscale x 2 x i1> [[TMP0:%.*]], <vscale x 2 x i1> [[TMP1:%.*]], i64 4)24// CHECK-128-NEXT: ret <vscale x 2 x i1> [[TMP2]]25//26fixed_bool32_t call_bool32_ff(fixed_bool32_t op1, fixed_bool32_t op2) {27 return __riscv_vmand(op1, op2, __riscv_v_fixed_vlen / 32);28}29 30// CHECK-64-LABEL: @call_bool64_ff(31// CHECK-64-NEXT: entry:32// CHECK-64-NEXT: [[TMP2:%.*]] = tail call <vscale x 1 x i1> @llvm.riscv.vmand.nxv1i1.i64(<vscale x 1 x i1> [[TMP0:%.*]], <vscale x 1 x i1> [[TMP1:%.*]], i64 1)33// CHECK-64-NEXT: ret <vscale x 1 x i1> [[TMP2]]34//35// CHECK-128-LABEL: @call_bool64_ff(36// CHECK-128-NEXT: entry:37// CHECK-128-NEXT: [[TMP2:%.*]] = tail call <vscale x 1 x i1> @llvm.riscv.vmand.nxv1i1.i64(<vscale x 1 x i1> [[TMP0:%.*]], <vscale x 1 x i1> [[TMP1:%.*]], i64 2)38// CHECK-128-NEXT: ret <vscale x 1 x i1> [[TMP2]]39//40fixed_bool64_t call_bool64_ff(fixed_bool64_t op1, fixed_bool64_t op2) {41 return __riscv_vmand(op1, op2, __riscv_v_fixed_vlen / 64);42}43 44//===----------------------------------------------------------------------===//45// fixed, scalable46//===----------------------------------------------------------------------===//47 48// CHECK-64-LABEL: @call_bool32_fs(49// CHECK-64-NEXT: entry:50// CHECK-64-NEXT: [[TMP1:%.*]] = tail call <vscale x 2 x i1> @llvm.riscv.vmand.nxv2i1.i64(<vscale x 2 x i1> [[TMP0:%.*]], <vscale x 2 x i1> [[OP2:%.*]], i64 2)51// CHECK-64-NEXT: ret <vscale x 2 x i1> [[TMP1]]52//53// CHECK-128-LABEL: @call_bool32_fs(54// CHECK-128-NEXT: entry:55// CHECK-128-NEXT: [[TMP1:%.*]] = tail call <vscale x 2 x i1> @llvm.riscv.vmand.nxv2i1.i64(<vscale x 2 x i1> [[TMP0:%.*]], <vscale x 2 x i1> [[OP2:%.*]], i64 4)56// CHECK-128-NEXT: ret <vscale x 2 x i1> [[TMP1]]57//58fixed_bool32_t call_bool32_fs(fixed_bool32_t op1, vbool32_t op2) {59 return __riscv_vmand(op1, op2, __riscv_v_fixed_vlen / 32);60}61 62// CHECK-64-LABEL: @call_bool64_fs(63// CHECK-64-NEXT: entry:64// CHECK-64-NEXT: [[TMP1:%.*]] = tail call <vscale x 1 x i1> @llvm.riscv.vmand.nxv1i1.i64(<vscale x 1 x i1> [[TMP0:%.*]], <vscale x 1 x i1> [[OP2:%.*]], i64 1)65// CHECK-64-NEXT: ret <vscale x 1 x i1> [[TMP1]]66//67// CHECK-128-LABEL: @call_bool64_fs(68// CHECK-128-NEXT: entry:69// CHECK-128-NEXT: [[TMP1:%.*]] = tail call <vscale x 1 x i1> @llvm.riscv.vmand.nxv1i1.i64(<vscale x 1 x i1> [[TMP0:%.*]], <vscale x 1 x i1> [[OP2:%.*]], i64 2)70// CHECK-128-NEXT: ret <vscale x 1 x i1> [[TMP1]]71//72fixed_bool64_t call_bool64_fs(fixed_bool64_t op1, vbool64_t op2) {73 return __riscv_vmand(op1, op2, __riscv_v_fixed_vlen / 64);74}75 76//===----------------------------------------------------------------------===//77// scalable, scalable78//===----------------------------------------------------------------------===//79 80// CHECK-64-LABEL: @call_bool32_ss(81// CHECK-64-NEXT: entry:82// CHECK-64-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.riscv.vmand.nxv2i1.i64(<vscale x 2 x i1> [[OP1:%.*]], <vscale x 2 x i1> [[OP2:%.*]], i64 2)83// CHECK-64-NEXT: ret <vscale x 2 x i1> [[TMP0]]84//85// CHECK-128-LABEL: @call_bool32_ss(86// CHECK-128-NEXT: entry:87// CHECK-128-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.riscv.vmand.nxv2i1.i64(<vscale x 2 x i1> [[OP1:%.*]], <vscale x 2 x i1> [[OP2:%.*]], i64 4)88// CHECK-128-NEXT: ret <vscale x 2 x i1> [[TMP0]]89//90fixed_bool32_t call_bool32_ss(vbool32_t op1, vbool32_t op2) {91 return __riscv_vmand(op1, op2, __riscv_v_fixed_vlen / 32);92}93 94// CHECK-64-LABEL: @call_bool64_ss(95// CHECK-64-NEXT: entry:96// CHECK-64-NEXT: [[TMP0:%.*]] = tail call <vscale x 1 x i1> @llvm.riscv.vmand.nxv1i1.i64(<vscale x 1 x i1> [[OP1:%.*]], <vscale x 1 x i1> [[OP2:%.*]], i64 1)97// CHECK-64-NEXT: ret <vscale x 1 x i1> [[TMP0]]98//99// CHECK-128-LABEL: @call_bool64_ss(100// CHECK-128-NEXT: entry:101// CHECK-128-NEXT: [[TMP0:%.*]] = tail call <vscale x 1 x i1> @llvm.riscv.vmand.nxv1i1.i64(<vscale x 1 x i1> [[OP1:%.*]], <vscale x 1 x i1> [[OP2:%.*]], i64 2)102// CHECK-128-NEXT: ret <vscale x 1 x i1> [[TMP0]]103//104fixed_bool64_t call_bool64_ss(vbool64_t op1, vbool64_t op2) {105 return __riscv_vmand(op1, op2, __riscv_v_fixed_vlen / 64);106}107