brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · 613a390 Raw
72 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py2// RUN: %clang_cc1 -triple thumbv8.1m.main-none-none-eabi -target-feature +mve.fp -mfloat-abi hard -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s3// RUN: %clang_cc1 -triple thumbv8.1m.main-none-none-eabi -target-feature +mve.fp -mfloat-abi hard -disable-O0-optnone -DPOLYMORPHIC -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s4 5// REQUIRES: aarch64-registered-target || arm-registered-target6 7#include <arm_mve.h>8 9// CHECK-LABEL: @test_vmaxnmaq_f16(10// CHECK-NEXT:  entry:11// CHECK-NEXT:    [[TMP0:%.*]] = call <8 x half> @llvm.fabs.v8f16(<8 x half> [[A:%.*]])12// CHECK-NEXT:    [[TMP1:%.*]] = call <8 x half> @llvm.fabs.v8f16(<8 x half> [[B:%.*]])13// CHECK-NEXT:    [[TMP2:%.*]] = call <8 x half> @llvm.maxnum.v8f16(<8 x half> [[TMP0]], <8 x half> [[TMP1]])14// CHECK-NEXT:    ret <8 x half> [[TMP2]]15//16float16x8_t test_vmaxnmaq_f16(float16x8_t a, float16x8_t b)17{18#ifdef POLYMORPHIC19    return vmaxnmaq(a, b);20#else /* POLYMORPHIC */21    return vmaxnmaq_f16(a, b);22#endif /* POLYMORPHIC */23}24 25// CHECK-LABEL: @test_vmaxnmaq_f32(26// CHECK-NEXT:  entry:27// CHECK-NEXT:    [[TMP0:%.*]] = call <4 x float> @llvm.fabs.v4f32(<4 x float> [[A:%.*]])28// CHECK-NEXT:    [[TMP1:%.*]] = call <4 x float> @llvm.fabs.v4f32(<4 x float> [[B:%.*]])29// CHECK-NEXT:    [[TMP2:%.*]] = call <4 x float> @llvm.maxnum.v4f32(<4 x float> [[TMP0]], <4 x float> [[TMP1]])30// CHECK-NEXT:    ret <4 x float> [[TMP2]]31//32float32x4_t test_vmaxnmaq_f32(float32x4_t a, float32x4_t b)33{34#ifdef POLYMORPHIC35    return vmaxnmaq(a, b);36#else /* POLYMORPHIC */37    return vmaxnmaq_f32(a, b);38#endif /* POLYMORPHIC */39}40 41// CHECK-LABEL: @test_vmaxnmaq_m_f16(42// CHECK-NEXT:  entry:43// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i3244// CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])45// CHECK-NEXT:    [[TMP2:%.*]] = call <8 x half> @llvm.arm.mve.vmaxnma.predicated.v8f16.v8i1(<8 x half> [[A:%.*]], <8 x half> [[B:%.*]], <8 x i1> [[TMP1]])46// CHECK-NEXT:    ret <8 x half> [[TMP2]]47//48float16x8_t test_vmaxnmaq_m_f16(float16x8_t a, float16x8_t b, mve_pred16_t p)49{50#ifdef POLYMORPHIC51    return vmaxnmaq_m(a, b, p);52#else /* POLYMORPHIC */53    return vmaxnmaq_m_f16(a, b, p);54#endif /* POLYMORPHIC */55}56 57// CHECK-LABEL: @test_vmaxnmaq_m_f32(58// CHECK-NEXT:  entry:59// CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i3260// CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])61// CHECK-NEXT:    [[TMP2:%.*]] = call <4 x float> @llvm.arm.mve.vmaxnma.predicated.v4f32.v4i1(<4 x float> [[A:%.*]], <4 x float> [[B:%.*]], <4 x i1> [[TMP1]])62// CHECK-NEXT:    ret <4 x float> [[TMP2]]63//64float32x4_t test_vmaxnmaq_m_f32(float32x4_t a, float32x4_t b, mve_pred16_t p)65{66#ifdef POLYMORPHIC67    return vmaxnmaq_m(a, b, p);68#else /* POLYMORPHIC */69    return vmaxnmaq_m_f32(a, b, p);70#endif /* POLYMORPHIC */71}72