104 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 52// RUN: %clang_cc1 -emit-llvm -triple aarch64-arm-none-eabi -target-feature -fp8 -target-feature +neon -disable-O0-optnone -o - %s | opt -S --passes=mem2reg | FileCheck %s --check-prefixes=CHECK-C3// RUN: %clang_cc1 -emit-llvm -triple aarch64-arm-none-eabi -target-feature -fp8 -target-feature +neon -disable-O0-optnone -o - -x c++ %s | opt -S --passes=mem2reg | FileCheck %s --check-prefixes=CHECK-CXX4 5// REQUIRES: aarch64-registered-target6 7 8#include <arm_neon.h>9 10// CHECK-C-LABEL: define dso_local <16 x i8> @test_ret_mfloat8x16_t(11// CHECK-C-SAME: <16 x i8> [[V:%.*]]) #[[ATTR0:[0-9]+]] {12// CHECK-C-NEXT: [[ENTRY:.*:]]13// CHECK-C-NEXT: ret <16 x i8> [[V]]14//15// CHECK-CXX-LABEL: define dso_local <16 x i8> @_Z21test_ret_mfloat8x16_t14__Mfloat8x16_t(16// CHECK-CXX-SAME: <16 x i8> [[V:%.*]]) #[[ATTR0:[0-9]+]] {17// CHECK-CXX-NEXT: [[ENTRY:.*:]]18// CHECK-CXX-NEXT: ret <16 x i8> [[V]]19//20mfloat8x16_t test_ret_mfloat8x16_t(mfloat8x16_t v) {21 return v;22}23 24// CHECK-C-LABEL: define dso_local <8 x i8> @test_ret_mfloat8x8_t(25// CHECK-C-SAME: <8 x i8> [[V:%.*]]) #[[ATTR0]] {26// CHECK-C-NEXT: [[ENTRY:.*:]]27// CHECK-C-NEXT: ret <8 x i8> [[V]]28//29// CHECK-CXX-LABEL: define dso_local <8 x i8> @_Z20test_ret_mfloat8x8_t13__Mfloat8x8_t(30// CHECK-CXX-SAME: <8 x i8> [[V:%.*]]) #[[ATTR0]] {31// CHECK-CXX-NEXT: [[ENTRY:.*:]]32// CHECK-CXX-NEXT: ret <8 x i8> [[V]]33//34mfloat8x8_t test_ret_mfloat8x8_t(mfloat8x8_t v) {35 return v;36}37 38// CHECK-C-LABEL: define dso_local <1 x i8> @func1n(39// CHECK-C-SAME: <1 x i8> [[MFP8:%.*]]) #[[ATTR0]] {40// CHECK-C-NEXT: [[ENTRY:.*:]]41// CHECK-C-NEXT: [[F1N:%.*]] = alloca [10 x <1 x i8>], align 142// CHECK-C-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [10 x <1 x i8>], ptr [[F1N]], i64 0, i64 243// CHECK-C-NEXT: store <1 x i8> [[MFP8]], ptr [[ARRAYIDX]], align 144// CHECK-C-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds [10 x <1 x i8>], ptr [[F1N]], i64 0, i64 245// CHECK-C-NEXT: [[TMP0:%.*]] = load <1 x i8>, ptr [[ARRAYIDX1]], align 146// CHECK-C-NEXT: ret <1 x i8> [[TMP0]]47//48// CHECK-CXX-LABEL: define dso_local <1 x i8> @_Z6func1nu6__mfp8(49// CHECK-CXX-SAME: <1 x i8> [[MFP8:%.*]]) #[[ATTR0]] {50// CHECK-CXX-NEXT: [[ENTRY:.*:]]51// CHECK-CXX-NEXT: [[F1N:%.*]] = alloca [10 x <1 x i8>], align 152// CHECK-CXX-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [10 x <1 x i8>], ptr [[F1N]], i64 0, i64 253// CHECK-CXX-NEXT: store <1 x i8> [[MFP8]], ptr [[ARRAYIDX]], align 154// CHECK-CXX-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds [10 x <1 x i8>], ptr [[F1N]], i64 0, i64 255// CHECK-CXX-NEXT: [[TMP0:%.*]] = load <1 x i8>, ptr [[ARRAYIDX1]], align 156// CHECK-CXX-NEXT: ret <1 x i8> [[TMP0]]57//58__mfp8 func1n(__mfp8 mfp8) {59 __mfp8 f1n[10];60 f1n[2] = mfp8;61 return f1n[2];62}63 64// CHECK-C-LABEL: define dso_local <1 x i8> @test_extract_element(65// CHECK-C-SAME: <16 x i8> [[X:%.*]], i32 noundef [[I:%.*]]) #[[ATTR0]] {66// CHECK-C-NEXT: [[ENTRY:.*:]]67// CHECK-C-NEXT: [[RETVAL:%.*]] = alloca <1 x i8>, align 168// CHECK-C-NEXT: [[VECEXT:%.*]] = extractelement <16 x i8> [[X]], i32 [[I]]69// CHECK-C-NEXT: store i8 [[VECEXT]], ptr [[RETVAL]], align 170// CHECK-C-NEXT: [[TMP0:%.*]] = load <1 x i8>, ptr [[RETVAL]], align 171// CHECK-C-NEXT: ret <1 x i8> [[TMP0]]72//73// CHECK-CXX-LABEL: define dso_local <1 x i8> @_Z20test_extract_element14__Mfloat8x16_ti(74// CHECK-CXX-SAME: <16 x i8> [[X:%.*]], i32 noundef [[I:%.*]]) #[[ATTR0]] {75// CHECK-CXX-NEXT: [[ENTRY:.*:]]76// CHECK-CXX-NEXT: [[RETVAL:%.*]] = alloca <1 x i8>, align 177// CHECK-CXX-NEXT: [[VECEXT:%.*]] = extractelement <16 x i8> [[X]], i32 [[I]]78// CHECK-CXX-NEXT: store i8 [[VECEXT]], ptr [[RETVAL]], align 179// CHECK-CXX-NEXT: [[TMP0:%.*]] = load <1 x i8>, ptr [[RETVAL]], align 180// CHECK-CXX-NEXT: ret <1 x i8> [[TMP0]]81//82mfloat8_t test_extract_element(mfloat8x16_t x, int i) {83 return x[i];84}85 86// CHECK-C-LABEL: define dso_local <16 x i8> @test_insert_element(87// CHECK-C-SAME: <16 x i8> [[X:%.*]], i32 noundef [[I:%.*]], <1 x i8> [[V:%.*]]) #[[ATTR0]] {88// CHECK-C-NEXT: [[ENTRY:.*:]]89// CHECK-C-NEXT: [[TMP0:%.*]] = bitcast <1 x i8> [[V]] to i890// CHECK-C-NEXT: [[VECINS:%.*]] = insertelement <16 x i8> [[X]], i8 [[TMP0]], i32 [[I]]91// CHECK-C-NEXT: ret <16 x i8> [[VECINS]]92//93// CHECK-CXX-LABEL: define dso_local <16 x i8> @_Z19test_insert_element14__Mfloat8x16_tiu6__mfp8(94// CHECK-CXX-SAME: <16 x i8> [[X:%.*]], i32 noundef [[I:%.*]], <1 x i8> [[V:%.*]]) #[[ATTR0]] {95// CHECK-CXX-NEXT: [[ENTRY:.*:]]96// CHECK-CXX-NEXT: [[TMP0:%.*]] = bitcast <1 x i8> [[V]] to i897// CHECK-CXX-NEXT: [[VECINS:%.*]] = insertelement <16 x i8> [[X]], i8 [[TMP0]], i32 [[I]]98// CHECK-CXX-NEXT: ret <16 x i8> [[VECINS]]99//100mfloat8x16_t test_insert_element(mfloat8x16_t x, int i, mfloat8_t v) {101 x[i] = v;102 return x;103}104